X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fdrupal%2Fdrupal-driver%2Fsrc%2FDrupal%2FDriver%2FFields%2FDrupal8%2FEntityReferenceHandler.php;fp=vendor%2Fdrupal%2Fdrupal-driver%2Fsrc%2FDrupal%2FDriver%2FFields%2FDrupal8%2FEntityReferenceHandler.php;h=0552b6fe9826300760092b6f9bd39bc6d977d05a;hp=0000000000000000000000000000000000000000;hb=1270d9129ce8f27c9b28b10518e32132c58e0aca;hpb=c27c0f0cdaa3f354b1fe54a56ae7e854be6e3f68 diff --git a/vendor/drupal/drupal-driver/src/Drupal/Driver/Fields/Drupal8/EntityReferenceHandler.php b/vendor/drupal/drupal-driver/src/Drupal/Driver/Fields/Drupal8/EntityReferenceHandler.php new file mode 100644 index 000000000..0552b6fe9 --- /dev/null +++ b/vendor/drupal/drupal-driver/src/Drupal/Driver/Fields/Drupal8/EntityReferenceHandler.php @@ -0,0 +1,53 @@ +fieldInfo->getSetting('target_type'); + $entity_definition = \Drupal::entityManager()->getDefinition($entity_type_id); + $label_key = $entity_definition->getKey('label'); + + // Determine target bundle restrictions. + $target_bundle_key = NULL; + if (!$target_bundles = $this->getTargetBundles()) { + $target_bundle_key = $entity_definition->getKey('bundle'); + } + + foreach ($values as $value) { + $query = \Drupal::entityQuery($entity_type_id)->condition($label_key, $value); + if ($target_bundles && $target_bundle_key) { + $query->condition($target_bundle_key, $target_bundles, 'IN'); + } + if ($entities = $query->execute()) { + $return[] = array_shift($entities); + } + else { + throw new \Exception(sprintf("No entity '%s' of type '%s' exists.", $value, $entity_type_id)); + } + } + return $return; + } + + /** + * Retrieves bundles for which the field is configured to reference. + * + * @return mixed + * Array of bundle names, or NULL if not able to determine bundles. + */ + protected function getTargetBundles() { + $settings = $this->fieldConfig->getSettings(); + if (!empty($settings['handler_settings']['target_bundles'])) { + return $settings['handler_settings']['target_bundles']; + } + } + +}