Commit 2eebc472 authored by catch's avatar catch

Issue #2132773 by g-brodiei, killes@www.drop.org, DevJoJodae, jonathanshaw,...

Issue #2132773 by g-brodiei, killes@www.drop.org, DevJoJodae, jonathanshaw, dawehner: Don't add term_access tag if SQL rewriting off

(cherry picked from commit 50e0c6f2)
parent 9d15696b
......@@ -133,7 +133,9 @@ public function query() {
$query = Database::getConnection()->select('taxonomy_term_field_data', 'td');
$query->addJoin($def['type'], 'taxonomy_index', 'tn', 'tn.tid = td.tid');
$query->condition('td.vid', array_filter($this->options['vids']), 'IN');
$query->addTag('taxonomy_term_access');
if (empty($this->query->options['disable_sql_rewrite'])) {
$query->addTag('taxonomy_term_access');
}
$query->fields('td');
$query->fields('tn', ['nid']);
$def['table formula'] = $query;
......
......@@ -3,6 +3,7 @@
namespace Drupal\Tests\taxonomy\Functional\Views;
use Drupal\views\Views;
use Drupal\views\ViewExecutable;
/**
* Tests the taxonomy term on node relationship handler.
......@@ -60,4 +61,52 @@ public function testViewsHandlerRelationshipNodeTermData() {
$this->assertIdenticalResultset($view, $expected_result, $column_map);
}
/**
* Tests that the 'taxonomy_term_access' tag is added to the Views query.
*/
public function testTag() {
// Change the view to test relation limited by vocabulary.
$this->config('views.view.test_taxonomy_node_term_data')
->set('display.default.display_options.relationships.term_node_tid.vids', ['views_testing_tags'])
->save();
$view = Views::getView('test_taxonomy_node_term_data');
$this->executeView($view, [$this->term1->id()]);
// By default, view has taxonomy_term_access tag.
$this->assertQueriesTermAccessTag($view, TRUE);
// The term_access tag is not set if disable_sql_rewrite is set.
$view = Views::getView('test_taxonomy_node_term_data');
$display = $view->getDisplay();
$display_options = $display->getOption('query');
$display_options['options']['disable_sql_rewrite'] = TRUE;
$display->setOption('query', $display_options);
$view->save();
$this->executeView($view, [$this->term1->id()]);
$this->assertQueriesTermAccessTag($view, FALSE);
}
/**
* Assert views queries have taxonomy_term_access tag.
*
* @param \Drupal\views\ViewExecutable $view
* The View to check for the term access tag.
* @param bool $hasTag
* The expected existence of taxonomy_term_access tag.
*/
protected function assertQueriesTermAccessTag(ViewExecutable $view, $hasTag) {
$main_query = $view->build_info['query'];
$count_query = $view->build_info['count_query'];
foreach ([$main_query, $count_query] as $query) {
$tables = $query->getTables();
foreach ($tables as $join_table) {
if (is_object($join_table['table'])) {
$this->assertSame($join_table['table']->hasTag('taxonomy_term_access'), $hasTag);
}
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment