Skip to content

Commit 6f39bc9

Browse files
committed
Merge branch '4.5' into main
2 parents 267c890 + 1c35ada commit 6f39bc9

File tree

2 files changed

+80
-30
lines changed

2 files changed

+80
-30
lines changed

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: 75 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,59 @@ 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+
{
94+
return new Content([
4395
'versionInfo' => new VersionInfo([
4496
'contentInfo' => new ContentInfo([
4597
'remoteId' => 'foo',
@@ -63,46 +115,40 @@ public function testMapToFormData(): void
63115
]),
64116
]),
65117
]),
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-
]),
118+
'contentType' => $this->getContentType(),
81119
'internalFields' => [
82120
new APIField([
83121
'fieldDefIdentifier' => 'name',
84122
'fieldTypeIdentifier' => 'ezstring',
85-
'languageCode' => 'ger-DE',
86-
'value' => $expectedName = 'GER name',
123+
'languageCode' => $languageCode,
124+
'value' => $name,
87125
]),
88126
new APIField([
89127
'fieldDefIdentifier' => 'short_name',
90128
'fieldTypeIdentifier' => 'ezstring',
91-
'languageCode' => 'ger-DE',
92-
'value' => '',
129+
'languageCode' => $languageCode,
130+
'value' => $shortName,
93131
]),
94132
],
95133
]);
134+
}
96135

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

0 commit comments

Comments
 (0)