Mercurial > hg > isophonics-drupal-site
diff core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,77 @@ +<?php + +namespace Drupal\taxonomy\Plugin\EntityReferenceSelection; + +use Drupal\Component\Utility\Html; +use Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection; +use Drupal\Core\Form\FormStateInterface; +use Drupal\taxonomy\Entity\Vocabulary; + +/** + * Provides specific access control for the taxonomy_term entity type. + * + * @EntityReferenceSelection( + * id = "default:taxonomy_term", + * label = @Translation("Taxonomy Term selection"), + * entity_types = {"taxonomy_term"}, + * group = "default", + * weight = 1 + * ) + */ +class TermSelection extends DefaultSelection { + + /** + * {@inheritdoc} + */ + public function defaultConfiguration() { + return [ + 'sort' => [ + 'field' => 'name', + 'direction' => 'asc', + ] + ] + parent::defaultConfiguration(); + } + + /** + * {@inheritdoc} + */ + public function buildConfigurationForm(array $form, FormStateInterface $form_state) { + $form = parent::buildConfigurationForm($form, $form_state); + + $form['target_bundles']['#title'] = $this->t('Available Vocabularies'); + + // Sorting is not possible for taxonomy terms because we use + // \Drupal\taxonomy\TermStorageInterface::loadTree() to retrieve matches. + $form['sort']['#access'] = FALSE; + + return $form; + + } + + /** + * {@inheritdoc} + */ + public function getReferenceableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) { + if ($match || $limit) { + return parent::getReferenceableEntities($match, $match_operator, $limit); + } + + $options = []; + + $bundles = $this->entityManager->getBundleInfo('taxonomy_term'); + $bundle_names = $this->getConfiguration()['target_bundles'] ?: array_keys($bundles); + + foreach ($bundle_names as $bundle) { + if ($vocabulary = Vocabulary::load($bundle)) { + if ($terms = $this->entityManager->getStorage('taxonomy_term')->loadTree($vocabulary->id(), 0, NULL, TRUE)) { + foreach ($terms as $term) { + $options[$vocabulary->id()][$term->id()] = str_repeat('-', $term->depth) . Html::escape($this->entityManager->getTranslationFromContext($term)->label()); + } + } + } + } + + return $options; + } + +}