diff --git a/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php b/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php index f2f14815f1..2341bfda28 100644 --- a/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php +++ b/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php @@ -119,7 +119,7 @@ public function toFieldDefinition(StorageFieldDefinition $storageDef, FieldDefin } foreach ($storageDef->multilingualData as $languageCode => $mlData) { - $xml = simplexml_load_string($mlData->dataText); + $xml = $mlData->dataText ? simplexml_load_string($mlData->dataText) : false; if ($xml !== false) { foreach ($xml->options->option as $option) { $multiLingualOptions[$languageCode][(int)$option['id']] = (string)$option['name']; diff --git a/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php b/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php index 24aab067b1..9d4a41482b 100644 --- a/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php +++ b/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php @@ -11,6 +11,7 @@ use Ibexa\Contracts\Core\Persistence\Content\Type\FieldDefinition as PersistenceFieldDefinition; use Ibexa\Core\FieldType\FieldSettings; use Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\SelectionConverter; +use Ibexa\Core\Persistence\Legacy\Content\MultilingualStorageFieldDefinition; use Ibexa\Core\Persistence\Legacy\Content\StorageFieldDefinition; use Ibexa\Core\Persistence\Legacy\Content\StorageFieldValue; use PHPUnit\Framework\TestCase; @@ -325,6 +326,43 @@ public function testToFieldDefinitionSingleEmpty() $this->assertEquals($expectedFieldDefinition, $actualFieldDefinition); } + + public function testToFieldDefinitionWithMultilingualDataSkipsEmptyDataText(): void + { + $storageFieldDefinition = new StorageFieldDefinition(); + $storageFieldDefinition->dataInt1 = 1; + $storageFieldDefinition->dataText5 = << + +EOT; + + $mlDataEmpty = new MultilingualStorageFieldDefinition(); + $mlDataEmpty->dataText = ''; + + $mlDataValid = new MultilingualStorageFieldDefinition(); + $mlDataValid->dataText = << + +EOT; + + $storageFieldDefinition->multilingualData = [ + 'eng-GB' => $mlDataEmpty, + 'fre-FR' => $mlDataValid, + ]; + + $actualFieldDefinition = new PersistenceFieldDefinition( + [ + 'mainLanguageCode' => 'eng-GB', + ] + ); + + $this->converter->toFieldDefinition($storageFieldDefinition, $actualFieldDefinition); + + $fieldSettings = $actualFieldDefinition->fieldTypeConstraints->fieldSettings; + + self::assertSame([0 => 'First'], $fieldSettings['multilingualOptions']['eng-GB']); + self::assertSame([0 => 'Premier'], $fieldSettings['multilingualOptions']['fre-FR']); + } } class_alias(SelectionTest::class, 'eZ\Publish\Core\Persistence\Legacy\Tests\Content\FieldValue\Converter\SelectionTest');