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; | |
} | |
} |