Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 29 |
EntityRepository | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
156 | |
0.00% |
0 / 29 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
loadEntityByUuid | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
loadEntityByConfigTarget | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
getTranslationFromContext | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 16 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Entity\EntityRepository. | |
*/ | |
namespace Drupal\Core\Entity; | |
use Drupal\Core\Config\Entity\ConfigEntityTypeInterface; | |
use Drupal\Core\Language\LanguageInterface; | |
use Drupal\Core\Language\LanguageManagerInterface; | |
use Drupal\Core\TypedData\TranslatableInterface; | |
/** | |
* Provides several mechanisms for retrieving entities. | |
*/ | |
class EntityRepository implements EntityRepositoryInterface { | |
/** | |
* The entity type manager. | |
* | |
* @var \Drupal\Core\Entity\EntityTypeManagerInterface | |
*/ | |
protected $entityTypeManager; | |
/** | |
* The language manager. | |
* | |
* @var \Drupal\Core\Language\LanguageManagerInterface | |
*/ | |
protected $languageManager; | |
/** | |
* Constructs a new EntityRepository. | |
* | |
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager | |
* The entity type manager. | |
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager | |
* The language manager. | |
*/ | |
public function __construct(EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager) { | |
$this->entityTypeManager = $entity_type_manager; | |
$this->languageManager = $language_manager; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function loadEntityByUuid($entity_type_id, $uuid) { | |
$entity_type = $this->entityTypeManager->getDefinition($entity_type_id); | |
if (!$uuid_key = $entity_type->getKey('uuid')) { | |
throw new EntityStorageException("Entity type $entity_type_id does not support UUIDs."); | |
} | |
$entities = $this->entityTypeManager->getStorage($entity_type_id)->loadByProperties([$uuid_key => $uuid]); | |
return reset($entities); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function loadEntityByConfigTarget($entity_type_id, $target) { | |
$entity_type = $this->entityTypeManager->getDefinition($entity_type_id); | |
// For configuration entities, the config target is given by the entity ID. | |
// @todo Consider adding a method to allow entity types to indicate the | |
// target identifier key rather than hard-coding this check. Issue: | |
// https://www.drupal.org/node/2412983. | |
if ($entity_type instanceof ConfigEntityTypeInterface) { | |
$entity = $this->entityTypeManager->getStorage($entity_type_id)->load($target); | |
} | |
// For content entities, the config target is given by the UUID. | |
else { | |
$entity = $this->loadEntityByUuid($entity_type_id, $target); | |
} | |
return $entity; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getTranslationFromContext(EntityInterface $entity, $langcode = NULL, $context = array()) { | |
$translation = $entity; | |
if ($entity instanceof TranslatableInterface && count($entity->getTranslationLanguages()) > 1) { | |
if (empty($langcode)) { | |
$langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); | |
$entity->addCacheContexts(['languages:' . LanguageInterface::TYPE_CONTENT]); | |
} | |
// Retrieve language fallback candidates to perform the entity language | |
// negotiation, unless the current translation is already the desired one. | |
if ($entity->language()->getId() != $langcode) { | |
$context['data'] = $entity; | |
$context += array('operation' => 'entity_view', 'langcode' => $langcode); | |
$candidates = $this->languageManager->getFallbackCandidates($context); | |
// Ensure the default language has the proper language code. | |
$default_language = $entity->getUntranslated()->language(); | |
$candidates[$default_language->getId()] = LanguageInterface::LANGCODE_DEFAULT; | |
// Return the most fitting entity translation. | |
foreach ($candidates as $candidate) { | |
if ($entity->hasTranslation($candidate)) { | |
$translation = $entity->getTranslation($candidate); | |
break; | |
} | |
} | |
} | |
} | |
return $translation; | |
} | |
} |