Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 29 |
| TermSelection | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
132 | |
0.00% |
0 / 29 |
| entityQueryAlter | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| buildConfigurationForm | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 10 |
|||
| getReferenceableEntities | |
0.00% |
0 / 1 |
72 | |
0.00% |
0 / 18 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\taxonomy\Plugin\EntityReferenceSelection\TermSelection. | |
| */ | |
| namespace Drupal\taxonomy\Plugin\EntityReferenceSelection; | |
| use Drupal\Component\Utility\Html; | |
| use Drupal\Core\Database\Query\SelectInterface; | |
| 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 entityQueryAlter(SelectInterface $query) { | |
| // @todo: How to set access, as vocabulary is now config? | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildConfigurationForm(array $form, FormStateInterface $form_state) { | |
| $form = parent::buildConfigurationForm($form, $form_state); | |
| $form['target_bundles']['#title'] = $this->t('Vocabularies'); | |
| // @todo: Currently allow auto-create only on taxonomy terms. | |
| $form['auto_create'] = array( | |
| '#type' => 'checkbox', | |
| '#title' => $this->t("Create referenced entities if they don't already exist"), | |
| '#default_value' => isset($this->configuration['handler_settings']['auto_create']) ? $this->configuration['handler_settings']['auto_create'] : FALSE, | |
| ); | |
| // 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 = array(); | |
| $bundles = $this->entityManager->getBundleInfo('taxonomy_term'); | |
| $handler_settings = $this->configuration['handler_settings']; | |
| $bundle_names = !empty($handler_settings['target_bundles']) ? $handler_settings['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; | |
| } | |
| } |