public function TaxonomyIndexTidDepth::query in Views (for Drupal 7) 8.3
Add this filter to the query.
Due to the nature of fapi, the value and the operator have an unintended level of indirection. You will find them in $this->operator and $this->value respectively.
Overrides InOperator::query
File
- lib/
Views/ taxonomy/ Plugin/ views/ filter/ TaxonomyIndexTidDepth.php, line 52 - Definition of Views\taxonomy\Plugin\views\filter\TaxonomyIndexTidDepth.
Class
- TaxonomyIndexTidDepth
- Filter handler for taxonomy terms with depth.
Namespace
Views\taxonomy\Plugin\views\filterCode
public function query() {
// If no filter values are present, then do nothing.
if (count($this->value) == 0) {
return;
}
elseif (count($this->value) == 1) {
// Somethis $this->value is an array with a single element so convert it.
if (is_array($this->value)) {
$this->value = current($this->value);
}
$operator = '=';
}
else {
$operator = 'IN';
# " IN (" . implode(', ', array_fill(0, sizeof($this->value), '%d')) . ")";
}
// The normal use of ensureMyTable() here breaks Views.
// So instead we trick the filter into using the alias of the base table.
// See http://drupal.org/node/271833
// If a relationship is set, we must use the alias it provides.
if (!empty($this->relationship)) {
$this->tableAlias = $this->relationship;
}
elseif (isset($this->query->table_queue[$this->query->base_table]['alias'])) {
$this->tableAlias = $this->query->table_queue[$this->query->base_table]['alias'];
}
else {
return;
}
// Now build the subqueries.
$subquery = db_select('taxonomy_index', 'tn');
$subquery
->addField('tn', 'nid');
$where = db_or()
->condition('tn.tid', $this->value, $operator);
$last = "tn";
if ($this->options['depth'] > 0) {
$subquery
->leftJoin('taxonomy_term_hierarchy', 'th', "th.tid = tn.tid");
$last = "th";
foreach (range(1, abs($this->options['depth'])) as $count) {
$subquery
->leftJoin('taxonomy_term_hierarchy', "th{$count}", "{$last}.parent = th{$count}.tid");
$where
->condition("th{$count}.tid", $this->value, $operator);
$last = "th{$count}";
}
}
elseif ($this->options['depth'] < 0) {
foreach (range(1, abs($this->options['depth'])) as $count) {
$subquery
->leftJoin('taxonomy_term_hierarchy', "th{$count}", "{$last}.tid = th{$count}.parent");
$where
->condition("th{$count}.tid", $this->value, $operator);
$last = "th{$count}";
}
}
$subquery
->condition($where);
$this->query
->add_where($this->options['group'], "{$this->tableAlias}.{$this->realField}", $subquery, 'IN');
}