Skip to content

Commit 3d42752

Browse files
authored
Merge pull request #17 from pfilipkowskilemon/dev-issue-9
Add support for localized field in object bricks, classification stores and fieldcollections
2 parents 9e635a7 + 2a534c3 commit 3d42752

3 files changed

Lines changed: 80 additions & 3 deletions

File tree

src/QuickTranslateBundle/Controller/ObjectController.php

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,39 @@ public function translateObjectAction(Request $request)
2929
$item = DataObject::getById($itemId);
3030

3131
foreach ($data as $key => $value) {
32-
$item->set($key, $value, $localizedField);
32+
if (str_contains($key, 'structuredData#')) {
33+
list($prefix, $fieldName, $index, $type, $strField) = explode('.', $key);
34+
35+
$structuredField = $item->get($fieldName);
36+
37+
if ($structuredField instanceof DataObject\Fieldcollection) {
38+
$structuredField->setObject($item);
39+
$structuredField->get($index)->set($strField, $value, $localizedField);
40+
}
41+
42+
if ($structuredField instanceof DataObject\Objectbrick) {
43+
$structuredField->setObject($item);
44+
$structuredField->get($type)->set($strField, $value, $localizedField);
45+
}
46+
47+
if (is_array($structuredField) && $type === 'undefined') {
48+
$blockItem = $structuredField[$index];
49+
$localizedFields = $blockItem['localizedfields']->getData();
50+
$localizedFields->setLocalizedValue($strField, $value, $localizedField);
51+
}
52+
53+
} elseif (str_contains($key, 'classificationStore#')) {
54+
list($prefix, $index, $fieldName, $strField) = explode('.', $key);
55+
56+
$structuredField = $item->get($fieldName);
57+
58+
if ($structuredField instanceof DataObject\Classificationstore) {
59+
$structuredField->setObject($item);
60+
$structuredField->setLocalizedKeyValue($index, $strField, $value, $localizedField);
61+
}
62+
} else {
63+
$item->set($key, $value, $localizedField);
64+
}
3365
}
3466

3567
$item->save();

src/QuickTranslateBundle/Resources/public/js/pimcore/startup.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,19 @@ pimcore.plugin.asiosoQuickTranslateBundle = Class.create(pimcore.plugin.admin, {
2727
if (type === "object") {
2828
if (object.data.data.hasOwnProperty("localizedfields")) {
2929
object.tabbar.add(new pimcore.element.quickTranslateObjectBtn(object, "object").getLayout());
30+
} else if (object.data.data) {
31+
let objectData = object.data.data;
32+
for (let item in objectData) {
33+
if (Array.isArray(objectData[item])) {
34+
objectData[item].forEach((element) => {
35+
if (objectData[item].length && element.data.localizedfields) {
36+
object.tabbar.add(new pimcore.element.quickTranslateObjectBtn(object, "object").getLayout());
37+
}
38+
})
39+
} else if (!Array.isArray(objectData[item]) && typeof objectData[item] === 'object' && objectData[item] !== null && objectData[item].hasOwnProperty('activeGroups')) {
40+
object.tabbar.add(new pimcore.element.quickTranslateObjectBtn(object, "object").getLayout());
41+
}
42+
}
3043
}
3144
}
3245
},

src/QuickTranslateBundle/Resources/public/js/quick-translate-btn/quickTranslateObjectBtn.js

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,40 @@ pimcore.element.quickTranslateObjectBtn = Class.create({
9999

100100
if (!langs.includes(null)) {
101101

102-
var data = this.element.data.data.localizedfields.data[langs[0]];
103-
var xmlStr = "";
102+
var data = {},
103+
xmlStr = "",
104+
elementData = this.element.data.data;
105+
if (elementData.hasOwnProperty('localizedfields')) {
106+
data = { ...data, ...elementData.localizedfields.data[langs[0]] }
107+
}
108+
for (let item in elementData) {
109+
if (Array.isArray(elementData[item])) {
110+
elementData[item].forEach((element, index) => {
111+
if(element !== null && element.data?.localizedfields !== undefined) {
112+
if (elementData[item].length && element.data.localizedfields.data[langs[0]]) {
113+
let localizedFields = element.data.localizedfields.data[langs[0]];
114+
for (let field in localizedFields) {
115+
localizedFields[`structuredData#.${item}.${index}.${element.type}.${field}`] = localizedFields[field];
116+
delete localizedFields[field];
117+
}
118+
data = {...data, ...localizedFields}
119+
}
120+
}
121+
})
122+
} else if (!Array.isArray(elementData[item]) && typeof elementData[item] === 'object' && elementData[item] !== null && elementData[item].hasOwnProperty('activeGroups')) {
123+
if (elementData[item].data[langs[0]]) {
124+
let localizedFields = elementData[item].data[langs[0]];
125+
for (let storeObject in localizedFields) {
126+
for (let field in localizedFields[storeObject]) {
127+
localizedFields[storeObject][`classificationStore#.${storeObject}.${item}.${field}`] = localizedFields[storeObject][field];
128+
delete localizedFields[storeObject][field];
129+
}
130+
data = { ...data, ...localizedFields[storeObject] }
131+
}
132+
}
133+
}
134+
}
135+
104136

105137
for (var field in data) {
106138

0 commit comments

Comments
 (0)