Security update for permissions_by_term
[yaffs-website] / vendor / drupal / drupal-driver / src / Drupal / Driver / Fields / Drupal8 / EntityReferenceHandler.php
1 <?php
2
3 namespace Drupal\Driver\Fields\Drupal8;
4
5 /**
6  * Entity Reference field handler for Drupal 8.
7  */
8 class EntityReferenceHandler extends AbstractHandler {
9
10   /**
11    * {@inheritdoc}
12    */
13   public function expand($values) {
14     $return = array();
15     $entity_type_id = $this->fieldInfo->getSetting('target_type');
16     $entity_definition = \Drupal::entityManager()->getDefinition($entity_type_id);
17     $label_key = $entity_definition->getKey('label');
18
19     // Determine target bundle restrictions.
20     $target_bundle_key = NULL;
21     if (!$target_bundles = $this->getTargetBundles()) {
22       $target_bundle_key = $entity_definition->getKey('bundle');
23     }
24
25     foreach ($values as $value) {
26       $query = \Drupal::entityQuery($entity_type_id)->condition($label_key, $value);
27       if ($target_bundles && $target_bundle_key) {
28         $query->condition($target_bundle_key, $target_bundles, 'IN');
29       }
30       if ($entities = $query->execute()) {
31         $return[] = array_shift($entities);
32       }
33       else {
34         throw new \Exception(sprintf("No entity '%s' of type '%s' exists.", $value, $entity_type_id));
35       }
36     }
37     return $return;
38   }
39
40   /**
41    * Retrieves bundles for which the field is configured to reference.
42    *
43    * @return mixed
44    *   Array of bundle names, or NULL if not able to determine bundles.
45    */
46   protected function getTargetBundles() {
47     $settings = $this->fieldConfig->getSettings();
48     if (!empty($settings['handler_settings']['target_bundles'])) {
49       return $settings['handler_settings']['target_bundles'];
50     }
51   }
52
53 }