From 45bfe1e2add478afab2870c041b95c5d9655ed28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Busso?= <90727999+agustinbusso@users.noreply.github.com> Date: Thu, 13 Jul 2023 16:13:29 -0300 Subject: [PATCH 1/3] Fix issue when importing and no translations --- ProcessMaker/ProcessTranslations/ProcessTranslation.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ProcessMaker/ProcessTranslations/ProcessTranslation.php b/ProcessMaker/ProcessTranslations/ProcessTranslation.php index beea03d1a4..4f614ab880 100644 --- a/ProcessMaker/ProcessTranslations/ProcessTranslation.php +++ b/ProcessMaker/ProcessTranslations/ProcessTranslation.php @@ -590,6 +590,10 @@ public function importTranslations($payload) foreach ($screenTranslations as $language => $translations) { if ($language === $languageCode) { $screenTranslations[$languageCode]['strings'] = $newTranslations; + if (!array_key_exists('created_at', $screenTranslations[$languageCode])) { + $screenTranslations[$languageCode]['created_at'] = Carbon::now(); + } + $screenTranslations[$languageCode]['updated_at'] = Carbon::now(); } } } From 49970f921b6d828b0a2275c85b212faba73f3b95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Busso?= <90727999+agustinbusso@users.noreply.github.com> Date: Thu, 13 Jul 2023 16:36:57 -0300 Subject: [PATCH 2/3] Code refactor --- .../ProcessTranslation.php | 113 +++++++----------- 1 file changed, 44 insertions(+), 69 deletions(-) diff --git a/ProcessMaker/ProcessTranslations/ProcessTranslation.php b/ProcessMaker/ProcessTranslations/ProcessTranslation.php index 4f614ab880..ed8f74a809 100644 --- a/ProcessMaker/ProcessTranslations/ProcessTranslation.php +++ b/ProcessMaker/ProcessTranslations/ProcessTranslation.php @@ -522,84 +522,59 @@ public function getImportData($payload) public function importTranslations($payload) { - $screens = []; foreach ($payload as $screenUuid => $value) { $screen = Screen::where('uuid', $screenUuid)->first(); - $newScreenTranslations = []; if ($screen) { - $screenTranslations = $screen->translations; - $availableStrings = $this->getStringsInScreen($screen); - - foreach ($value as $languageCode => $translations) { - if (!array_key_exists($languageCode, $screenTranslations)) { - $screenTranslations[$languageCode]['strings'] = []; - } - - $newTranslations = []; - // For each of the available elements in the screens - foreach ($availableStrings as $availableString) { - // We need to check if there are current translations in the translation - // column (old translations) for that available string - $foundOld = false; - foreach ($screenTranslations[$languageCode]['strings'] as $inDbTranslation) { - if ($availableString === $inDbTranslation['key']) { - $foundOld = true; - $oldTranslation = [ - 'key' => $inDbTranslation['key'], - 'string' => $inDbTranslation['string'], - ]; - } - } - - // We need to check if there are some translation in the translation file - // for that available string - $foundInFile = false; - foreach ($translations as $importedTranslation) { - if ($availableString === $importedTranslation['key']) { - $foundInFile = true; - $inFileTranslation = [ - 'key' => $importedTranslation['key'], - 'string' => $importedTranslation['string'], - ]; - } - } - - if ($foundOld && !$foundInFile) { - $newTranslations[] = $oldTranslation; - } + $screen->translations = $this->generateNewTranslations($value, $screen); + $screen->save(); + } + } + } - if (!$foundOld && $foundInFile) { - $newTranslations[] = $inFileTranslation; - } + protected function generateNewTranslations($value, $screen) + { + $newScreenTranslations = $screen->translations; + $availableStrings = $this->getStringsInScreen($screen); + foreach ($value as $languageCode => $translations) { + $newScreenTranslations[$languageCode]['strings'] = $this->generateNewLanguageTranslations( + $translations, + $availableStrings, + $newScreenTranslations[$languageCode]['strings'] ?? [] + ); + $newScreenTranslations[$languageCode]['updated_at'] = Carbon::now(); + $newScreenTranslations[$languageCode]['created_at'] = $newScreenTranslations[$languageCode]['created_at'] ?? Carbon::now(); + } - if ($foundOld && $foundInFile && $inFileTranslation['string'] === '') { - $newTranslations[] = $inFileTranslation; - } + return $newScreenTranslations; + } - if ($foundOld && $foundInFile && $inFileTranslation['string'] === null) { - $newTranslations[] = $oldTranslation; - } + protected function generateNewLanguageTranslations($translations, $availableStrings, $existingTranslations) + { + $newTranslations = []; + foreach ($availableStrings as $availableString) { + $oldTranslation = $this->getTranslation($availableString, $existingTranslations); + $inFileTranslation = $this->getTranslation($availableString, $translations); + if (($oldTranslation !== null && $inFileTranslation === null) + || ($oldTranslation !== null && $inFileTranslation !== null && $inFileTranslation['string'] === null)) { + $newTranslations[] = $oldTranslation; + } + if ($inFileTranslation !== null + && ($oldTranslation === null || $oldTranslation !== null && $inFileTranslation !== null)) { + $newTranslations[] = $inFileTranslation; + } + } - if ($foundOld && $foundInFile && $inFileTranslation['string'] && $inFileTranslation['string'] !== '') { - $newTranslations[] = $inFileTranslation; - } - } + return $newTranslations; + } - // Assign new translations to language in screen - // $newScreenTranslations[$languageCode]['strings'] = $newTranslations; - foreach ($screenTranslations as $language => $translations) { - if ($language === $languageCode) { - $screenTranslations[$languageCode]['strings'] = $newTranslations; - if (!array_key_exists('created_at', $screenTranslations[$languageCode])) { - $screenTranslations[$languageCode]['created_at'] = Carbon::now(); - } - $screenTranslations[$languageCode]['updated_at'] = Carbon::now(); - } - } - } - $screen->translations = $screenTranslations; - $screen->save(); + protected function getTranslation($key, $translationArray) + { + foreach ($translationArray as $translation) { + if ($key === $translation['key']) { + return $translation; } } + + return null; } } From 865bfcbd2878d068b3291c2058027b1299fa9e7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Busso?= <90727999+agustinbusso@users.noreply.github.com> Date: Thu, 13 Jul 2023 16:39:57 -0300 Subject: [PATCH 3/3] Fix length --- ProcessMaker/ProcessTranslations/ProcessTranslation.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ProcessMaker/ProcessTranslations/ProcessTranslation.php b/ProcessMaker/ProcessTranslations/ProcessTranslation.php index ed8f74a809..b753fd8858 100644 --- a/ProcessMaker/ProcessTranslations/ProcessTranslation.php +++ b/ProcessMaker/ProcessTranslations/ProcessTranslation.php @@ -541,8 +541,9 @@ protected function generateNewTranslations($value, $screen) $availableStrings, $newScreenTranslations[$languageCode]['strings'] ?? [] ); + $createdAt = $newScreenTranslations[$languageCode]['created_at'] ?? Carbon::now(); $newScreenTranslations[$languageCode]['updated_at'] = Carbon::now(); - $newScreenTranslations[$languageCode]['created_at'] = $newScreenTranslations[$languageCode]['created_at'] ?? Carbon::now(); + $newScreenTranslations[$languageCode]['created_at'] = $createdAt; } return $newScreenTranslations;