@ -8,6 +8,7 @@ use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
use Drupal\Core\File\FileUrlGeneratorInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\file\FileInterface;
use Drupal\link\LinkItemInterface;
use Drupal\media\MediaInterface;
@ -32,12 +33,20 @@ class UrlExtractor {
*/
protected $fileUrlGenerator;
/**
* The language manager.
*
* @var \Drupal\Core\Language\LanguageManagerInterface
*/
protected $languageManager;
/**
* Constructs a UrlExtractor object.
*/
public function __construct(EntityTypeManagerInterface $entity_type_manager, FileUrlGeneratorInterface $file_url_generator) {
public function __construct(EntityTypeManagerInterface $entity_type_manager, FileUrlGeneratorInterface $file_url_generator, LanguageManagerInterface $languageManager ) {
$this->entityTypeManager = $entity_type_manager;
$this->fileUrlGenerator = $file_url_generator;
$this->languageManager = $languageManager;
}
/**
@ -72,15 +81,10 @@ class UrlExtractor {
elseif ($input instanceof EntityReferenceItem) {
$entity = $input->entity;
}
// Get the current Language Code.
$languageManager = \Drupal::languageManager();
$currentLanguage = $languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT);
$languageCode = $currentLanguage->getId();
// Drupal does not clean up references to deleted entities. So that the
// entity property might be empty while the field item might not.
// @see https://www.drupal.org/project/drupal/issues/2723323
$langcode = $this->languageManager->getCurrentLanguage()->getId();
return $entity instanceof ContentEntityInterface ?
$this->getUrlFromEntity($entity->hasTranslation($langcode) ? $entity->getTranslation($langcode) : $entity , $relative) : NULL;
}