Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 10 |
CRAP | |
0.00% |
0 / 93 |
TaxonomyIndexTid | |
0.00% |
0 / 1 |
|
0.00% |
0 / 10 |
462 | |
0.00% |
0 / 93 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 7 |
|||
init | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 8 |
|||
defineOptions | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
buildOptionsForm | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 28 |
|||
query | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
preRender | |
0.00% |
0 / 1 |
72 | |
0.00% |
0 / 28 |
|||
render_item | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
documentSelfTokens | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
addSelfTokens | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 4 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\taxonomy\Plugin\views\field\TaxonomyIndexTid. | |
*/ | |
namespace Drupal\taxonomy\Plugin\views\field; | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\views\ViewExecutable; | |
use Drupal\views\Plugin\views\display\DisplayPluginBase; | |
use Drupal\views\Plugin\views\field\PrerenderList; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
use Drupal\taxonomy\VocabularyStorageInterface; | |
/** | |
* Field handler to display all taxonomy terms of a node. | |
* | |
* @ingroup views_field_handlers | |
* | |
* @ViewsField("taxonomy_index_tid") | |
*/ | |
class TaxonomyIndexTid extends PrerenderList { | |
/** | |
* The vocabulary storage. | |
* | |
* @var \Drupal\taxonomy\VocabularyStorageInterface. | |
*/ | |
protected $vocabularyStorage; | |
/** | |
* Constructs a TaxonomyIndexTid object. | |
* | |
* @param array $configuration | |
* A configuration array containing information about the plugin instance. | |
* @param string $plugin_id | |
* The plugin_id for the plugin instance. | |
* @param mixed $plugin_definition | |
* The plugin implementation definition. | |
* @param \Drupal\taxonomy\VocabularyStorageInterface $vocabulary_storage | |
* The vocabulary storage. | |
*/ | |
public function __construct(array $configuration, $plugin_id, $plugin_definition, VocabularyStorageInterface $vocabulary_storage) { | |
parent::__construct($configuration, $plugin_id, $plugin_definition); | |
$this->vocabularyStorage = $vocabulary_storage; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { | |
return new static( | |
$configuration, | |
$plugin_id, | |
$plugin_definition, | |
$container->get('entity.manager')->getStorage('taxonomy_vocabulary') | |
); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) { | |
parent::init($view, $display, $options); | |
// @todo: Wouldn't it be possible to use $this->base_table and no if here? | |
if ($view->storage->get('base_table') == 'node_field_revision') { | |
$this->additional_fields['nid'] = array('table' => 'node_field_revision', 'field' => 'nid'); | |
} | |
else { | |
$this->additional_fields['nid'] = array('table' => 'node_field_data', 'field' => 'nid'); | |
} | |
} | |
protected function defineOptions() { | |
$options = parent::defineOptions(); | |
$options['link_to_taxonomy'] = array('default' => TRUE); | |
$options['limit'] = array('default' => FALSE); | |
$options['vids'] = array('default' => array()); | |
return $options; | |
} | |
/** | |
* Provide "link to term" option. | |
*/ | |
public function buildOptionsForm(&$form, FormStateInterface $form_state) { | |
$form['link_to_taxonomy'] = array( | |
'#title' => $this->t('Link this field to its term page'), | |
'#type' => 'checkbox', | |
'#default_value' => !empty($this->options['link_to_taxonomy']), | |
); | |
$form['limit'] = array( | |
'#type' => 'checkbox', | |
'#title' => $this->t('Limit terms by vocabulary'), | |
'#default_value' => $this->options['limit'], | |
); | |
$options = array(); | |
$vocabularies = $this->vocabularyStorage->loadMultiple(); | |
foreach ($vocabularies as $voc) { | |
$options[$voc->id()] = $voc->label(); | |
} | |
$form['vids'] = array( | |
'#type' => 'checkboxes', | |
'#title' => $this->t('Vocabularies'), | |
'#options' => $options, | |
'#default_value' => $this->options['vids'], | |
'#states' => array( | |
'visible' => array( | |
':input[name="options[limit]"]' => array('checked' => TRUE), | |
), | |
), | |
); | |
parent::buildOptionsForm($form, $form_state); | |
} | |
/** | |
* Add this term to the query | |
*/ | |
public function query() { | |
$this->addAdditionalFields(); | |
} | |
public function preRender(&$values) { | |
$vocabularies = $this->vocabularyStorage->loadMultiple(); | |
$this->field_alias = $this->aliases['nid']; | |
$nids = array(); | |
foreach ($values as $result) { | |
if (!empty($result->{$this->aliases['nid']})) { | |
$nids[] = $result->{$this->aliases['nid']}; | |
} | |
} | |
if ($nids) { | |
$vocabs = array_filter($this->options['vids']); | |
if (empty($this->options['limit'])) { | |
$vocabs = array(); | |
} | |
$result = \Drupal::entityManager()->getStorage('taxonomy_term')->getNodeTerms($nids, $vocabs); | |
foreach ($result as $node_nid => $data) { | |
foreach ($data as $tid => $term) { | |
$this->items[$node_nid][$tid]['name'] = \Drupal::entityManager()->getTranslationFromContext($term)->label(); | |
$this->items[$node_nid][$tid]['tid'] = $tid; | |
$this->items[$node_nid][$tid]['vocabulary_vid'] = $term->getVocabularyId(); | |
$this->items[$node_nid][$tid]['vocabulary'] = $vocabularies[$term->getVocabularyId()]->label(); | |
if (!empty($this->options['link_to_taxonomy'])) { | |
$this->items[$node_nid][$tid]['make_link'] = TRUE; | |
$this->items[$node_nid][$tid]['path'] = 'taxonomy/term/' . $tid; | |
} | |
} | |
} | |
} | |
} | |
function render_item($count, $item) { | |
return $item['name']; | |
} | |
protected function documentSelfTokens(&$tokens) { | |
$tokens['{{ ' . $this->options['id'] . '__tid' . ' }}'] = $this->t('The taxonomy term ID for the term.'); | |
$tokens['{{ ' . $this->options['id'] . '__name' . ' }}'] = $this->t('The taxonomy term name for the term.'); | |
$tokens['{{ ' . $this->options['id'] . '__vocabulary_vid' . ' }}'] = $this->t('The machine name for the vocabulary the term belongs to.'); | |
$tokens['{{ ' . $this->options['id'] . '__vocabulary' . ' }}'] = $this->t('The name for the vocabulary the term belongs to.'); | |
} | |
protected function addSelfTokens(&$tokens, $item) { | |
foreach (array('tid', 'name', 'vocabulary_vid', 'vocabulary') as $token) { | |
$tokens['{{ ' . $this->options['id'] . '__' . $token . ' }}'] = isset($item[$token]) ? $item[$token] : ''; | |
} | |
} | |
} |