Skip to content

Commit d8c2f85

Browse files
authored
IBX-6495: Fixed saving non-translatable fields in main language (#74)
* IBX-6495: Fixed saving non-translatable fields in main language * IBX-6495: Code cleanup * IBX-6495: CS
1 parent 9c4585b commit d8c2f85

2 files changed

Lines changed: 79 additions & 30 deletions

File tree

src/lib/Data/Mapper/ContentUpdateMapper.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,18 @@ public function mapToFormData(ValueObject $contentDraft, array $params = [])
3838
$data->initialLanguageCode = $languageCode;
3939

4040
$fields = $contentDraft->getFieldsByLanguage($languageCode);
41+
$mainLanguageCode = $contentDraft->getVersionInfo()->getContentInfo()->getMainLanguage()->getLanguageCode();
4142

4243
foreach ($params['contentType']->fieldDefinitions as $fieldDef) {
4344
$isNonTranslatable = $fieldDef->isTranslatable === false;
4445
$field = $fields[$fieldDef->identifier];
46+
$shouldUseCurrentFieldValue = $isNonTranslatable
47+
&& isset($mappedCurrentFields[$fieldDef->identifier])
48+
&& $mainLanguageCode !== $languageCode;
4549
$data->addFieldData(new FieldData([
4650
'fieldDefinition' => $fieldDef,
4751
'field' => $field,
48-
'value' => $isNonTranslatable && isset($mappedCurrentFields[$fieldDef->identifier])
52+
'value' => $shouldUseCurrentFieldValue
4953
? $mappedCurrentFields[$fieldDef->identifier]->value
5054
: $field->value,
5155
]));

tests/lib/Data/Mapper/ContentUpdateMapperTest.php

Lines changed: 74 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,58 @@ public function testMapToFormData(): void
3939
'value' => $expectedShortName = 'Nontranslateable short name',
4040
]),
4141
];
42-
$content = new Content([
42+
43+
$newName = 'GER name';
44+
$newShortName = '';
45+
$content = $this->getContent($newName, $newShortName, 'ger-DE');
46+
47+
$data = (new ContentUpdateMapper())->mapToFormData($content, [
48+
'languageCode' => 'ger-DE',
49+
'contentType' => $this->getContentType(),
50+
'currentFields' => $currentFields,
51+
]);
52+
53+
$fieldsData = $data->fieldsData;
54+
55+
self::assertSame($newName, $fieldsData['name']->value);
56+
self::assertSame($expectedShortName, $fieldsData['short_name']->value);
57+
}
58+
59+
public function testMapToFormDataWithTheSameLanguage(): void
60+
{
61+
$currentFields = [
62+
new APIField([
63+
'fieldDefIdentifier' => 'name',
64+
'fieldTypeIdentifier' => 'ezstring',
65+
'languageCode' => 'eng-GB',
66+
'value' => 'Name',
67+
]),
68+
new APIField([
69+
'fieldDefIdentifier' => 'short_name',
70+
'fieldTypeIdentifier' => 'ezstring',
71+
'languageCode' => 'eng-GB',
72+
'value' => 'Short name',
73+
]),
74+
];
75+
76+
$newName = 'New name';
77+
$newShortName = 'New short name';
78+
$content = $this->getContent($newName, $newShortName, 'eng-GB');
79+
80+
$data = (new ContentUpdateMapper())->mapToFormData($content, [
81+
'languageCode' => 'eng-GB',
82+
'contentType' => $this->getContentType(),
83+
'currentFields' => $currentFields,
84+
]);
85+
86+
$fieldsData = $data->fieldsData;
87+
88+
self::assertSame($newName, $fieldsData['name']->value);
89+
self::assertSame($newShortName, $fieldsData['short_name']->value);
90+
}
91+
92+
private function getContent(string $name, string $shortName, string $languageCode): Content {
93+
return new Content([
4394
'versionInfo' => new VersionInfo([
4495
'contentInfo' => new ContentInfo([
4596
'remoteId' => 'foo',
@@ -63,46 +114,40 @@ public function testMapToFormData(): void
63114
]),
64115
]),
65116
]),
66-
'contentType' => $contentType = new ContentType([
67-
'identifier' => 'folder',
68-
'fieldDefinitions' => new FieldDefinitionCollection([
69-
new FieldDefinition([
70-
'identifier' => 'name',
71-
'isTranslatable' => true,
72-
'defaultValue' => '',
73-
]),
74-
new FieldDefinition([
75-
'identifier' => 'short_name',
76-
'isTranslatable' => false,
77-
'defaultValue' => '',
78-
]),
79-
]),
80-
]),
117+
'contentType' => $this->getContentType(),
81118
'internalFields' => [
82119
new APIField([
83120
'fieldDefIdentifier' => 'name',
84121
'fieldTypeIdentifier' => 'ezstring',
85-
'languageCode' => 'ger-DE',
86-
'value' => $expectedName = 'GER name',
122+
'languageCode' => $languageCode,
123+
'value' => $name,
87124
]),
88125
new APIField([
89126
'fieldDefIdentifier' => 'short_name',
90127
'fieldTypeIdentifier' => 'ezstring',
91-
'languageCode' => 'ger-DE',
92-
'value' => '',
128+
'languageCode' => $languageCode,
129+
'value' => $shortName,
93130
]),
94131
],
95132
]);
133+
}
96134

97-
$data = (new ContentUpdateMapper())->mapToFormData($content, [
98-
'languageCode' => 'ger-DE',
99-
'contentType' => $contentType,
100-
'currentFields' => $currentFields,
135+
private function getContentType(): ContentType
136+
{
137+
return new ContentType([
138+
'identifier' => 'folder',
139+
'fieldDefinitions' => new FieldDefinitionCollection([
140+
new FieldDefinition([
141+
'identifier' => 'name',
142+
'isTranslatable' => true,
143+
'defaultValue' => '',
144+
]),
145+
new FieldDefinition([
146+
'identifier' => 'short_name',
147+
'isTranslatable' => false,
148+
'defaultValue' => '',
149+
]),
150+
]),
101151
]);
102-
103-
$fieldsData = $data->fieldsData;
104-
105-
self::assertSame($expectedName, $fieldsData['name']->value);
106-
self::assertSame($expectedShortName, $fieldsData['short_name']->value);
107152
}
108153
}

0 commit comments

Comments
 (0)