Skip to content
Snippets Groups Projects

Issue #3421360: Fix deprecated dynamic property errors

3 files
+ 38
10
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -27,6 +27,13 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
*/
class ContentEntityFallback extends ContentEntity {
/**
* The fallback language chain for each language.
*
* @var array
*/
protected $fallbackChain = [];
/**
* Fallback controller.
*
@@ -34,6 +41,20 @@ class ContentEntityFallback extends ContentEntity {
*/
protected $fallbackController;
/**
* Languages.
*
* @var \Drupal\language\ConfigurableLanguageInterface[]
*/
protected $languages;
/**
* List of fallback language codes, keyed by item id.
*
* @var array
*/
protected $fallbackLanguageMap = [];
/**
* {@inheritdoc}
*/
@@ -81,7 +102,6 @@ class ContentEntityFallback extends ContentEntity {
}
if ($entities[$entity_id]->hasTranslation($langcode)) {
$items[$item_id] = $entities[$entity_id]->getTranslation($langcode)->getTypedData();
$items[$item_id]->language = $langcode;
}
else {
$source = $this->fallbackController->getTranslation($langcode, $entities[$entity_id]);
@@ -90,8 +110,7 @@ class ContentEntityFallback extends ContentEntity {
}
$translation = $entities[$entity_id]->addTranslation($langcode, $source->toArray());
$items[$item_id] = $translation->getTypedData();
$items[$item_id]->language = $langcode;
$items[$item_id]->fallbackLanguage = $source->language()->getId();
$this->fallbackLanguageMap[$item_id] = $source->language()->getId();
}
}
}
@@ -122,7 +141,7 @@ class ContentEntityFallback extends ContentEntity {
}
else {
$fallback_found = FALSE;
foreach ($this->fallback_chain[$langcode] as $candidate) {
foreach ($this->fallbackChain[$langcode] as $candidate) {
if ($entity->hasTranslation($candidate)) {
$fallback_found = TRUE;
break;
@@ -146,7 +165,7 @@ class ContentEntityFallback extends ContentEntity {
if (!isset($this->languages)) {
$this->languages = ConfigurableLanguage::loadMultiple(array_keys($parent_languages));
foreach ($this->languages as $langcode => $language) {
$this->fallback_chain[$langcode] = array_filter($language->getThirdPartySetting('entity_language_fallback', 'fallback_langcodes', []));
$this->fallbackChain[$langcode] = array_filter($language->getThirdPartySetting('entity_language_fallback', 'fallback_langcodes', []));
}
}
return $parent_languages;
@@ -227,14 +246,16 @@ class ContentEntityFallback extends ContentEntity {
* {@inheritdoc}
*/
public function getItemAccessResult(ComplexDataInterface $item, AccountInterface $account = NULL) {
if (!isset($item->fallbackLanguage)) {
$entity = $this->getEntity($item);
if (!$entity) {
return parent::getItemAccessResult($item, $account);
}
$entity = $this->getEntity($item);
if (!$entity || !$entity->hasTranslation($item->fallbackLanguage)) {
$item_id = $entity->id() . ':' . $entity->language()->getId();
$fallbackLanguage = $this->fallbackLanguageMap[$item_id] ?? NULL;
if (!$fallbackLanguage || !$entity->hasTranslation($fallbackLanguage)) {
return parent::getItemAccessResult($item, $account);
}
$entity = $entity->getTranslation($item->fallbackLanguage);
$entity = $entity->getTranslation($fallbackLanguage);
return $this->getEntityTypeManager()
->getAccessControlHandler($this->getEntityTypeId())
->access($entity, 'view', $account, TRUE);
Loading