Skip to content

Commit 5036240

Browse files
committed
fix: revert to manual fallback chain including system default language
1 parent 05ce686 commit 5036240

1 file changed

Lines changed: 25 additions & 7 deletions

File tree

src/Grid/Util/Trait/LocalizedValueTrait.php

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
namespace Pimcore\Bundle\StudioBackendBundle\Grid\Util\Trait;
1515

1616
use Pimcore\Bundle\StudioBackendBundle\Grid\Schema\Column;
17-
use Pimcore\Model\DataObject\Localizedfield;
1817
use Pimcore\Model\Element\ElementInterface;
18+
use Pimcore\Tool;
1919

2020
/**
2121
* @internal
@@ -26,12 +26,25 @@ private function getLocalizedValue(Column $column, ElementInterface $element): m
2626
{
2727
$getter = $this->getGetter($column->getKey());
2828
if ($column->getLocale()) {
29-
if ($column->getApplyFallbackLanguages()) {
30-
Localizedfield::setGetFallbackValues(true);
31-
$value = $element->$getter($column->getLocale());
32-
Localizedfield::setGetFallbackValues(false);
33-
} else {
34-
$value = $element->$getter($column->getLocale());
29+
$value = $element->$getter($column->getLocale());
30+
31+
if ($column->getApplyFallbackLanguages() && $this->isEmptyValue($value)) {
32+
// Walk configured fallback languages, then the system default as last resort
33+
$fallbackLocales = Tool::getFallbackLanguagesFor($column->getLocale());
34+
$defaultLanguage = Tool::getDefaultLanguage();
35+
if ($defaultLanguage !== null
36+
&& $defaultLanguage !== $column->getLocale()
37+
&& !in_array($defaultLanguage, $fallbackLocales, true)
38+
) {
39+
$fallbackLocales[] = $defaultLanguage;
40+
}
41+
42+
foreach ($fallbackLocales as $fallbackLocale) {
43+
$value = $element->$getter($fallbackLocale);
44+
if (!$this->isEmptyValue($value)) {
45+
break;
46+
}
47+
}
3548
}
3649

3750
return $value;
@@ -54,4 +67,9 @@ private function getGetter(string $key): string
5467
{
5568
return 'get' . ucfirst($key);
5669
}
70+
71+
private function isEmptyValue(mixed $value): bool
72+
{
73+
return $value === null || $value === '' || $value === [];
74+
}
5775
}

0 commit comments

Comments
 (0)