diff --git a/.craftplugin b/.craftplugin index 473632ca..6039246b 100644 --- a/.craftplugin +++ b/.craftplugin @@ -1,7 +1,7 @@ { "pluginName": "Translations for Craft", "pluginDescription": "Drive global growth with simplified translation workflows.", - "pluginVersion": "v4.0.2", + "pluginVersion": "v4.0.3", "pluginAuthorName": "Acclaro", "pluginVendorName": "Acclaro", "pluginAuthorUrl": "http://www.acclaro.com/", diff --git a/CHANGELOG.md b/CHANGELOG.md index a0ef1f4c..1ba43a3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## 4.0.3 - 2024-12-13 + +### Fixed +- Neo blocks overwriting content in other sites on draft creation. ([AcclaroInc#562](https://github.com/AcclaroInc/pm-craft-translations/issues/562)) + ## 4.0.2 - 2024-11-21 ### Fixed diff --git a/src/Translations.php b/src/Translations.php index 2a32fba8..9546f601 100644 --- a/src/Translations.php +++ b/src/Translations.php @@ -698,7 +698,7 @@ private function _onDeleteElement(Event $event) if ($currentFile) { $order = self::$plugin->orderRepository->getOrderById($currentFile->orderId); - $currentFile->status = Constants::FILE_STATUS_CANCELED; + $currentFile->status = Constants::FILE_STATUS_REVIEW_READY; self::$plugin->fileRepository->saveFile($currentFile); diff --git a/src/services/fieldtranslator/NeoFieldTranslator.php b/src/services/fieldtranslator/NeoFieldTranslator.php index de8df9be..94fe1e57 100644 --- a/src/services/fieldtranslator/NeoFieldTranslator.php +++ b/src/services/fieldtranslator/NeoFieldTranslator.php @@ -111,17 +111,24 @@ public function toPostArrayFromTranslationTarget(ElementTranslator $elementTrans foreach ($blocks as $i => $block) { $i = 'new' . ++$new; - $blockId = $field->getIsTranslatable($element) ? $i : $block->id; + $isTranslatable = $field->getIsTranslatable($element); + $blockId = $isTranslatable ? $i : $this->getBlockUid($block); $blockData = $allBlockData[$i] ?? array(); - $post[$fieldHandle][$blockId] = array( + $data = [ 'modified' => '1', 'type' => $block->getType()->handle, 'enabled' => $block->enabled, 'collapsed' => $block->collapsed, 'level' => $block->level, - 'fields' => $elementTranslator->toPostArrayFromTranslationTarget($block, $sourceLanguage, $targetLanguage, $blockData, true), - ); + 'fields' => $elementTranslator->toPostArrayFromTranslationTarget($block, $sourceLanguage, $targetLanguage, $blockData, true), + ]; + + if ($isTranslatable) { + $post[$fieldHandle][$blockId] = $data; + } else { + $post[$fieldHandle]['blocks'][$blockId] = $data; + } } return $post; @@ -147,6 +154,11 @@ public function getWordCount(ElementTranslator $elementTranslator, Element $elem return $wordCount; } + private function getBlockUid($block) + { + return sprintf('uid:%s', $block->getCanonicalUid()); + } + /** * {@inheritdoc} */ @@ -165,13 +177,23 @@ public function toPostArray(ElementTranslator $elementTranslator, Element $eleme ); foreach ($blocks as $i => $block) { + $isTranslatable = $field->getIsTranslatable($element); + $blockId = $isTranslatable ? $i : $this->getBlockUid($block); - $blockId = $block->id ?? sprintf('new%s', ++$i); - $post[$fieldHandle][$blockId] = array( + $data = [ + 'modified' => '1', 'type' => $block->getType()->handle, 'enabled' => $block->enabled, - 'fields' => $elementTranslator->toPostArray($block), - ); + 'collapsed' => $block->collapsed, + 'level' => $block->level, + 'fields' => $elementTranslator->toPostArray($block) + ]; + + if ($isTranslatable) { + $post[$fieldHandle][$blockId] = $data; + } else { + $post[$fieldHandle]['blocks'][$blockId] = $data; + } } return $post;