From 5de7fea79af7e0724e0d266e2b62b426d884562b Mon Sep 17 00:00:00 2001 From: Alexander Ebert Date: Tue, 29 Jul 2014 13:21:41 +0200 Subject: [PATCH] Fix for packages possibly overwriting language items owned by a different package --- .../lib/data/language/LanguageEditor.class.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/wcfsetup/install/files/lib/data/language/LanguageEditor.class.php b/wcfsetup/install/files/lib/data/language/LanguageEditor.class.php index 817525a382..476e2d7ffd 100644 --- a/wcfsetup/install/files/lib/data/language/LanguageEditor.class.php +++ b/wcfsetup/install/files/lib/data/language/LanguageEditor.class.php @@ -234,10 +234,20 @@ class LanguageEditor extends DatabaseObjectEditor implements IEditableCachedObje VALUES ".substr(str_repeat('(?, ?, ?, ?'. ($packageID ? ', ?' : '') .'), ', $repeat), 0, -2); if ($updateExistingItems) { - $sql .= " ON DUPLICATE KEY - UPDATE languageUseCustomValue = IF(languageItemValue = VALUES(languageItemValue), languageUseCustomValue, 0), - languageItemValue = IF(languageItemOriginIsSystem = 0, languageItemValue, VALUES(languageItemValue)), - languageCategoryID = VALUES(languageCategoryID)"; + if ($packageID) { + // do not update anything if language item is owned by a different package + $sql .= " ON DUPLICATE KEY + UPDATE languageUseCustomValue = IF(packageID = ".$packageID.", IF(languageItemValue = VALUES(languageItemValue), languageUseCustomValue, 0), languageUseCustomValue), + languageItemValue = IF(packageID = ".$packageID.", IF(languageItemOriginIsSystem = 0, languageItemValue, VALUES(languageItemValue)), languageItemValue), + languageCategoryID = IF(packageID = ".$packageID.", VALUES(languageCategoryID), languageCategoryID)"; + } + else { + // skip package id check during WCFSetup + $sql .= " ON DUPLICATE KEY + UPDATE languageUseCustomValue = IF(languageItemValue = VALUES(languageItemValue), languageUseCustomValue, 0), + languageItemValue = IF(languageItemOriginIsSystem = 0, languageItemValue, VALUES(languageItemValue)), + languageCategoryID = VALUES(languageCategoryID)"; + } } $statement = WCF::getDB()->prepareStatement($sql); -- 2.20.1