From 4679f8c48278088aba09755c616391d2d03bc297 Mon Sep 17 00:00:00 2001 From: Dominik Shaim Ulrich Date: Thu, 8 Aug 2024 18:24:26 +0200 Subject: [PATCH 01/47] Update Customer.php --- classes/Customer.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/classes/Customer.php b/classes/Customer.php index 20310b8a6d978..63b5c348ed91d 100644 --- a/classes/Customer.php +++ b/classes/Customer.php @@ -1220,11 +1220,14 @@ public function transformToCustomer($idLang, $password = null) /* * If this is an anonymous conversion and we want the customer to set his own password, * we set a random one for now. - * TODO - This should be revised in the future because 16 chars can be outside of bounds of - * isAcceptablePasswordLength. It should not be checked. */ if (empty($password)) { - $password = Tools::passwdGen(16, 'RANDOM'); + $pass_length = 16; + $max_pass_length = (int)Configuration::get('PS_SECURITY_PASSWORD_POLICY_MAXIMUM_LENGTH'); + if ($max_pass_length > 0 && $default_pass_length > $max_pass_length) { + $pass_length = $max_pass_length; + } + $password = Tools::passwdGen($pass_length, 'RANDOM'); } if (!Validate::isAcceptablePasswordLength($password) || !Validate::isAcceptablePasswordScore($password)) { From 5fd30277fae87c7ebd2362dc9931cec3f9d04b8b Mon Sep 17 00:00:00 2001 From: Dominik Shaim Ulrich Date: Thu, 8 Aug 2024 18:29:39 +0200 Subject: [PATCH 02/47] Update Customer.php --- classes/Customer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Customer.php b/classes/Customer.php index 63b5c348ed91d..1322b08dcb559 100644 --- a/classes/Customer.php +++ b/classes/Customer.php @@ -1224,7 +1224,7 @@ public function transformToCustomer($idLang, $password = null) if (empty($password)) { $pass_length = 16; $max_pass_length = (int)Configuration::get('PS_SECURITY_PASSWORD_POLICY_MAXIMUM_LENGTH'); - if ($max_pass_length > 0 && $default_pass_length > $max_pass_length) { + if ($max_pass_length > 0 && $pass_length > $max_pass_length) { $pass_length = $max_pass_length; } $password = Tools::passwdGen($pass_length, 'RANDOM'); From c1fca91294482e71bc985ac367697209e89669ba Mon Sep 17 00:00:00 2001 From: Dominik Shaim Ulrich Date: Thu, 8 Aug 2024 18:55:09 +0200 Subject: [PATCH 03/47] Update Customer.php --- classes/Customer.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/classes/Customer.php b/classes/Customer.php index 1322b08dcb559..f297ae1d1ad49 100644 --- a/classes/Customer.php +++ b/classes/Customer.php @@ -1223,6 +1223,11 @@ public function transformToCustomer($idLang, $password = null) */ if (empty($password)) { $pass_length = 16; + $min_pass_length = (int)Configuration::get('PS_SECURITY_PASSWORD_POLICY_MINIMUM_LENGTH'); + if ($min_pass_length > 0 && $pass_length < $min_pass_length) { + $pass_length = $min_pass_length; + } + $max_pass_length = (int)Configuration::get('PS_SECURITY_PASSWORD_POLICY_MAXIMUM_LENGTH'); if ($max_pass_length > 0 && $pass_length > $max_pass_length) { $pass_length = $max_pass_length; From 73a17d2f23c0faf7c10b98b6ef038c003853344a Mon Sep 17 00:00:00 2001 From: Dominik Shaim Ulrich Date: Thu, 8 Aug 2024 19:14:57 +0200 Subject: [PATCH 04/47] PHPCSFixer to be happy --- classes/Customer.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/Customer.php b/classes/Customer.php index f297ae1d1ad49..eb02282d1cb66 100644 --- a/classes/Customer.php +++ b/classes/Customer.php @@ -1223,12 +1223,12 @@ public function transformToCustomer($idLang, $password = null) */ if (empty($password)) { $pass_length = 16; - $min_pass_length = (int)Configuration::get('PS_SECURITY_PASSWORD_POLICY_MINIMUM_LENGTH'); + $min_pass_length = (int) Configuration::get('PS_SECURITY_PASSWORD_POLICY_MINIMUM_LENGTH'); if ($min_pass_length > 0 && $pass_length < $min_pass_length) { $pass_length = $min_pass_length; } - $max_pass_length = (int)Configuration::get('PS_SECURITY_PASSWORD_POLICY_MAXIMUM_LENGTH'); + $max_pass_length = (int) Configuration::get('PS_SECURITY_PASSWORD_POLICY_MAXIMUM_LENGTH'); if ($max_pass_length > 0 && $pass_length > $max_pass_length) { $pass_length = $max_pass_length; } From fcaa8e32a66db4537d4102bfbcfd3f27c8aa82e6 Mon Sep 17 00:00:00 2001 From: Hlavtox Date: Fri, 16 Aug 2024 13:54:13 +0200 Subject: [PATCH 05/47] Fix unreliable translation export --- .../Export/TranslationCatalogueExporter.php | 68 +++++++++---------- 1 file changed, 32 insertions(+), 36 deletions(-) diff --git a/src/Core/Translation/Export/TranslationCatalogueExporter.php b/src/Core/Translation/Export/TranslationCatalogueExporter.php index b2bbc90b2245f..3a7c262e89af9 100644 --- a/src/Core/Translation/Export/TranslationCatalogueExporter.php +++ b/src/Core/Translation/Export/TranslationCatalogueExporter.php @@ -47,8 +47,6 @@ */ class TranslationCatalogueExporter { - private const EXPORT_ZIP_FILENAME = '%s/translations_export_%s.zip'; - /** * @var TranslationCatalogueBuilder */ @@ -117,22 +115,25 @@ public function export(array $selections, string $locale): string { $this->validateParameters($selections); + // Create directory, where we will do our exports, if it doesn't exist + // This is var/cache//export if (!$this->filesystem->exists($this->exportDir)) { $this->filesystem->mkdir($this->exportDir); } - $zipFilename = sprintf(self::EXPORT_ZIP_FILENAME, $this->exportDir, $locale); - $path = dirname($zipFilename); + // Prepare unique export identifier so we don't interfere with other exports + $exportIdentifier = uniqid(); + + // Create our working folder, this is a temporary folder inside var/cache//export + $workingFolder = $this->exportDir . '/' . $exportIdentifier; + if (!$this->filesystem->exists($workingFolder)) { + $this->filesystem->mkdir($workingFolder); + } - // Clean export folder - $this->filesystem->remove($path); - $this->filesystem->mkdir($path); - $dumpOptions = [ - 'path' => $path, - 'default_locale' => $locale, - 'root_dir' => _PS_ROOT_DIR_ . DIRECTORY_SEPARATOR, - ]; + // Prepare the name of the final zip file we will return + $zipFilename = sprintf('%s/translations_export_%s.zip', $this->exportDir, $locale); + // Dump all XLF files into var/cache//export// foreach ($selections as $selection) { $providerDefinition = $this->providerDefinitionFactory->build($selection['type'], $selection['selected']); @@ -142,14 +143,25 @@ public function export(array $selections, string $locale): string // Transform into messageCatalogue object $messageCatalogue = $this->transformCatalogueMapToMessageCatalogue($catalogue, $locale); - // Dump catalogue into XLF files - $this->dumper->dump($messageCatalogue, $dumpOptions); + // Dump catalogue into XLF files into our temporary folder + $this->dumper->dump( + $messageCatalogue, + [ + 'path' => $workingFolder, + 'default_locale' => $locale, + 'root_dir' => _PS_ROOT_DIR_ . DIRECTORY_SEPARATOR, + ] + ); } - // Rename files to add locale in it - $this->renameCatalogues($locale, $path); + // Now, we append the locale to the names of the catalogues + $this->renameCatalogues($locale, $workingFolder); - $this->zipManager->createArchive($zipFilename, $path); + // Zip them + $this->zipManager->createArchive($zipFilename, $workingFolder); + + // And clean after ourselves + $this->filesystem->remove($workingFolder); return $zipFilename; } @@ -194,26 +206,10 @@ private function transformCatalogueMapToMessageCatalogue(Catalogue $catalogue, s protected function renameCatalogues(string $locale, string $path): void { $finder = Finder::create(); - foreach ($finder->in($path . DIRECTORY_SEPARATOR . $locale)->files() as $file) { - $filenameParts = explode('.', $file->getFilename()); - unset($filenameParts[count($filenameParts) - 1]); // Remove the extension - /* - * The destination file name will have the format - * DIRECTORY/ab-AB/FullDomainName.ab-AB.xlf - */ - $destinationFilename = sprintf( - '%s' . DIRECTORY_SEPARATOR . '%s' . DIRECTORY_SEPARATOR . '%s.%s.%s', - $path, - $locale, - implode('.', $filenameParts), - $locale, - $file->getExtension() - ); - if ($this->filesystem->exists($destinationFilename)) { - $this->filesystem->remove($destinationFilename); - } - $this->filesystem->rename($file->getPathname(), $destinationFilename); + $currentName = $file->getPathname(); + $newName = rtrim($currentName, '.xlf') . '.' . $locale . '.xlf'; + $this->filesystem->rename($currentName, $newName); } } } From e6ee827288c2ed66b95d95a44613281a7b335e44 Mon Sep 17 00:00:00 2001 From: Dominik Shaim Ulrich Date: Wed, 21 Aug 2024 00:19:28 +0200 Subject: [PATCH 06/47] Update Customer.php --- classes/Customer.php | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/classes/Customer.php b/classes/Customer.php index eb02282d1cb66..e8e36791b3a7e 100644 --- a/classes/Customer.php +++ b/classes/Customer.php @@ -1222,21 +1222,12 @@ public function transformToCustomer($idLang, $password = null) * we set a random one for now. */ if (empty($password)) { - $pass_length = 16; - $min_pass_length = (int) Configuration::get('PS_SECURITY_PASSWORD_POLICY_MINIMUM_LENGTH'); - if ($min_pass_length > 0 && $pass_length < $min_pass_length) { - $pass_length = $min_pass_length; - } - - $max_pass_length = (int) Configuration::get('PS_SECURITY_PASSWORD_POLICY_MAXIMUM_LENGTH'); - if ($max_pass_length > 0 && $pass_length > $max_pass_length) { - $pass_length = $max_pass_length; + $this->passwd = $crypto->hash(Tools::passwdGen(16, 'RANDOM')); + } else { + if (!Validate::isAcceptablePasswordLength($password) || !Validate::isAcceptablePasswordScore($password)) { + return false; } - $password = Tools::passwdGen($pass_length, 'RANDOM'); - } - - if (!Validate::isAcceptablePasswordLength($password) || !Validate::isAcceptablePasswordScore($password)) { - return false; + $this->passwd = $crypto->hash($password); } /** @var \PrestaShop\PrestaShop\Core\Crypto\Hashing $crypto */ From fca35336adf89a8121609e577b15a135a4d14040 Mon Sep 17 00:00:00 2001 From: Dominik Shaim Ulrich Date: Mon, 2 Sep 2024 17:42:45 +0200 Subject: [PATCH 07/47] Update Customer.php --- classes/Customer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Customer.php b/classes/Customer.php index e8e36791b3a7e..91d180d8a1956 100644 --- a/classes/Customer.php +++ b/classes/Customer.php @@ -1222,7 +1222,7 @@ public function transformToCustomer($idLang, $password = null) * we set a random one for now. */ if (empty($password)) { - $this->passwd = $crypto->hash(Tools::passwdGen(16, 'RANDOM')); + $this->passwd = Tools::passwdGen(16, 'RANDOM'); } else { if (!Validate::isAcceptablePasswordLength($password) || !Validate::isAcceptablePasswordScore($password)) { return false; From cacaba5af87acbeaa13f38a26eda6a445f51cedb Mon Sep 17 00:00:00 2001 From: Dominik Shaim Ulrich Date: Mon, 2 Sep 2024 17:44:56 +0200 Subject: [PATCH 08/47] Update Customer.php --- classes/Customer.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/classes/Customer.php b/classes/Customer.php index 91d180d8a1956..a1407497755e4 100644 --- a/classes/Customer.php +++ b/classes/Customer.php @@ -1222,12 +1222,11 @@ public function transformToCustomer($idLang, $password = null) * we set a random one for now. */ if (empty($password)) { - $this->passwd = Tools::passwdGen(16, 'RANDOM'); + $password = Tools::passwdGen(16, 'RANDOM'); } else { if (!Validate::isAcceptablePasswordLength($password) || !Validate::isAcceptablePasswordScore($password)) { return false; } - $this->passwd = $crypto->hash($password); } /** @var \PrestaShop\PrestaShop\Core\Crypto\Hashing $crypto */ From 556336eb6db80d00e3d6e48839f28e99f9206adf Mon Sep 17 00:00:00 2001 From: matks Date: Tue, 3 Sep 2024 18:32:50 +0200 Subject: [PATCH 09/47] Move the array_unshift in Product::setWsPositionInCategory() to avoid Trying to access array offset on value of type null --- classes/Product.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/classes/Product.php b/classes/Product.php index 61981bac5e26e..f129c816cf3d7 100644 --- a/classes/Product.php +++ b/classes/Product.php @@ -7267,11 +7267,12 @@ public function setWsPositionInCategory($position) return false; } - // result is indexed by recordset order and not position. positions start at index 1 so we need an empty element - array_unshift($result, null); + // result is indexed by recordset order and not position. foreach ($result as &$value) { $value = $value['id_product']; } + // positions start at index 1 so we need an empty element + array_unshift($result, null); $current_position = $this->getWsPositionInCategory(); From 329ac4f65b529808506ea0fa41e7a297ce8a7ff2 Mon Sep 17 00:00:00 2001 From: ludovic cardinale Date: Tue, 30 Jul 2024 15:22:03 +0200 Subject: [PATCH 10/47] Check overrides --- classes/module/Module.php | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/classes/module/Module.php b/classes/module/Module.php index f9a7dc7ad6756..6824068b5ff5e 100755 --- a/classes/module/Module.php +++ b/classes/module/Module.php @@ -411,6 +411,11 @@ public function install() return false; } + // Check for override conflicts + if (!$this->checkOverrideConflicts()) { + return false; + } + if (!$this->installControllers()) { $this->_errors[] = Context::getContext()->getTranslator()->trans('Could not install module controllers.', [], 'Admin.Modules.Notification'); $this->uninstallOverrides(); @@ -472,6 +477,60 @@ public function install() return true; } + protected function checkOverrideConflicts(): bool + { + if (!is_dir($this->getLocalPath() . 'override')) { + return true; + } + + foreach (Tools::scandir($this->getLocalPath() . 'override', 'php', '', true) as $file) { + $module_override_path = $this->getLocalPath() . 'override/' . $file; + $prestashop_override_path = _PS_ROOT_DIR_ . '/override/' . $file; + + if (file_exists($prestashop_override_path)) { + if (!$this->compareOverrideFiles($module_override_path, $prestashop_override_path)) { + $this->_errors[] = Context::getContext()->getTranslator()->trans( + 'The override file %1$s conflicts with an existing override in %2$s.', + [$module_override_path, $prestashop_override_path], + 'Admin.Modules.Notification' + ); + + return false; + } + } + } + + return true; + } + + private function compareOverrideFiles(string $module_override_path, string $prestashop_override_path): bool + { + $module_methods = $this->getClassMethodsFromContent(file_get_contents($module_override_path)); + $prestashop_methods = $this->getClassMethodsFromContent(file_get_contents($prestashop_override_path)); + + foreach ($module_methods as $method) { + if (in_array($method, $prestashop_methods)) { + return false; + } + } + + return true; + } + + private function getClassMethodsFromContent(string $content): array + { + $methods = []; + $tokens = token_get_all($content); + $count = count($tokens); + for ($i = 2; $i < $count; ++$i) { + if ($tokens[$i - 2][0] == T_FUNCTION && $tokens[$i - 1][0] == T_WHITESPACE && $tokens[$i][0] == T_STRING) { + $methods[] = $tokens[$i][1]; + } + } + + return $methods; + } + /** * Important: Do not type this method for compatibility reason. * If your module aims to be compatible for older PHP versions, it will From e9b4d79283acb9c208705b5214ac41c94bc2bd03 Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Fri, 6 Sep 2024 12:52:48 +0200 Subject: [PATCH 11/47] refacto conflict verification + integration tests --- .php-cs-fixer.dist.php | 1 + classes/module/Module.php | 63 ++------- src/Adapter/Tools.php | 5 + src/Core/Module/ModuleOverrideVerifier.php | 129 ++++++++++++++++++ .../Resources/config/services/core/module.yml | 4 + .../Addon/Module/ModuleManagerBuilderTest.php | 39 ++++++ .../testbasicconflict/config.xml | 12 ++ .../modules_tests/testbasicconflict/logo.gif | Bin 0 -> 198 bytes .../override/classes/Cart.php | 48 +++++++ .../testbasicconflict/testbasicconflict.php | 43 ++++++ .../testtrickyconflict/config.xml | 12 ++ .../modules_tests/testtrickyconflict/logo.gif | Bin 0 -> 198 bytes .../override/classes/Cart.php | 48 +++++++ .../testtrickyconflict/testtrickyconflict.php | 43 ++++++ 14 files changed, 392 insertions(+), 55 deletions(-) create mode 100644 src/Core/Module/ModuleOverrideVerifier.php create mode 100644 tests/Resources/modules_tests/testbasicconflict/config.xml create mode 100644 tests/Resources/modules_tests/testbasicconflict/logo.gif create mode 100644 tests/Resources/modules_tests/testbasicconflict/override/classes/Cart.php create mode 100644 tests/Resources/modules_tests/testbasicconflict/testbasicconflict.php create mode 100644 tests/Resources/modules_tests/testtrickyconflict/config.xml create mode 100644 tests/Resources/modules_tests/testtrickyconflict/logo.gif create mode 100644 tests/Resources/modules_tests/testtrickyconflict/override/classes/Cart.php create mode 100644 tests/Resources/modules_tests/testtrickyconflict/testtrickyconflict.php diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 4f6c2eba312d7..ac4fb26e283cb 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -11,6 +11,7 @@ ])->notPath([ 'Unit/Resources/config/params.php', 'Unit/Resources/config/params_modified.php', + __DIR__.'/tests/Resources/modules_tests', ]); return (new PhpCsFixer\Config()) diff --git a/classes/module/Module.php b/classes/module/Module.php index 6824068b5ff5e..1134c7a6dc9e6 100755 --- a/classes/module/Module.php +++ b/classes/module/Module.php @@ -33,6 +33,7 @@ use PrestaShop\PrestaShop\Core\Exception\ContainerNotFoundException; use PrestaShop\PrestaShop\Core\Foundation\Filesystem\FileSystem; use PrestaShop\PrestaShop\Core\Module\Legacy\ModuleInterface; +use PrestaShop\PrestaShop\Core\Module\ModuleOverrideVerifier; use PrestaShop\PrestaShop\Core\Module\WidgetInterface; use PrestaShop\TranslationToolsBundle\Translation\Helper\DomainHelper; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -412,7 +413,13 @@ public function install() } // Check for override conflicts - if (!$this->checkOverrideConflicts()) { + $moduleOverrideVerifier = $this->get(ModuleOverrideVerifier::class); + if (!$moduleOverrideVerifier) { + $moduleOverrideVerifier = new ModuleOverrideVerifier($this->getTranslator()); + } + if ($moduleOverrideVerifier->hasOverrideConflict($this->getLocalPath() . 'override')) { + $this->_errors = array_merge($moduleOverrideVerifier->getErrors(), $this->_errors); + return false; } @@ -477,60 +484,6 @@ public function install() return true; } - protected function checkOverrideConflicts(): bool - { - if (!is_dir($this->getLocalPath() . 'override')) { - return true; - } - - foreach (Tools::scandir($this->getLocalPath() . 'override', 'php', '', true) as $file) { - $module_override_path = $this->getLocalPath() . 'override/' . $file; - $prestashop_override_path = _PS_ROOT_DIR_ . '/override/' . $file; - - if (file_exists($prestashop_override_path)) { - if (!$this->compareOverrideFiles($module_override_path, $prestashop_override_path)) { - $this->_errors[] = Context::getContext()->getTranslator()->trans( - 'The override file %1$s conflicts with an existing override in %2$s.', - [$module_override_path, $prestashop_override_path], - 'Admin.Modules.Notification' - ); - - return false; - } - } - } - - return true; - } - - private function compareOverrideFiles(string $module_override_path, string $prestashop_override_path): bool - { - $module_methods = $this->getClassMethodsFromContent(file_get_contents($module_override_path)); - $prestashop_methods = $this->getClassMethodsFromContent(file_get_contents($prestashop_override_path)); - - foreach ($module_methods as $method) { - if (in_array($method, $prestashop_methods)) { - return false; - } - } - - return true; - } - - private function getClassMethodsFromContent(string $content): array - { - $methods = []; - $tokens = token_get_all($content); - $count = count($tokens); - for ($i = 2; $i < $count; ++$i) { - if ($tokens[$i - 2][0] == T_FUNCTION && $tokens[$i - 1][0] == T_WHITESPACE && $tokens[$i][0] == T_STRING) { - $methods[] = $tokens[$i][1]; - } - } - - return $methods; - } - /** * Important: Do not type this method for compatibility reason. * If your module aims to be compatible for older PHP versions, it will diff --git a/src/Adapter/Tools.php b/src/Adapter/Tools.php index 29d6f1487d5bf..bf8fa2326fab2 100644 --- a/src/Adapter/Tools.php +++ b/src/Adapter/Tools.php @@ -224,4 +224,9 @@ public function truncateString($text, $length = 120, $options = []) { return LegacyTools::truncateString($text, $length, $options); } + + public function scanDir($path, $ext = 'php', $dir = '', $recursive = false) + { + return LegacyTools::scanDir($path, $ext, $dir, $recursive); + } } diff --git a/src/Core/Module/ModuleOverrideVerifier.php b/src/Core/Module/ModuleOverrideVerifier.php new file mode 100644 index 0000000000000..c529d69744ae9 --- /dev/null +++ b/src/Core/Module/ModuleOverrideVerifier.php @@ -0,0 +1,129 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ + +declare(strict_types=1); + +namespace PrestaShop\PrestaShop\Core\Module; + +use PrestaShop\PrestaShop\Adapter\Tools; +use Symfony\Contracts\Translation\TranslatorInterface; + +class ModuleOverrideVerifier +{ + /** + * @var TranslatorInterface + */ + private $translator; + + /** + * @var array + */ + private $errors = []; + + public function __construct(TranslatorInterface $translator) + { + $this->translator = $translator; + } + + public function hasOverrideConflict(string $moduleOverridePath): bool + { + // if module doesn't have an override folder, there is no conflict + if (!is_dir($moduleOverridePath)) { + return false; + } + + $tools = new Tools(); + // module has overrides, let's check override files one by one + foreach ($tools->scandir($moduleOverridePath, 'php', '', true) as $file) { + $moduleOverrideFile = $moduleOverridePath . DIRECTORY_SEPARATOR . $file; + $existingOverrideFile = _PS_OVERRIDE_DIR_ . $file; + + if (file_exists($existingOverrideFile)) { + if ($this->hasConflictingMethod($moduleOverrideFile, $existingOverrideFile)) { + $this->errors[] = $this->translator->trans( + 'The override file %1$s conflicts with an existing override in %2$s.', + [$moduleOverrideFile, $existingOverrideFile], + 'Admin.Modules.Notification' + ); + } + } + } + + return !empty($this->errors); + } + + public function getErrors(): array + { + return $this->errors; + } + + /* + * Checks if a module override class has a method that is already overridden by another module + */ + private function hasConflictingMethod(string $moduleOverridePath, string $existingOverridePath): bool + { + $moduleMethods = $this->getClassMethodsFromContent(file_get_contents($moduleOverridePath)); + $existingOverrideMethods = $this->getClassMethodsFromContent(file_get_contents($existingOverridePath)); + + foreach ($moduleMethods as $method) { + if (in_array($method, $existingOverrideMethods)) { + return true; + } + } + + return false; + } + + /* + * This function parses php file content and gets a list of methods from its content. + */ + private function getClassMethodsFromContent(string $content): array + { + // Get the list of tokens, see https://www.php.net/manual/en/function.token-get-all.php + $tokens = token_get_all($content); + $methods = []; + foreach ($tokens as $index => $token) { + $methodName = null; + // filter method definitions + if (is_array($token) && $token[0] === T_FUNCTION) { + // This loop is necessary in case some additional spaces exist before the function name + for ($i = $index + 1; $i < count($tokens); ++$i) { + if (is_array($tokens[$i]) && $tokens[$i][0] === T_STRING) { + $methodName = $tokens[$i][1]; + break; + } + } + + // Collect method name + if ($methodName) { + $methods[] = $methodName; // Save method name + } + } + } + + return $methods; + } +} diff --git a/src/PrestaShopBundle/Resources/config/services/core/module.yml b/src/PrestaShopBundle/Resources/config/services/core/module.yml index 679dfc3f3b1ac..fcd3eca8fe7ba 100644 --- a/src/PrestaShopBundle/Resources/config/services/core/module.yml +++ b/src/PrestaShopBundle/Resources/config/services/core/module.yml @@ -74,3 +74,7 @@ services: alias: PrestaShop\PrestaShop\Core\Module\ModuleManager public: true deprecated: ~ + + PrestaShop\PrestaShop\Core\Module\ModuleOverrideVerifier: + arguments: + - '@translator' diff --git a/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php b/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php index 3f92739f0fabf..7e7253c716f44 100644 --- a/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php +++ b/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php @@ -56,18 +56,29 @@ class ModuleManagerBuilderTest extends TestCase * @var string[] */ public $moduleNames; + /** + * @var string[] + */ + public $conflictModuleNames; public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); $dirResources = dirname(__DIR__, 4); + if (is_dir($dirResources . '/Resources/modules_tests/pscsx3241')) { Tools::recurseCopy($dirResources . '/Resources/modules_tests/pscsx3241', _PS_MODULE_DIR_ . '/pscsx3241'); } if (is_dir($dirResources . '/Resources/modules_tests/pscsx32412')) { Tools::recurseCopy($dirResources . '/Resources/modules_tests/pscsx32412', _PS_MODULE_DIR_ . '/pscsx32412'); } + if (is_dir($dirResources . '/Resources/modules_tests/testconflict')) { + Tools::recurseCopy($dirResources . '/Resources/modules_tests/testconflict', _PS_MODULE_DIR_ . '/testconflict'); + } + if (is_dir($dirResources . '/Resources/modules_tests/testtrickyconflict')) { + Tools::recurseCopy($dirResources . '/Resources/modules_tests/testtrickyconflict', _PS_MODULE_DIR_ . '/testtrickyconflict'); + } } public static function tearDownAfterClass(): void @@ -81,6 +92,12 @@ public static function tearDownAfterClass(): void if (Module::isInstalled('pscsx32412')) { Module::getInstanceByName('pscsx32412')->uninstall(); } + if (Module::isInstalled('testconflict')) { + Module::getInstanceByName('testconflict')->uninstall(); + } + if (Module::isInstalled('testtrickyconflict')) { + Module::getInstanceByName('testtrickyconflict')->uninstall(); + } // Remove modules if (is_dir(_PS_MODULE_DIR_ . '/pscsx3241')) { @@ -89,6 +106,12 @@ public static function tearDownAfterClass(): void if (is_dir(_PS_MODULE_DIR_ . '/pscsx32412')) { Tools::deleteDirectory(_PS_MODULE_DIR_ . '/pscsx32412'); } + if (is_dir(_PS_MODULE_DIR_ . '/testconflict')) { + Tools::deleteDirectory(_PS_MODULE_DIR_ . '/testconflict'); + } + if (is_dir(_PS_MODULE_DIR_ . '/testtrickyconflict')) { + Tools::deleteDirectory(_PS_MODULE_DIR_ . '/testtrickyconflict'); + } // Remove overrides @unlink(_PS_ROOT_DIR_ . '/override/controllers/admin/AdminProductsController.php'); @@ -111,6 +134,8 @@ protected function setUp(): void 'pscsx32412', 'pscsx3241', ]; + + $this->conflictModuleNames = ['testbasicconflict', 'testtrickyconflict']; } public function testInstall(): void @@ -160,6 +185,20 @@ public function testInstall(): void } } + public function testOverrideConflictAtInstall(): void + { + $this->moduleManager->install($this->moduleNames[1]); + + /* + * this will test that install fails when module has a conflicting override, + * using test modules "testbasicconflict" and "testtrickyconflict", tricky conflict + * adds several spaces in function definition (it must still be detected as a conflicting method) + */ + foreach ($this->conflictModuleNames as $name) { + $this->assertFalse($this->moduleManager->install($name)); + } + } + /** * Used to normalize the PHP source code for file comparison * and to strip dates that are inserted in comments when diff --git a/tests/Resources/modules_tests/testbasicconflict/config.xml b/tests/Resources/modules_tests/testbasicconflict/config.xml new file mode 100644 index 0000000000000..f983d5fea41fd --- /dev/null +++ b/tests/Resources/modules_tests/testbasicconflict/config.xml @@ -0,0 +1,12 @@ + + + testbasicconflict + + + + + + 0 + 0 + + diff --git a/tests/Resources/modules_tests/testbasicconflict/logo.gif b/tests/Resources/modules_tests/testbasicconflict/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..0adbd328a2e96f199eb514becc4d81ce62d7a447 GIT binary patch literal 198 zcmZ?wbhEHb6krfw_#(@2(!b$UXv>+H&I@T1E~HPqQZnmG+3c(3bFSAdyxzW~a*NEZ z?o~Bg6>s;gxi@vwgE`xutU7pm{pM#|k3HFb`1bDYFL$5ae{0galQ-U$3<)@nrFrfI8g_VmzmO%$30J4*T)p@SPq@|UM7H?Xo{(GAm&uQc6+gy2%BaiH< yV&^Vwy)C06e9A5GagG?vL4}2djTVa;Pc3o|-YV_I5cybJW3I(IIgVgw25SJ?JYCiR literal 0 HcmV?d00001 diff --git a/tests/Resources/modules_tests/testbasicconflict/override/classes/Cart.php b/tests/Resources/modules_tests/testbasicconflict/override/classes/Cart.php new file mode 100644 index 0000000000000..390700db3ffeb --- /dev/null +++ b/tests/Resources/modules_tests/testbasicconflict/override/classes/Cart.php @@ -0,0 +1,48 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ +class Cart extends CartCore +{ + /** + * An override already exists for this method, so install should fail and return false + */ + public function deleteProduct($id_product, $id_product_attribute = null, $id_customization = null, $id_address_delivery = 0) + { + $result = Hook::exec( + 'ppbsDeleteCartProduct', + [ + 'id_product' => $id_product, + 'id_product_attribute' => $id_product_attribute, + 'id_customization' => $id_customization, + 'id_address_delivery' => $id_address_delivery, + ], + null, + false + ); + if ($result == false) { + parent::deleteProduct($id_product, $id_product_attribute = null, $id_customization = null, $id_address_delivery = 0); + } + } +} diff --git a/tests/Resources/modules_tests/testbasicconflict/testbasicconflict.php b/tests/Resources/modules_tests/testbasicconflict/testbasicconflict.php new file mode 100644 index 0000000000000..b1112c17006bb --- /dev/null +++ b/tests/Resources/modules_tests/testbasicconflict/testbasicconflict.php @@ -0,0 +1,43 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ +if (!defined('_PS_VERSION_')) { + exit; +} + +class testbasicconflict extends Module +{ + public function __construct() + { + $this->name = 'testbasicconflict'; + $this->tab = 'front_office_features'; + $this->version = 1.0; + $this->author = 'fake author'; + $this->need_instance = 0; + parent::__construct(); + $this->displayName = $this->l('basic conflict'); + $this->description = $this->l('A module to test basic override conflict'); + } +} diff --git a/tests/Resources/modules_tests/testtrickyconflict/config.xml b/tests/Resources/modules_tests/testtrickyconflict/config.xml new file mode 100644 index 0000000000000..766f415bcaaf7 --- /dev/null +++ b/tests/Resources/modules_tests/testtrickyconflict/config.xml @@ -0,0 +1,12 @@ + + + testtrickyconflict + + + + + + 0 + 0 + + diff --git a/tests/Resources/modules_tests/testtrickyconflict/logo.gif b/tests/Resources/modules_tests/testtrickyconflict/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..0adbd328a2e96f199eb514becc4d81ce62d7a447 GIT binary patch literal 198 zcmZ?wbhEHb6krfw_#(@2(!b$UXv>+H&I@T1E~HPqQZnmG+3c(3bFSAdyxzW~a*NEZ z?o~Bg6>s;gxi@vwgE`xutU7pm{pM#|k3HFb`1bDYFL$5ae{0galQ-U$3<)@nrFrfI8g_VmzmO%$30J4*T)p@SPq@|UM7H?Xo{(GAm&uQc6+gy2%BaiH< yV&^Vwy)C06e9A5GagG?vL4}2djTVa;Pc3o|-YV_I5cybJW3I(IIgVgw25SJ?JYCiR literal 0 HcmV?d00001 diff --git a/tests/Resources/modules_tests/testtrickyconflict/override/classes/Cart.php b/tests/Resources/modules_tests/testtrickyconflict/override/classes/Cart.php new file mode 100644 index 0000000000000..3da9b41e0fdc7 --- /dev/null +++ b/tests/Resources/modules_tests/testtrickyconflict/override/classes/Cart.php @@ -0,0 +1,48 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ +class Cart extends CartCore +{ + /** + * test for conflicting method detection with additional space + */ + public function deleteProduct($id_product, $id_product_attribute = null, $id_customization = null, $id_address_delivery = 0) + { + $result = Hook::exec( + 'ppbsDeleteCartProduct', + [ + 'id_product' => $id_product, + 'id_product_attribute' => $id_product_attribute, + 'id_customization' => $id_customization, + 'id_address_delivery' => $id_address_delivery, + ], + null, + false + ); + if ($result == false) { + parent::deleteProduct($id_product, $id_product_attribute = null, $id_customization = null, $id_address_delivery = 0); + } + } +} diff --git a/tests/Resources/modules_tests/testtrickyconflict/testtrickyconflict.php b/tests/Resources/modules_tests/testtrickyconflict/testtrickyconflict.php new file mode 100644 index 0000000000000..d7efacd509389 --- /dev/null +++ b/tests/Resources/modules_tests/testtrickyconflict/testtrickyconflict.php @@ -0,0 +1,43 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ +if (!defined('_PS_VERSION_')) { + exit; +} + +class testtrickyconflict extends Module +{ + public function __construct() + { + $this->name = 'testtrickyconflict'; + $this->tab = 'front_office_features'; + $this->version = 1.0; + $this->author = 'fake author'; + $this->need_instance = 0; + parent::__construct(); + $this->displayName = $this->l('tricky conflict'); + $this->description = $this->l('A module to test tricky override conflict'); + } +} From f2c6938e4263e36d2ec855f536bf405e51c113d5 Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Mon, 9 Sep 2024 16:14:46 +0200 Subject: [PATCH 12/47] exclude module tests file in php-cs-fixer config --- .php-cs-fixer.dist.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index ac4fb26e283cb..a26fa27f79468 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -11,9 +11,10 @@ ])->notPath([ 'Unit/Resources/config/params.php', 'Unit/Resources/config/params_modified.php', - __DIR__.'/tests/Resources/modules_tests', + 'tests/Resources/modules_tests', ]); + return (new PhpCsFixer\Config()) ->setRiskyAllowed(true) ->setRules([ From 6104d516692c95cbbc50be46233891036ed04b6e Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Mon, 9 Sep 2024 16:49:57 +0200 Subject: [PATCH 13/47] ignore test file --- .php-cs-fixer.dist.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index a26fa27f79468..df377981daffa 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -11,7 +11,7 @@ ])->notPath([ 'Unit/Resources/config/params.php', 'Unit/Resources/config/params_modified.php', - 'tests/Resources/modules_tests', + 'tests/Resources/modules_tests/testtrickyconflict/override/classes/Cart.php', ]); From 0ba0f317e03318c3494921d0dd12be220fd4c0e6 Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Mon, 9 Sep 2024 17:56:33 +0200 Subject: [PATCH 14/47] test --- .github/workflows/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 0a5306735e0e3..1d9a53813d389 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -45,7 +45,7 @@ jobs: run: composer install --ansi --prefer-dist --no-interaction --no-progress - name: Run PHPCSFixer - run: ./vendor/bin/php-cs-fixer fix --dry-run --diff + run: ./vendor/bin/php-cs-fixer fix --dry-run --diff --path-mode=intersection - name: Run ergebnis/composer-normalize run: composer normalize --dry-run --no-check-lock From 4007fa7b67b2396ea31b13d625a6755d00a2c261 Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Tue, 10 Sep 2024 11:19:25 +0200 Subject: [PATCH 15/47] add composer commands for php-cs-fixer and phpstan --- composer.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index ee751d892f331..ee57f8b01fbac 100644 --- a/composer.json +++ b/composer.json @@ -244,7 +244,10 @@ ], "unit-tests": [ "@php -d date.timezone=UTC ./vendor/phpunit/phpunit/phpunit -c tests/Unit/phpunit.xml" - ] + ], + "php-cs-fixer": "@php ./vendor/bin/php-cs-fixer fix --path-mode=intersection", + "php-cs-fixer:dry": "@php ./vendor/bin/php-cs-fixer fix --dry-run --diff --path-mode=intersection", + "phpstan": "@php ./vendor/bin/phpstan analyze -c phpstan.neon.dist" }, "scripts-descriptions": { "create-release": "Create a release of PrestaShop, run the command with -h/--help argument for more information.", From 77648e73cf243aece480d17af4ccbc51d55d3ae3 Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Tue, 10 Sep 2024 11:28:34 +0200 Subject: [PATCH 16/47] add new commands description --- composer.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index ee57f8b01fbac..cc4c591fb6ac9 100644 --- a/composer.json +++ b/composer.json @@ -255,6 +255,9 @@ "create-test-table-dumps": "Create a dump of each table in the Database for testing purposes", "restore-test-db": "Restore the whole DB in a single dump", "restore-test-tables": "Restore all tables one by one, only when they have been modified", - "test-all": "Launch all PHPUnit test suites" + "test-all": "Launch all PHPUnit test suites", + "php-cs-fixer": "Launch php cs fixer, fixes will be applied automatically", + "php-cs-fixer:dry": "Launch php cs fixer in dry mode: fixes will not be applied automatically", + "phpstan": "Launch a phpstan analyzis" } } From a1611c94896e30e93e97c8e33c80080f5a1269af Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Tue, 10 Sep 2024 15:45:32 +0200 Subject: [PATCH 17/47] rename ModuleOverrideVerifier into ModuleOverrideChecker --- classes/module/Module.php | 12 ++++++------ ...verrideVerifier.php => ModuleOverrideChecker.php} | 2 +- .../Resources/config/services/core/module.yml | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) rename src/Core/Module/{ModuleOverrideVerifier.php => ModuleOverrideChecker.php} (99%) diff --git a/classes/module/Module.php b/classes/module/Module.php index 1134c7a6dc9e6..cf71848b8b338 100755 --- a/classes/module/Module.php +++ b/classes/module/Module.php @@ -33,7 +33,7 @@ use PrestaShop\PrestaShop\Core\Exception\ContainerNotFoundException; use PrestaShop\PrestaShop\Core\Foundation\Filesystem\FileSystem; use PrestaShop\PrestaShop\Core\Module\Legacy\ModuleInterface; -use PrestaShop\PrestaShop\Core\Module\ModuleOverrideVerifier; +use PrestaShop\PrestaShop\Core\Module\ModuleOverrideChecker; use PrestaShop\PrestaShop\Core\Module\WidgetInterface; use PrestaShop\TranslationToolsBundle\Translation\Helper\DomainHelper; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -413,12 +413,12 @@ public function install() } // Check for override conflicts - $moduleOverrideVerifier = $this->get(ModuleOverrideVerifier::class); - if (!$moduleOverrideVerifier) { - $moduleOverrideVerifier = new ModuleOverrideVerifier($this->getTranslator()); + $moduleOverrideChecker = $this->get(ModuleOverrideChecker::class); + if (!$moduleOverrideChecker) { + $moduleOverrideChecker = new ModuleOverrideChecker($this->getTranslator()); } - if ($moduleOverrideVerifier->hasOverrideConflict($this->getLocalPath() . 'override')) { - $this->_errors = array_merge($moduleOverrideVerifier->getErrors(), $this->_errors); + if ($moduleOverrideChecker->hasOverrideConflict($this->getLocalPath() . 'override')) { + $this->_errors = array_merge($moduleOverrideChecker->getErrors(), $this->_errors); return false; } diff --git a/src/Core/Module/ModuleOverrideVerifier.php b/src/Core/Module/ModuleOverrideChecker.php similarity index 99% rename from src/Core/Module/ModuleOverrideVerifier.php rename to src/Core/Module/ModuleOverrideChecker.php index c529d69744ae9..99cba2de3d4ba 100644 --- a/src/Core/Module/ModuleOverrideVerifier.php +++ b/src/Core/Module/ModuleOverrideChecker.php @@ -31,7 +31,7 @@ use PrestaShop\PrestaShop\Adapter\Tools; use Symfony\Contracts\Translation\TranslatorInterface; -class ModuleOverrideVerifier +class ModuleOverrideChecker { /** * @var TranslatorInterface diff --git a/src/PrestaShopBundle/Resources/config/services/core/module.yml b/src/PrestaShopBundle/Resources/config/services/core/module.yml index fcd3eca8fe7ba..a10b9c50bcd4a 100644 --- a/src/PrestaShopBundle/Resources/config/services/core/module.yml +++ b/src/PrestaShopBundle/Resources/config/services/core/module.yml @@ -75,6 +75,6 @@ services: public: true deprecated: ~ - PrestaShop\PrestaShop\Core\Module\ModuleOverrideVerifier: + PrestaShop\PrestaShop\Core\Module\ModuleOverrideChecker: arguments: - '@translator' From 4aaacdab35b93f74d94a8bf71492feb043b64c2f Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Wed, 11 Sep 2024 10:24:11 +0200 Subject: [PATCH 18/47] pass ps override dir as parameter to overrideChecker service --- classes/module/Module.php | 13 +++++++++++-- src/Core/Module/ModuleOverrideChecker.php | 10 ++++++++-- .../Resources/config/services/core/module.yml | 1 + 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/classes/module/Module.php b/classes/module/Module.php index cf71848b8b338..440b473c918bc 100755 --- a/classes/module/Module.php +++ b/classes/module/Module.php @@ -415,7 +415,7 @@ public function install() // Check for override conflicts $moduleOverrideChecker = $this->get(ModuleOverrideChecker::class); if (!$moduleOverrideChecker) { - $moduleOverrideChecker = new ModuleOverrideChecker($this->getTranslator()); + $moduleOverrideChecker = new ModuleOverrideChecker($this->getTranslator(), _PS_OVERRIDE_DIR_); } if ($moduleOverrideChecker->hasOverrideConflict($this->getLocalPath() . 'override')) { $this->_errors = array_merge($moduleOverrideChecker->getErrors(), $this->_errors); @@ -871,7 +871,12 @@ public function enable($force_all = false) } } - if ($this->getOverrides() != null) { + $moduleOverrideChecker = $this->get(ModuleOverrideChecker::class); + if (!$moduleOverrideChecker) { + $moduleOverrideChecker = new ModuleOverrideChecker($this->getTranslator(), _PS_OVERRIDE_DIR_); + } + + if ($this->getOverrides() != null && !$moduleOverrideChecker->hasOverrideConflict($this->getLocalPath() . 'override')) { // Install overrides try { $this->installOverrides(); @@ -881,6 +886,10 @@ public function enable($force_all = false) return false; } + } else { + $this->_errors = array_merge($moduleOverrideChecker->getErrors(), $this->_errors); + + return false; } // Enable module in the shop where it is not enabled yet diff --git a/src/Core/Module/ModuleOverrideChecker.php b/src/Core/Module/ModuleOverrideChecker.php index 99cba2de3d4ba..b5412393223b7 100644 --- a/src/Core/Module/ModuleOverrideChecker.php +++ b/src/Core/Module/ModuleOverrideChecker.php @@ -43,9 +43,15 @@ class ModuleOverrideChecker */ private $errors = []; - public function __construct(TranslatorInterface $translator) + /** + * @var string + */ + private $psOverrideDir; + + public function __construct(TranslatorInterface $translator, string $psOverrideDir) { $this->translator = $translator; + $this->psOverrideDir = $psOverrideDir; } public function hasOverrideConflict(string $moduleOverridePath): bool @@ -59,7 +65,7 @@ public function hasOverrideConflict(string $moduleOverridePath): bool // module has overrides, let's check override files one by one foreach ($tools->scandir($moduleOverridePath, 'php', '', true) as $file) { $moduleOverrideFile = $moduleOverridePath . DIRECTORY_SEPARATOR . $file; - $existingOverrideFile = _PS_OVERRIDE_DIR_ . $file; + $existingOverrideFile = $this->psOverrideDir . $file; if (file_exists($existingOverrideFile)) { if ($this->hasConflictingMethod($moduleOverrideFile, $existingOverrideFile)) { diff --git a/src/PrestaShopBundle/Resources/config/services/core/module.yml b/src/PrestaShopBundle/Resources/config/services/core/module.yml index a10b9c50bcd4a..1c684f715be4a 100644 --- a/src/PrestaShopBundle/Resources/config/services/core/module.yml +++ b/src/PrestaShopBundle/Resources/config/services/core/module.yml @@ -78,3 +78,4 @@ services: PrestaShop\PrestaShop\Core\Module\ModuleOverrideChecker: arguments: - '@translator' + - !php/const _PS_OVERRIDE_DIR_ From c3dc1e77992c65247c995a515f3cd7c75859f74f Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Wed, 11 Sep 2024 11:58:04 +0200 Subject: [PATCH 19/47] use symfony finder for getting override files --- src/Core/Module/ModuleOverrideChecker.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Core/Module/ModuleOverrideChecker.php b/src/Core/Module/ModuleOverrideChecker.php index b5412393223b7..ce651d7d3b4b5 100644 --- a/src/Core/Module/ModuleOverrideChecker.php +++ b/src/Core/Module/ModuleOverrideChecker.php @@ -28,7 +28,7 @@ namespace PrestaShop\PrestaShop\Core\Module; -use PrestaShop\PrestaShop\Adapter\Tools; +use Symfony\Component\Finder\Finder; use Symfony\Contracts\Translation\TranslatorInterface; class ModuleOverrideChecker @@ -61,9 +61,21 @@ public function hasOverrideConflict(string $moduleOverridePath): bool return false; } - $tools = new Tools(); + $finder = new Finder(); + $finder->files()->in($moduleOverridePath)->name('*.php'); + + // module doesn't have overrides, return false + if (!$finder->hasResults()) { + return false; + } + + $fileList = []; + foreach ($finder as $file) { + $fileList[] = $file->getRelativePathname(); + } + // module has overrides, let's check override files one by one - foreach ($tools->scandir($moduleOverridePath, 'php', '', true) as $file) { + foreach ($fileList as $file) { $moduleOverrideFile = $moduleOverridePath . DIRECTORY_SEPARATOR . $file; $existingOverrideFile = $this->psOverrideDir . $file; From e46e7b510ea4cc8dd4b44f1444cbf58e78343cad Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Wed, 11 Sep 2024 12:08:22 +0200 Subject: [PATCH 20/47] remove useless scandir adapter method --- src/Adapter/Tools.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Adapter/Tools.php b/src/Adapter/Tools.php index bf8fa2326fab2..29d6f1487d5bf 100644 --- a/src/Adapter/Tools.php +++ b/src/Adapter/Tools.php @@ -224,9 +224,4 @@ public function truncateString($text, $length = 120, $options = []) { return LegacyTools::truncateString($text, $length, $options); } - - public function scanDir($path, $ext = 'php', $dir = '', $recursive = false) - { - return LegacyTools::scanDir($path, $ext, $dir, $recursive); - } } From d71da534301f8e8287ffa02152c941b8acd21ef0 Mon Sep 17 00:00:00 2001 From: Codencode Date: Wed, 11 Sep 2024 16:09:30 +0200 Subject: [PATCH 21/47] Update AdminCartsController.php --- controllers/admin/AdminCartsController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/controllers/admin/AdminCartsController.php b/controllers/admin/AdminCartsController.php index 3c55253f703dd..5035dc51a40a3 100644 --- a/controllers/admin/AdminCartsController.php +++ b/controllers/admin/AdminCartsController.php @@ -923,6 +923,7 @@ public static function getOrderTotalUsingTaxCalculationMethod($id_cart) $context->cart = new Cart($id_cart); $context->currency = new Currency((int) $context->cart->id_currency); $context->customer = new Customer((int) $context->cart->id_customer); + $context->shop = new Shop((int) $context->cart->id_shop); return Cart::getTotalCart($id_cart, true, Cart::BOTH_WITHOUT_SHIPPING); } From 28cca1b24a607e03e077a7d9b64cf0271581d260 Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Thu, 12 Sep 2024 15:07:44 +0200 Subject: [PATCH 22/47] fix wrong condition on override check at module enable --- classes/module/Module.php | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/classes/module/Module.php b/classes/module/Module.php index 440b473c918bc..ae33966279d3c 100755 --- a/classes/module/Module.php +++ b/classes/module/Module.php @@ -876,20 +876,22 @@ public function enable($force_all = false) $moduleOverrideChecker = new ModuleOverrideChecker($this->getTranslator(), _PS_OVERRIDE_DIR_); } - if ($this->getOverrides() != null && !$moduleOverrideChecker->hasOverrideConflict($this->getLocalPath() . 'override')) { - // Install overrides - try { - $this->installOverrides(); - } catch (Exception $e) { - $this->_errors[] = Context::getContext()->getTranslator()->trans('Unable to install override: %s', [$e->getMessage()], 'Admin.Modules.Notification'); - $this->uninstallOverrides(); + if ($this->getOverrides() != null) { + if (!$moduleOverrideChecker->hasOverrideConflict($this->getLocalPath() . 'override')) { + // Install overrides + try { + $this->installOverrides(); + } catch (Exception $e) { + $this->_errors[] = Context::getContext()->getTranslator()->trans('Unable to install override: %s', [$e->getMessage()], 'Admin.Modules.Notification'); + $this->uninstallOverrides(); + + return false; + } + } else { + $this->_errors = array_merge($moduleOverrideChecker->getErrors(), $this->_errors); return false; } - } else { - $this->_errors = array_merge($moduleOverrideChecker->getErrors(), $this->_errors); - - return false; } // Enable module in the shop where it is not enabled yet From 9e32f9f398f29e61742e55f63fd2cdddd98fa2ac Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Thu, 12 Sep 2024 15:13:25 +0200 Subject: [PATCH 23/47] re-order composer commands correctly --- composer.json | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index cc4c591fb6ac9..d759708315b46 100644 --- a/composer.json +++ b/composer.json @@ -231,6 +231,10 @@ "@php -d date.timezone=UTC -d memory_limit=-1 ./vendor/phpunit/phpunit/phpunit -c tests/Integration/phpunit.xml", "@php -d date.timezone=UTC ./vendor/phpunit/phpunit/phpunit -c tests/Integration/phpunit-isolated.xml" ], + "php-cs-fixer": "@php ./vendor/bin/php-cs-fixer fix --path-mode=intersection", + "php-cs-fixer:dry": "@php ./vendor/bin/php-cs-fixer fix --dry-run --diff --path-mode=intersection", + "phpstan": "@php ./vendor/bin/phpstan analyze -c phpstan.neon.dist", + "phpstan:generate-baseline": "@php ./vendor/bin/phpstan analyze -c phpstan.neon.dist", "restore-test-db": [ "@php ./tests/bin/restore-test-db.php" ], @@ -244,20 +248,17 @@ ], "unit-tests": [ "@php -d date.timezone=UTC ./vendor/phpunit/phpunit/phpunit -c tests/Unit/phpunit.xml" - ], - "php-cs-fixer": "@php ./vendor/bin/php-cs-fixer fix --path-mode=intersection", - "php-cs-fixer:dry": "@php ./vendor/bin/php-cs-fixer fix --dry-run --diff --path-mode=intersection", - "phpstan": "@php ./vendor/bin/phpstan analyze -c phpstan.neon.dist" + ] }, "scripts-descriptions": { "create-release": "Create a release of PrestaShop, run the command with -h/--help argument for more information.", "create-test-db": "Create a Database for testing purposes", "create-test-table-dumps": "Create a dump of each table in the Database for testing purposes", - "restore-test-db": "Restore the whole DB in a single dump", - "restore-test-tables": "Restore all tables one by one, only when they have been modified", - "test-all": "Launch all PHPUnit test suites", "php-cs-fixer": "Launch php cs fixer, fixes will be applied automatically", "php-cs-fixer:dry": "Launch php cs fixer in dry mode: fixes will not be applied automatically", - "phpstan": "Launch a phpstan analyzis" + "phpstan": "Launch a phpstan analyzis", + "restore-test-db": "Restore the whole DB in a single dump", + "restore-test-tables": "Restore all tables one by one, only when they have been modified", + "test-all": "Launch all PHPUnit test suites" } } From e77dec3729f499da7a30a30b7687f5c34283d64c Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Fri, 13 Sep 2024 11:08:53 +0200 Subject: [PATCH 24/47] add unit tests --- src/Core/Module/ModuleOverrideChecker.php | 2 +- .../Addon/Module/ModuleManagerBuilderTest.php | 4 +- .../override/{ => classes}/Cart.php | 0 .../admin}/AdminProductsController.php | 0 .../modules_tests/testnoconflict/config.xml | 12 +++ .../testnoconflict/override/classes/Cart.php | 35 +++++++ .../testnoconflict/testnoconflict.php | 43 ++++++++ .../modules_tests/testnooverride/config.xml | 12 +++ .../logo.gif | Bin .../testnooverride/testnooverride.php | 43 ++++++++ .../modules_tests/testtrickyconflict/logo.gif | Bin 198 -> 0 bytes .../Core/Module/ModuleOverrideCheckerTest.php | 92 ++++++++++++++++++ 12 files changed, 240 insertions(+), 3 deletions(-) rename tests/Resources/modules_tests/override/{ => classes}/Cart.php (100%) rename tests/Resources/modules_tests/override/{ => controllers/admin}/AdminProductsController.php (100%) create mode 100644 tests/Resources/modules_tests/testnoconflict/config.xml create mode 100644 tests/Resources/modules_tests/testnoconflict/override/classes/Cart.php create mode 100644 tests/Resources/modules_tests/testnoconflict/testnoconflict.php create mode 100644 tests/Resources/modules_tests/testnooverride/config.xml rename tests/Resources/modules_tests/{testbasicconflict => testnooverride}/logo.gif (100%) create mode 100644 tests/Resources/modules_tests/testnooverride/testnooverride.php delete mode 100644 tests/Resources/modules_tests/testtrickyconflict/logo.gif create mode 100644 tests/Unit/Core/Module/ModuleOverrideCheckerTest.php diff --git a/src/Core/Module/ModuleOverrideChecker.php b/src/Core/Module/ModuleOverrideChecker.php index ce651d7d3b4b5..1b9fb5f3220ba 100644 --- a/src/Core/Module/ModuleOverrideChecker.php +++ b/src/Core/Module/ModuleOverrideChecker.php @@ -64,7 +64,7 @@ public function hasOverrideConflict(string $moduleOverridePath): bool $finder = new Finder(); $finder->files()->in($moduleOverridePath)->name('*.php'); - // module doesn't have overrides, return false + // The module's override folder doesn't contain any override, return false if (!$finder->hasResults()) { return false; } diff --git a/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php b/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php index 7e7253c716f44..264d32a5d9b3c 100644 --- a/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php +++ b/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php @@ -155,7 +155,7 @@ public function testInstall(): void $resource_path = dirname(__DIR__, 4) . '/Resources/modules_tests/override/'; $actual_override_cart = file_get_contents(_PS_ROOT_DIR_ . '/override/classes/Cart.php'); - $expected_override_cart = file_get_contents($resource_path . '/Cart.php'); + $expected_override_cart = file_get_contents($resource_path . '/classes/Cart.php'); $actual_override_cart = $this->cleanup($actual_override_cart); $expected_override_cart = $this->cleanup($expected_override_cart); @@ -163,7 +163,7 @@ public function testInstall(): void $this->assertEquals($expected_override_cart, $actual_override_cart); $actual_override_admin_product = file_get_contents(_PS_ROOT_DIR_ . '/override/controllers/admin/AdminProductsController.php'); - $expected_override_admin_product = file_get_contents($resource_path . '/AdminProductsController.php'); + $expected_override_admin_product = file_get_contents($resource_path . '/controllers/admin/AdminProductsController.php'); $this->assertEquals( $this->cleanup($expected_override_admin_product), diff --git a/tests/Resources/modules_tests/override/Cart.php b/tests/Resources/modules_tests/override/classes/Cart.php similarity index 100% rename from tests/Resources/modules_tests/override/Cart.php rename to tests/Resources/modules_tests/override/classes/Cart.php diff --git a/tests/Resources/modules_tests/override/AdminProductsController.php b/tests/Resources/modules_tests/override/controllers/admin/AdminProductsController.php similarity index 100% rename from tests/Resources/modules_tests/override/AdminProductsController.php rename to tests/Resources/modules_tests/override/controllers/admin/AdminProductsController.php diff --git a/tests/Resources/modules_tests/testnoconflict/config.xml b/tests/Resources/modules_tests/testnoconflict/config.xml new file mode 100644 index 0000000000000..01b13daed831f --- /dev/null +++ b/tests/Resources/modules_tests/testnoconflict/config.xml @@ -0,0 +1,12 @@ + + + testnoconflict + + + + + + 0 + 0 + + diff --git a/tests/Resources/modules_tests/testnoconflict/override/classes/Cart.php b/tests/Resources/modules_tests/testnoconflict/override/classes/Cart.php new file mode 100644 index 0000000000000..9667e2122e093 --- /dev/null +++ b/tests/Resources/modules_tests/testnoconflict/override/classes/Cart.php @@ -0,0 +1,35 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ +class Cart extends CartCore +{ + /** + * test for override that should trigger no conflict + */ + public function isCarrierInRange($id_carrier, $id_zone) + { + return true; + } +} diff --git a/tests/Resources/modules_tests/testnoconflict/testnoconflict.php b/tests/Resources/modules_tests/testnoconflict/testnoconflict.php new file mode 100644 index 0000000000000..3e446d640c24f --- /dev/null +++ b/tests/Resources/modules_tests/testnoconflict/testnoconflict.php @@ -0,0 +1,43 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ +if (!defined('_PS_VERSION_')) { + exit; +} + +class testnoconflict extends Module +{ + public function __construct() + { + $this->name = 'testnoconflict'; + $this->tab = 'front_office_features'; + $this->version = 1.0; + $this->author = 'fake author'; + $this->need_instance = 0; + parent::__construct(); + $this->displayName = $this->l('no conflict'); + $this->description = $this->l('A module to test no override conflict'); + } +} diff --git a/tests/Resources/modules_tests/testnooverride/config.xml b/tests/Resources/modules_tests/testnooverride/config.xml new file mode 100644 index 0000000000000..e286e2ec19be8 --- /dev/null +++ b/tests/Resources/modules_tests/testnooverride/config.xml @@ -0,0 +1,12 @@ + + + testnooverride + + + + + + 0 + 0 + + diff --git a/tests/Resources/modules_tests/testbasicconflict/logo.gif b/tests/Resources/modules_tests/testnooverride/logo.gif similarity index 100% rename from tests/Resources/modules_tests/testbasicconflict/logo.gif rename to tests/Resources/modules_tests/testnooverride/logo.gif diff --git a/tests/Resources/modules_tests/testnooverride/testnooverride.php b/tests/Resources/modules_tests/testnooverride/testnooverride.php new file mode 100644 index 0000000000000..6a8a91b557369 --- /dev/null +++ b/tests/Resources/modules_tests/testnooverride/testnooverride.php @@ -0,0 +1,43 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ +if (!defined('_PS_VERSION_')) { + exit; +} + +class testnooverride extends Module +{ + public function __construct() + { + $this->name = 'testnooverride'; + $this->tab = 'front_office_features'; + $this->version = 1.0; + $this->author = 'fake author'; + $this->need_instance = 0; + parent::__construct(); + $this->displayName = $this->l('no override module'); + $this->description = $this->l('A module to test override check when there is no override'); + } +} diff --git a/tests/Resources/modules_tests/testtrickyconflict/logo.gif b/tests/Resources/modules_tests/testtrickyconflict/logo.gif deleted file mode 100644 index 0adbd328a2e96f199eb514becc4d81ce62d7a447..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmZ?wbhEHb6krfw_#(@2(!b$UXv>+H&I@T1E~HPqQZnmG+3c(3bFSAdyxzW~a*NEZ z?o~Bg6>s;gxi@vwgE`xutU7pm{pM#|k3HFb`1bDYFL$5ae{0galQ-U$3<)@nrFrfI8g_VmzmO%$30J4*T)p@SPq@|UM7H?Xo{(GAm&uQc6+gy2%BaiH< yV&^Vwy)C06e9A5GagG?vL4}2djTVa;Pc3o|-YV_I5cybJW3I(IIgVgw25SJ?JYCiR diff --git a/tests/Unit/Core/Module/ModuleOverrideCheckerTest.php b/tests/Unit/Core/Module/ModuleOverrideCheckerTest.php new file mode 100644 index 0000000000000..cedc12661b73f --- /dev/null +++ b/tests/Unit/Core/Module/ModuleOverrideCheckerTest.php @@ -0,0 +1,92 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ + +namespace Tests\Unit\Core\Module; + +use PHPUnit\Framework\TestCase; +use PrestaShop\PrestaShop\Core\Module\ModuleOverrideChecker; +use Symfony\Contracts\Translation\TranslatorInterface; + +class ModuleOverrideCheckerTest extends TestCase +{ + /** + * @var string + */ + protected $psOverrideDir; + + /** + * @var string + */ + protected $modulesTestsDir; + + protected function setUp(): void + { + $this->psOverrideDir = dirname(__DIR__, 3) . '/Resources/modules_tests/override/'; + $this->modulesTestsDir = dirname(__DIR__, 3) . '/Resources/modules_tests'; + } + + /** + * @dataProvider provideTestData + */ + public function testHasOverrideConflict(string $moduleName, bool $expectedResult): void + { + $moduleOverrideChecker = $this->getModuleOverrideChecker(); + + $moduleOverridePath = sprintf('%s/%s/override', $this->modulesTestsDir, $moduleName); + + $this->assertEquals($expectedResult, $moduleOverrideChecker->hasOverrideConflict($moduleOverridePath)); + } + + private function getModuleOverrideChecker(): ModuleOverrideChecker + { + $translatorMock = $this->createMock(TranslatorInterface::class); + $translatorMock->method('trans')->willReturnArgument(0); + + return new ModuleOverrideChecker($translatorMock, $this->psOverrideDir); + } + + public function provideTestData(): array + { + return [ + [ + 'testnoconflict', + false, + ], + [ + 'testnooverride', + false, + ], + [ + 'testbasicconflict', + true, + ], + [ + 'testtrickyconflict', + true, + ], + ]; + } +} From 27c52548b3256fff95cf1aa0cb72778568fd5b9e Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Fri, 13 Sep 2024 12:44:52 +0200 Subject: [PATCH 25/47] add check on constants and properties + tests --- src/Core/Module/ModuleOverrideChecker.php | 94 ++++++++++++++++++- .../Addon/Module/ModuleManagerBuilderTest.php | 22 ++++- .../modules_tests/override/classes/Cart.php | 2 + .../pscsx3241/override/classes/Cart.php | 2 + .../testconstantconflict/config.xml | 12 +++ .../override/classes/Cart.php | 40 ++++++++ .../testconstantconflict.php | 43 +++++++++ .../testpropertyconflict/config.xml | 12 +++ .../override/classes/Cart.php | 40 ++++++++ .../testpropertyconflict.php | 43 +++++++++ .../Core/Module/ModuleOverrideCheckerTest.php | 8 ++ 11 files changed, 314 insertions(+), 4 deletions(-) create mode 100644 tests/Resources/modules_tests/testconstantconflict/config.xml create mode 100644 tests/Resources/modules_tests/testconstantconflict/override/classes/Cart.php create mode 100644 tests/Resources/modules_tests/testconstantconflict/testconstantconflict.php create mode 100644 tests/Resources/modules_tests/testpropertyconflict/config.xml create mode 100644 tests/Resources/modules_tests/testpropertyconflict/override/classes/Cart.php create mode 100644 tests/Resources/modules_tests/testpropertyconflict/testpropertyconflict.php diff --git a/src/Core/Module/ModuleOverrideChecker.php b/src/Core/Module/ModuleOverrideChecker.php index 1b9fb5f3220ba..48e43a789dc1e 100644 --- a/src/Core/Module/ModuleOverrideChecker.php +++ b/src/Core/Module/ModuleOverrideChecker.php @@ -103,8 +103,11 @@ public function getErrors(): array */ private function hasConflictingMethod(string $moduleOverridePath, string $existingOverridePath): bool { - $moduleMethods = $this->getClassMethodsFromContent(file_get_contents($moduleOverridePath)); - $existingOverrideMethods = $this->getClassMethodsFromContent(file_get_contents($existingOverridePath)); + $moduleOverrideContent = file_get_contents($moduleOverridePath); + $existingOverrideContent = file_get_contents($existingOverridePath); + + $moduleMethods = $this->getClassMethodsFromContent($moduleOverrideContent); + $existingOverrideMethods = $this->getClassMethodsFromContent($existingOverrideContent); foreach ($moduleMethods as $method) { if (in_array($method, $existingOverrideMethods)) { @@ -112,6 +115,24 @@ private function hasConflictingMethod(string $moduleOverridePath, string $existi } } + $moduleOverrideProperties = $this->getClassPropertiesFromContent($moduleOverrideContent); + $existingOverrideProperties = $this->getClassPropertiesFromContent($existingOverrideContent); + + foreach ($moduleOverrideProperties as $property) { + if (in_array($property, $existingOverrideProperties)) { + return true; + } + } + + $moduleOverrideConstants = $this->getClassConstantsFromContent($moduleOverrideContent); + $existingOverrideConstants = $this->getClassConstantsFromContent($existingOverrideContent); + + foreach ($moduleOverrideConstants as $constants) { + if (in_array($constants, $existingOverrideConstants)) { + return true; + } + } + return false; } @@ -144,4 +165,73 @@ private function getClassMethodsFromContent(string $content): array return $methods; } + + /* + * This function parses php file content and gets a list of properties from its content. + */ + private function getClassPropertiesFromContent(string $content): array + { + // Get the list of tokens, see https://www.php.net/manual/en/function.token-get-all.php + $tokens = token_get_all($content); + $properties = []; + $inClass = false; + $inFunction = false; + + foreach ($tokens as $index => $token) { + // we only want variables that are inside a class AND outside a function + if (is_array($token) && $token[0] === T_CLASS) { + $inClass = true; + $inFunction = false; + } + + // check that we are in the beginning of a function + if (is_array($token) && $token[0] === T_FUNCTION) { + $inFunction = true; + } + + // check that this is the end of a function + if ($token === '}') { + $inFunction = false; + } + + // Property name is gathered if we are inside a class and outside a function + if ($inClass && !$inFunction && is_array($token) && $token[0] === T_VARIABLE) { + $propertyName = $token[1]; // Token contains the variable name as the second element + $properties[] = $propertyName; // Add to the properties array + } + } + + return $properties; // Return the list of property names + } + + /* + * This function parses php file content and gets a list of constants from its content. + */ + private function getClassConstantsFromContent(string $content): array + { + // Get the list of tokens, see https://www.php.net/manual/en/function.token-get-all.php + $tokens = token_get_all($content); + $constants = []; + $inClass = false; + + foreach ($tokens as $index => $token) { + // check that we are at the beginning of a class + if (is_array($token) && $token[0] === T_CLASS) { + $inClass = true; + } + + // Check for constant declarations inside the class + if ($inClass && is_array($token) && $token[0] === T_CONST) { + // Loop ahead to find the constant name + for ($i = $index + 1; $i < count($tokens); ++$i) { + if (is_array($tokens[$i]) && $tokens[$i][0] === T_STRING) { + $constants[] = $tokens[$i][1]; // Save constant name + break; + } + } + } + } + + return $constants; + } } diff --git a/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php b/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php index 264d32a5d9b3c..3248472723e8f 100644 --- a/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php +++ b/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php @@ -79,6 +79,12 @@ public static function setUpBeforeClass(): void if (is_dir($dirResources . '/Resources/modules_tests/testtrickyconflict')) { Tools::recurseCopy($dirResources . '/Resources/modules_tests/testtrickyconflict', _PS_MODULE_DIR_ . '/testtrickyconflict'); } + if (is_dir($dirResources . '/Resources/modules_tests/testconstantconflict')) { + Tools::recurseCopy($dirResources . '/Resources/modules_tests/testconstantconflict', _PS_MODULE_DIR_ . '/testconstantconflict'); + } + if (is_dir($dirResources . '/Resources/modules_tests/testpropertyconflict')) { + Tools::recurseCopy($dirResources . '/Resources/modules_tests/testpropertyconflict', _PS_MODULE_DIR_ . '/testpropertyconflict'); + } } public static function tearDownAfterClass(): void @@ -98,6 +104,12 @@ public static function tearDownAfterClass(): void if (Module::isInstalled('testtrickyconflict')) { Module::getInstanceByName('testtrickyconflict')->uninstall(); } + if (Module::isInstalled('testpropertyconflict')) { + Module::getInstanceByName('testpropertyconflict')->uninstall(); + } + if (Module::isInstalled('testconstantconflict')) { + Module::getInstanceByName('testconstantconflict')->uninstall(); + } // Remove modules if (is_dir(_PS_MODULE_DIR_ . '/pscsx3241')) { @@ -112,6 +124,12 @@ public static function tearDownAfterClass(): void if (is_dir(_PS_MODULE_DIR_ . '/testtrickyconflict')) { Tools::deleteDirectory(_PS_MODULE_DIR_ . '/testtrickyconflict'); } + if (is_dir(_PS_MODULE_DIR_ . '/testpropertyconflict')) { + Tools::deleteDirectory(_PS_MODULE_DIR_ . '/testpropertyconflict'); + } + if (is_dir(_PS_MODULE_DIR_ . '/testconstantconflict')) { + Tools::deleteDirectory(_PS_MODULE_DIR_ . '/testconstantconflict'); + } // Remove overrides @unlink(_PS_ROOT_DIR_ . '/override/controllers/admin/AdminProductsController.php'); @@ -135,7 +153,7 @@ protected function setUp(): void 'pscsx3241', ]; - $this->conflictModuleNames = ['testbasicconflict', 'testtrickyconflict']; + $this->conflictModuleNames = ['testbasicconflict', 'testtrickyconflict', 'testpropertyconflict', 'testconstantconflict']; } public function testInstall(): void @@ -195,7 +213,7 @@ public function testOverrideConflictAtInstall(): void * adds several spaces in function definition (it must still be detected as a conflicting method) */ foreach ($this->conflictModuleNames as $name) { - $this->assertFalse($this->moduleManager->install($name)); + $this->assertFalse($this->moduleManager->install($name), 'module test on ' . $name . ' failed'); } } diff --git a/tests/Resources/modules_tests/override/classes/Cart.php b/tests/Resources/modules_tests/override/classes/Cart.php index c92a8686c1f3c..a22df0fd9cc23 100644 --- a/tests/Resources/modules_tests/override/classes/Cart.php +++ b/tests/Resources/modules_tests/override/classes/Cart.php @@ -2,6 +2,8 @@ class Cart extends CartCore { + public const BOTH = 999; + /* * module: pscsx32412 * date: 2018-12-26 14:14:05 diff --git a/tests/Resources/modules_tests/pscsx3241/override/classes/Cart.php b/tests/Resources/modules_tests/pscsx3241/override/classes/Cart.php index 6c081578fef23..f89a7ea288cd7 100644 --- a/tests/Resources/modules_tests/pscsx3241/override/classes/Cart.php +++ b/tests/Resources/modules_tests/pscsx3241/override/classes/Cart.php @@ -25,6 +25,8 @@ */ class Cart extends CartCore { + public const BOTH = 111; + public $delivery_option; /** @var bool Allow to seperate order in multiple package in order to recieve as soon as possible the available products */ diff --git a/tests/Resources/modules_tests/testconstantconflict/config.xml b/tests/Resources/modules_tests/testconstantconflict/config.xml new file mode 100644 index 0000000000000..9431b2ee05780 --- /dev/null +++ b/tests/Resources/modules_tests/testconstantconflict/config.xml @@ -0,0 +1,12 @@ + + + testconstantconflict + + + + + + 0 + 0 + + diff --git a/tests/Resources/modules_tests/testconstantconflict/override/classes/Cart.php b/tests/Resources/modules_tests/testconstantconflict/override/classes/Cart.php new file mode 100644 index 0000000000000..01de750924aa4 --- /dev/null +++ b/tests/Resources/modules_tests/testconstantconflict/override/classes/Cart.php @@ -0,0 +1,40 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ +class Cart extends CartCore +{ + /** + * this should trigger a constant override conflict + */ + public const BOTH = 111; + + /** + * this function override does not trigger any conflict + */ + public function isCarrierInRange($id_carrier, $id_zone) + { + return true; + } +} diff --git a/tests/Resources/modules_tests/testconstantconflict/testconstantconflict.php b/tests/Resources/modules_tests/testconstantconflict/testconstantconflict.php new file mode 100644 index 0000000000000..2d7c33db0b434 --- /dev/null +++ b/tests/Resources/modules_tests/testconstantconflict/testconstantconflict.php @@ -0,0 +1,43 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ +if (!defined('_PS_VERSION_')) { + exit; +} + +class testconstantconflict extends Module +{ + public function __construct() + { + $this->name = 'testconstantconflict'; + $this->tab = 'front_office_features'; + $this->version = 1.0; + $this->author = 'fake author'; + $this->need_instance = 0; + parent::__construct(); + $this->displayName = $this->l('constant conflict'); + $this->description = $this->l('A module to test constant override conflict'); + } +} diff --git a/tests/Resources/modules_tests/testpropertyconflict/config.xml b/tests/Resources/modules_tests/testpropertyconflict/config.xml new file mode 100644 index 0000000000000..41b4f73cd3c63 --- /dev/null +++ b/tests/Resources/modules_tests/testpropertyconflict/config.xml @@ -0,0 +1,12 @@ + + + testpropertyconflict + + + + + + 0 + 0 + + diff --git a/tests/Resources/modules_tests/testpropertyconflict/override/classes/Cart.php b/tests/Resources/modules_tests/testpropertyconflict/override/classes/Cart.php new file mode 100644 index 0000000000000..2a274aaddec99 --- /dev/null +++ b/tests/Resources/modules_tests/testpropertyconflict/override/classes/Cart.php @@ -0,0 +1,40 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ +class Cart extends CartCore +{ + /** + * this should trigger a property override conflict + */ + protected $_products = ['fake_value']; + + /** + * this function override does not trigger any conflict + */ + public function isCarrierInRange($id_carrier, $id_zone) + { + return true; + } +} diff --git a/tests/Resources/modules_tests/testpropertyconflict/testpropertyconflict.php b/tests/Resources/modules_tests/testpropertyconflict/testpropertyconflict.php new file mode 100644 index 0000000000000..c14fd7331e3cb --- /dev/null +++ b/tests/Resources/modules_tests/testpropertyconflict/testpropertyconflict.php @@ -0,0 +1,43 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ +if (!defined('_PS_VERSION_')) { + exit; +} + +class testpropertyconflict extends Module +{ + public function __construct() + { + $this->name = 'testpropertyconflict'; + $this->tab = 'front_office_features'; + $this->version = 1.0; + $this->author = 'fake author'; + $this->need_instance = 0; + parent::__construct(); + $this->displayName = $this->l('property conflict'); + $this->description = $this->l('A module to test property override conflict'); + } +} diff --git a/tests/Unit/Core/Module/ModuleOverrideCheckerTest.php b/tests/Unit/Core/Module/ModuleOverrideCheckerTest.php index cedc12661b73f..c2e8d580883c6 100644 --- a/tests/Unit/Core/Module/ModuleOverrideCheckerTest.php +++ b/tests/Unit/Core/Module/ModuleOverrideCheckerTest.php @@ -87,6 +87,14 @@ public function provideTestData(): array 'testtrickyconflict', true, ], + [ + 'testpropertyconflict', + true, + ], + [ + 'testconstantconflict', + true, + ], ]; } } From bc542970653999abc1d7d68c06ac8906bd78dda3 Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Fri, 13 Sep 2024 12:53:01 +0200 Subject: [PATCH 26/47] refactor method organization --- src/Core/Module/ModuleOverrideChecker.php | 50 ++++++++++++------- .../Addon/Module/ModuleManagerBuilderTest.php | 2 +- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/Core/Module/ModuleOverrideChecker.php b/src/Core/Module/ModuleOverrideChecker.php index 48e43a789dc1e..ac7f735c96ce9 100644 --- a/src/Core/Module/ModuleOverrideChecker.php +++ b/src/Core/Module/ModuleOverrideChecker.php @@ -74,13 +74,22 @@ public function hasOverrideConflict(string $moduleOverridePath): bool $fileList[] = $file->getRelativePathname(); } + + // module has overrides, let's check override files one by one foreach ($fileList as $file) { $moduleOverrideFile = $moduleOverridePath . DIRECTORY_SEPARATOR . $file; $existingOverrideFile = $this->psOverrideDir . $file; + $moduleOverrideContent = file_get_contents($moduleOverrideFile); + $existingOverrideContent = file_get_contents($existingOverrideFile); + if (file_exists($existingOverrideFile)) { - if ($this->hasConflictingMethod($moduleOverrideFile, $existingOverrideFile)) { + if ( + $this->hasConflictingMethod($moduleOverrideContent, $existingOverrideContent) + || $this->hasConflictingProperty($moduleOverrideContent, $existingOverrideContent) + || $this->hasConflictingConstant($moduleOverrideContent, $existingOverrideContent) + ) { $this->errors[] = $this->translator->trans( 'The override file %1$s conflicts with an existing override in %2$s.', [$moduleOverrideFile, $existingOverrideFile], @@ -98,23 +107,8 @@ public function getErrors(): array return $this->errors; } - /* - * Checks if a module override class has a method that is already overridden by another module - */ - private function hasConflictingMethod(string $moduleOverridePath, string $existingOverridePath): bool + private function hasConflictingProperty(string $moduleOverrideContent, string $existingOverrideContent): bool { - $moduleOverrideContent = file_get_contents($moduleOverridePath); - $existingOverrideContent = file_get_contents($existingOverridePath); - - $moduleMethods = $this->getClassMethodsFromContent($moduleOverrideContent); - $existingOverrideMethods = $this->getClassMethodsFromContent($existingOverrideContent); - - foreach ($moduleMethods as $method) { - if (in_array($method, $existingOverrideMethods)) { - return true; - } - } - $moduleOverrideProperties = $this->getClassPropertiesFromContent($moduleOverrideContent); $existingOverrideProperties = $this->getClassPropertiesFromContent($existingOverrideContent); @@ -124,6 +118,11 @@ private function hasConflictingMethod(string $moduleOverridePath, string $existi } } + return false; + } + + private function hasConflictingConstant(string $moduleOverrideContent, string $existingOverrideContent): bool + { $moduleOverrideConstants = $this->getClassConstantsFromContent($moduleOverrideContent); $existingOverrideConstants = $this->getClassConstantsFromContent($existingOverrideContent); @@ -136,6 +135,23 @@ private function hasConflictingMethod(string $moduleOverridePath, string $existi return false; } + /* + * Checks if a module override class has a method that is already overridden by another module + */ + private function hasConflictingMethod(string $moduleOverrideContent, string $existingOverrideContent): bool + { + $moduleMethods = $this->getClassMethodsFromContent($moduleOverrideContent); + $existingOverrideMethods = $this->getClassMethodsFromContent($existingOverrideContent); + + foreach ($moduleMethods as $method) { + if (in_array($method, $existingOverrideMethods)) { + return true; + } + } + + return false; + } + /* * This function parses php file content and gets a list of methods from its content. */ diff --git a/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php b/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php index 3248472723e8f..c95c0f6d65aa9 100644 --- a/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php +++ b/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php @@ -213,7 +213,7 @@ public function testOverrideConflictAtInstall(): void * adds several spaces in function definition (it must still be detected as a conflicting method) */ foreach ($this->conflictModuleNames as $name) { - $this->assertFalse($this->moduleManager->install($name), 'module test on ' . $name . ' failed'); + $this->assertFalse($this->moduleManager->install($name), 'override conflict test on module ' . $name . ' failed'); } } From 29d85195c1548cfa7b98663a0ad7b66121999464 Mon Sep 17 00:00:00 2001 From: Codencode Date: Fri, 13 Sep 2024 13:36:44 +0200 Subject: [PATCH 27/47] Update Cart.php --- classes/Cart.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/classes/Cart.php b/classes/Cart.php index 5d4e73babfcc2..29b363df07ac2 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -2002,14 +2002,18 @@ protected function _deleteCustomization($id_customization, $id_product, $id_prod WHERE `id_customization` = ' . (int) $id_customization); if ($customization) { - $cust_data = Db::getInstance()->getRow('SELECT * + $cust_datas = Db::getInstance()->executeS('SELECT * FROM `' . _DB_PREFIX_ . 'customized_data` - WHERE `id_customization` = ' . (int) $id_customization); + WHERE `id_customization` = ' . (int) $id_customization . ' + AND `type` = ' . (int) Product::CUSTOMIZE_FILE + ); - // Delete customization picture if necessary - if (isset($cust_data['type']) && $cust_data['type'] == Product::CUSTOMIZE_FILE) { - $result &= file_exists(_PS_UPLOAD_DIR_ . $cust_data['value']) ? @unlink(_PS_UPLOAD_DIR_ . $cust_data['value']) : true; - $result &= file_exists(_PS_UPLOAD_DIR_ . $cust_data['value'] . '_small') ? @unlink(_PS_UPLOAD_DIR_ . $cust_data['value'] . '_small') : true; + // Delete customization pictures if necessary + if ($cust_datas) { + foreach ($cust_datas as $cust_data) { + $result &= file_exists(_PS_UPLOAD_DIR_ . $cust_data['value']) ? @unlink(_PS_UPLOAD_DIR_ . $cust_data['value']) : true; + $result &= file_exists(_PS_UPLOAD_DIR_ . $cust_data['value'] . '_small') ? @unlink(_PS_UPLOAD_DIR_ . $cust_data['value'] . '_small') : true; + } } $result &= Db::getInstance()->execute( From 73707a72b0eddbfd3167b447ddd5ae9d58d3cdf4 Mon Sep 17 00:00:00 2001 From: Codencode Date: Fri, 13 Sep 2024 15:50:02 +0200 Subject: [PATCH 28/47] Update classes/Cart.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Daniel Hlaváček --- classes/Cart.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/classes/Cart.php b/classes/Cart.php index 29b363df07ac2..a75fd830119bc 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -2002,6 +2002,10 @@ protected function _deleteCustomization($id_customization, $id_product, $id_prod WHERE `id_customization` = ' . (int) $id_customization); if ($customization) { + /* + * Now we will select all customized files that could be connected to this customization. + * One customization can have multiple fields for files, we need to delete all of them. + */ $cust_datas = Db::getInstance()->executeS('SELECT * FROM `' . _DB_PREFIX_ . 'customized_data` WHERE `id_customization` = ' . (int) $id_customization . ' From 1b7770365d6cbeae4ece7eb60c95c4f7155efd96 Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Fri, 13 Sep 2024 15:28:32 +0200 Subject: [PATCH 29/47] replace token detection with regex --- src/Core/Module/ModuleOverrideChecker.php | 93 ++------- .../Addon/Module/ModuleManagerBuilderTest.php | 26 +-- .../modules_tests/override/classes/Cart.php | 2 - .../override_for_unit_test/classes/Cart.php | 197 ++++++++++++++++++ .../pscsx3241/override/classes/Cart.php | 2 - .../Core/Module/ModuleOverrideCheckerTest.php | 2 +- 6 files changed, 224 insertions(+), 98 deletions(-) create mode 100644 tests/Resources/modules_tests/override_for_unit_test/classes/Cart.php diff --git a/src/Core/Module/ModuleOverrideChecker.php b/src/Core/Module/ModuleOverrideChecker.php index ac7f735c96ce9..992b39c66939b 100644 --- a/src/Core/Module/ModuleOverrideChecker.php +++ b/src/Core/Module/ModuleOverrideChecker.php @@ -74,17 +74,14 @@ public function hasOverrideConflict(string $moduleOverridePath): bool $fileList[] = $file->getRelativePathname(); } - - // module has overrides, let's check override files one by one foreach ($fileList as $file) { $moduleOverrideFile = $moduleOverridePath . DIRECTORY_SEPARATOR . $file; $existingOverrideFile = $this->psOverrideDir . $file; - $moduleOverrideContent = file_get_contents($moduleOverrideFile); - $existingOverrideContent = file_get_contents($existingOverrideFile); - - if (file_exists($existingOverrideFile)) { + if (file_exists($existingOverrideFile) && file_exists($moduleOverrideFile)) { + $moduleOverrideContent = file_get_contents($moduleOverrideFile); + $existingOverrideContent = file_get_contents($existingOverrideFile); if ( $this->hasConflictingMethod($moduleOverrideContent, $existingOverrideContent) || $this->hasConflictingProperty($moduleOverrideContent, $existingOverrideContent) @@ -157,95 +154,43 @@ private function hasConflictingMethod(string $moduleOverrideContent, string $exi */ private function getClassMethodsFromContent(string $content): array { - // Get the list of tokens, see https://www.php.net/manual/en/function.token-get-all.php - $tokens = token_get_all($content); + $methodPattern = '/(public|private|protected)\s+function\s+(\w+)/'; + $methods = []; - foreach ($tokens as $index => $token) { - $methodName = null; - // filter method definitions - if (is_array($token) && $token[0] === T_FUNCTION) { - // This loop is necessary in case some additional spaces exist before the function name - for ($i = $index + 1; $i < count($tokens); ++$i) { - if (is_array($tokens[$i]) && $tokens[$i][0] === T_STRING) { - $methodName = $tokens[$i][1]; - break; - } - } - // Collect method name - if ($methodName) { - $methods[] = $methodName; // Save method name - } - } + if (preg_match_all($methodPattern, $content, $matches)) { + $methods = $matches[2]; } return $methods; } /* - * This function parses php file content and gets a list of properties from its content. - */ + * This function parses php file content and gets a list of properties from its content. + */ private function getClassPropertiesFromContent(string $content): array { - // Get the list of tokens, see https://www.php.net/manual/en/function.token-get-all.php - $tokens = token_get_all($content); + $propertyPattern = '/(public|private|protected)\s+\$(\w+)/'; $properties = []; - $inClass = false; - $inFunction = false; - - foreach ($tokens as $index => $token) { - // we only want variables that are inside a class AND outside a function - if (is_array($token) && $token[0] === T_CLASS) { - $inClass = true; - $inFunction = false; - } - - // check that we are in the beginning of a function - if (is_array($token) && $token[0] === T_FUNCTION) { - $inFunction = true; - } - - // check that this is the end of a function - if ($token === '}') { - $inFunction = false; - } - // Property name is gathered if we are inside a class and outside a function - if ($inClass && !$inFunction && is_array($token) && $token[0] === T_VARIABLE) { - $propertyName = $token[1]; // Token contains the variable name as the second element - $properties[] = $propertyName; // Add to the properties array - } + if (preg_match_all($propertyPattern, $content, $matches)) { + $properties = $matches[2]; } - return $properties; // Return the list of property names + return $properties; } /* - * This function parses php file content and gets a list of constants from its content. - */ + * This function parses php file content and gets a list of properties from its content. + */ private function getClassConstantsFromContent(string $content): array { - // Get the list of tokens, see https://www.php.net/manual/en/function.token-get-all.php - $tokens = token_get_all($content); - $constants = []; - $inClass = false; + $constantPattern = '/const\s+(\w+)/'; - foreach ($tokens as $index => $token) { - // check that we are at the beginning of a class - if (is_array($token) && $token[0] === T_CLASS) { - $inClass = true; - } + $constants = []; - // Check for constant declarations inside the class - if ($inClass && is_array($token) && $token[0] === T_CONST) { - // Loop ahead to find the constant name - for ($i = $index + 1; $i < count($tokens); ++$i) { - if (is_array($tokens[$i]) && $tokens[$i][0] === T_STRING) { - $constants[] = $tokens[$i][1]; // Save constant name - break; - } - } - } + if (preg_match_all($constantPattern, $content, $matches)) { + $constants = $matches[1]; } return $constants; diff --git a/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php b/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php index c95c0f6d65aa9..ad7f1259d2485 100644 --- a/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php +++ b/tests/Integration/Core/Addon/Module/ModuleManagerBuilderTest.php @@ -79,9 +79,6 @@ public static function setUpBeforeClass(): void if (is_dir($dirResources . '/Resources/modules_tests/testtrickyconflict')) { Tools::recurseCopy($dirResources . '/Resources/modules_tests/testtrickyconflict', _PS_MODULE_DIR_ . '/testtrickyconflict'); } - if (is_dir($dirResources . '/Resources/modules_tests/testconstantconflict')) { - Tools::recurseCopy($dirResources . '/Resources/modules_tests/testconstantconflict', _PS_MODULE_DIR_ . '/testconstantconflict'); - } if (is_dir($dirResources . '/Resources/modules_tests/testpropertyconflict')) { Tools::recurseCopy($dirResources . '/Resources/modules_tests/testpropertyconflict', _PS_MODULE_DIR_ . '/testpropertyconflict'); } @@ -107,9 +104,6 @@ public static function tearDownAfterClass(): void if (Module::isInstalled('testpropertyconflict')) { Module::getInstanceByName('testpropertyconflict')->uninstall(); } - if (Module::isInstalled('testconstantconflict')) { - Module::getInstanceByName('testconstantconflict')->uninstall(); - } // Remove modules if (is_dir(_PS_MODULE_DIR_ . '/pscsx3241')) { @@ -127,9 +121,6 @@ public static function tearDownAfterClass(): void if (is_dir(_PS_MODULE_DIR_ . '/testpropertyconflict')) { Tools::deleteDirectory(_PS_MODULE_DIR_ . '/testpropertyconflict'); } - if (is_dir(_PS_MODULE_DIR_ . '/testconstantconflict')) { - Tools::deleteDirectory(_PS_MODULE_DIR_ . '/testconstantconflict'); - } // Remove overrides @unlink(_PS_ROOT_DIR_ . '/override/controllers/admin/AdminProductsController.php'); @@ -153,7 +144,7 @@ protected function setUp(): void 'pscsx3241', ]; - $this->conflictModuleNames = ['testbasicconflict', 'testtrickyconflict', 'testpropertyconflict', 'testconstantconflict']; + $this->conflictModuleNames = ['testbasicconflict', 'testtrickyconflict', 'testpropertyconflict']; } public function testInstall(): void @@ -172,20 +163,17 @@ public function testInstall(): void */ $resource_path = dirname(__DIR__, 4) . '/Resources/modules_tests/override/'; - $actual_override_cart = file_get_contents(_PS_ROOT_DIR_ . '/override/classes/Cart.php'); - $expected_override_cart = file_get_contents($resource_path . '/classes/Cart.php'); - - $actual_override_cart = $this->cleanup($actual_override_cart); - $expected_override_cart = $this->cleanup($expected_override_cart); + $actual_override_cart = $this->cleanup(file_get_contents(_PS_ROOT_DIR_ . '/override/classes/Cart.php')); + $expected_override_cart = $this->cleanup(file_get_contents($resource_path . 'classes/Cart.php')); $this->assertEquals($expected_override_cart, $actual_override_cart); - $actual_override_admin_product = file_get_contents(_PS_ROOT_DIR_ . '/override/controllers/admin/AdminProductsController.php'); - $expected_override_admin_product = file_get_contents($resource_path . '/controllers/admin/AdminProductsController.php'); + $actual_override_admin_product = $this->cleanup(file_get_contents(_PS_ROOT_DIR_ . '/override/controllers/admin/AdminProductsController.php')); + $expected_override_admin_product = $this->cleanup(file_get_contents($resource_path . '/controllers/admin/AdminProductsController.php')); $this->assertEquals( - $this->cleanup($expected_override_admin_product), - $this->cleanup($actual_override_admin_product), + $actual_override_admin_product, + $expected_override_admin_product, 'AdminProductsController.php file different' ); diff --git a/tests/Resources/modules_tests/override/classes/Cart.php b/tests/Resources/modules_tests/override/classes/Cart.php index a22df0fd9cc23..c92a8686c1f3c 100644 --- a/tests/Resources/modules_tests/override/classes/Cart.php +++ b/tests/Resources/modules_tests/override/classes/Cart.php @@ -2,8 +2,6 @@ class Cart extends CartCore { - public const BOTH = 999; - /* * module: pscsx32412 * date: 2018-12-26 14:14:05 diff --git a/tests/Resources/modules_tests/override_for_unit_test/classes/Cart.php b/tests/Resources/modules_tests/override_for_unit_test/classes/Cart.php new file mode 100644 index 0000000000000..a22df0fd9cc23 --- /dev/null +++ b/tests/Resources/modules_tests/override_for_unit_test/classes/Cart.php @@ -0,0 +1,197 @@ +id_address_invoice) || $this->id_address_invoice == $id_address) { + $to_update = true; + $this->id_address_invoice = $id_address_new; + } + if (!isset($this->id_address_delivery) || $this->id_address_delivery == $id_address) { + $to_update = true; + $this->id_address_delivery = $id_address_new; + } + if ($to_update) { + $this->update(); + } + $sql = 'UPDATE `' . _DB_PREFIX_ . 'cart_product` + SET `id_address_delivery` = ' . (int) $id_address_new . ' + WHERE `id_cart` = ' . (int) $this->id . ' + AND `id_address_delivery` = ' . (int) $id_address; + Db::getInstance()->execute($sql); + $sql = 'UPDATE `' . _DB_PREFIX_ . 'customization` + SET `id_address_delivery` = ' . (int) $id_address_new . ' + WHERE `id_cart` = ' . (int) $this->id . ' + AND `id_address_delivery` = ' . (int) $id_address; + Db::getInstance()->execute($sql); + } + + /* + * module: pscsx32412 + * date: 2018-12-26 14:14:05 + * version: 1 + */ + public function delete() + { + if ($this->OrderExists()) { //NOT delete a cart which is associated with an order + return false; + } + $uploaded_files = Db::getInstance()->executeS( + ' + SELECT cd.`value` + FROM `' . _DB_PREFIX_ . 'customized_data` cd + INNER JOIN `' . _DB_PREFIX_ . 'customization` c ON (cd.`id_customization`= c.`id_customization`) + WHERE cd.`type`= 0 AND c.`id_cart`=' . (int) $this->id + ); + foreach ($uploaded_files as $must_unlink) { + unlink(_PS_UPLOAD_DIR_ . $must_unlink['value'] . '_small'); + unlink(_PS_UPLOAD_DIR_ . $must_unlink['value']); + } + Db::getInstance()->execute( + ' + DELETE FROM `' . _DB_PREFIX_ . 'customized_data` + WHERE `id_customization` IN ( + SELECT `id_customization` + FROM `' . _DB_PREFIX_ . 'customization` + WHERE `id_cart`=' . (int) $this->id . ' + )' + ); + Db::getInstance()->execute( + ' + DELETE FROM `' . _DB_PREFIX_ . 'customization` + WHERE `id_cart` = ' . (int) $this->id + ); + if (!Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'cart_rule` WHERE `id_cart` = ' . (int) $this->id) + || !Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'cart_product` WHERE `id_cart` = ' . (int) $this->id)) { + return false; + } + + return parent::delete(); + } + + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + public $delivery_option; + + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + public $allow_seperated_package = false; + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + protected static $_nbProducts = []; + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + protected static $_isVirtualCart = []; + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + protected $_products = null; + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + protected static $_totalWeight = []; + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + protected $_taxCalculationMethod = PS_TAX_EXC; + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + protected static $_carriers = null; + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + protected static $_taxes_rate = null; + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + protected static $_attributesLists = []; + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + protected static $_customer = null; + + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + public function deleteProduct($id_product, $id_product_attribute = null, $id_customization = null, $id_address_delivery = 0) + { + $result = Hook::exec( + 'ppbsDeleteCartProduct', + [ + 'id_product' => $id_product, + 'id_product_attribute' => $id_product_attribute, + 'id_customization' => $id_customization, + 'id_address_delivery' => $id_address_delivery, + ], + null, + false + ); + if ($result == false) { + parent::deleteProduct($id_product, $id_product_attribute = null, $id_customization = null, $id_address_delivery = 0); + } + } + + /* + * module: pscsx3241 + * date: 2018-12-26 14:14:06 + * version: 1 + */ + protected function _getProducts($refresh = false, $id_product = false, $id_country = null) + { + $products = parent::getProducts($refresh, $id_product, $id_country); + if (_PS_VERSION_ >= 1.6) { + $params = Hook::exec('ppbsGetProducts', ['products' => $products], null, true); + if (isset($params['productpricebysize']['products'])) { + return $params['productpricebysize']['products']; + } else { + return $products; + } + } else { + $params = Hook::exec('ppbsGetProducts', ['products' => $products], null); + $params = json_decode($params, true); + if (isset($params['products'])) { + return $params['products']; + } else { + return $products; + } + } + } +} diff --git a/tests/Resources/modules_tests/pscsx3241/override/classes/Cart.php b/tests/Resources/modules_tests/pscsx3241/override/classes/Cart.php index f89a7ea288cd7..6c081578fef23 100644 --- a/tests/Resources/modules_tests/pscsx3241/override/classes/Cart.php +++ b/tests/Resources/modules_tests/pscsx3241/override/classes/Cart.php @@ -25,8 +25,6 @@ */ class Cart extends CartCore { - public const BOTH = 111; - public $delivery_option; /** @var bool Allow to seperate order in multiple package in order to recieve as soon as possible the available products */ diff --git a/tests/Unit/Core/Module/ModuleOverrideCheckerTest.php b/tests/Unit/Core/Module/ModuleOverrideCheckerTest.php index c2e8d580883c6..81e7b98eb855d 100644 --- a/tests/Unit/Core/Module/ModuleOverrideCheckerTest.php +++ b/tests/Unit/Core/Module/ModuleOverrideCheckerTest.php @@ -44,7 +44,7 @@ class ModuleOverrideCheckerTest extends TestCase protected function setUp(): void { - $this->psOverrideDir = dirname(__DIR__, 3) . '/Resources/modules_tests/override/'; + $this->psOverrideDir = dirname(__DIR__, 3) . '/Resources/modules_tests/override_for_unit_test/'; $this->modulesTestsDir = dirname(__DIR__, 3) . '/Resources/modules_tests'; } From 778c683388b9aeda56b72254bb143c948314a7d8 Mon Sep 17 00:00:00 2001 From: Codencode Date: Sat, 14 Sep 2024 11:30:39 +0200 Subject: [PATCH 30/47] Added management of the 'addedByModule' field in the 'CustomizationField' object In the ProductFormDataProvider::extractCustomizationsData() method, I added the 'addedByModule' key to the $fields array. In the CustomizationFieldsCommandsBuilder::buildCustomizationFields() method, I added the 'added_by_module' key to the $customizationFields array. --- .../Product/CustomizationFieldsCommandsBuilder.php | 2 +- .../IdentifiableObject/DataProvider/ProductFormDataProvider.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Core/Form/IdentifiableObject/CommandBuilder/Product/CustomizationFieldsCommandsBuilder.php b/src/Core/Form/IdentifiableObject/CommandBuilder/Product/CustomizationFieldsCommandsBuilder.php index 5de266048478c..091ce84c86b48 100644 --- a/src/Core/Form/IdentifiableObject/CommandBuilder/Product/CustomizationFieldsCommandsBuilder.php +++ b/src/Core/Form/IdentifiableObject/CommandBuilder/Product/CustomizationFieldsCommandsBuilder.php @@ -74,7 +74,7 @@ private function buildCustomizationFields(array $customizationsFormData): array 'type' => (int) $customization['type'], 'localized_names' => $customization['name'], 'is_required' => (bool) $customization['required'], - 'added_by_module' => false, + 'added_by_module' => isset($customization['addedByModule']) ? (bool) $customization['addedByModule'] : false, 'id' => isset($customization['id']) ? (int) $customization['id'] : null, ]; } diff --git a/src/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProvider.php b/src/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProvider.php index a228400cf156c..a08f6c1c2da8f 100644 --- a/src/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProvider.php +++ b/src/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProvider.php @@ -616,6 +616,7 @@ private function extractCustomizationsData(ProductForEditing $productForEditing, 'name' => $customizationField->getLocalizedNames(), 'type' => $customizationField->getType(), 'required' => $customizationField->isRequired(), + 'addedByModule' => $customizationField->isAddedByModule() ]; } From e5e1761314070bdbcb4e051fc493276e90097408 Mon Sep 17 00:00:00 2001 From: Codencode Date: Sat, 14 Sep 2024 12:01:53 +0200 Subject: [PATCH 31/47] Update UnitTest --- .../DataProvider/ProductFormDataProviderTest.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/Unit/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProviderTest.php b/tests/Unit/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProviderTest.php index d578fc3796045..d8ff22595fb82 100644 --- a/tests/Unit/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProviderTest.php +++ b/tests/Unit/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProviderTest.php @@ -1008,12 +1008,14 @@ private function getDatasetsForCustomizations(): array 'name' => $localizedNames, 'type' => 1, 'required' => false, + 'addedByModule' => false, ], [ 'id' => 2, 'name' => $localizedNames, 'type' => 0, 'required' => true, + 'addedByModule' => false, ], ], ]; @@ -1024,12 +1026,14 @@ private function getDatasetsForCustomizations(): array 'name' => $localizedNames, 'type' => CustomizationFieldType::TYPE_TEXT, 'required' => false, + 'addedByModule' => false, ], [ 'id' => 2, 'name' => $localizedNames, 'type' => CustomizationFieldType::TYPE_FILE, 'required' => true, + 'addedByModule' => false, ], ]; From 5649df11c357b6c2b98d75b0d133c8b3a34f28b1 Mon Sep 17 00:00:00 2001 From: Codencode Date: Sat, 14 Sep 2024 19:01:43 +0200 Subject: [PATCH 32/47] Update ProductFormDataProvider.php --- .../IdentifiableObject/DataProvider/ProductFormDataProvider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProvider.php b/src/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProvider.php index a08f6c1c2da8f..aa6e6d22c5b8b 100644 --- a/src/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProvider.php +++ b/src/Core/Form/IdentifiableObject/DataProvider/ProductFormDataProvider.php @@ -616,7 +616,7 @@ private function extractCustomizationsData(ProductForEditing $productForEditing, 'name' => $customizationField->getLocalizedNames(), 'type' => $customizationField->getType(), 'required' => $customizationField->isRequired(), - 'addedByModule' => $customizationField->isAddedByModule() + 'addedByModule' => $customizationField->isAddedByModule(), ]; } From 87cc46fd5b9ad851d67f2c101aacf5c6a557e457 Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Mon, 16 Sep 2024 10:36:49 +0200 Subject: [PATCH 33/47] update composer.json with phpstan baseline command --- composer.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index d759708315b46..e8ad146e7fc3e 100644 --- a/composer.json +++ b/composer.json @@ -233,8 +233,8 @@ ], "php-cs-fixer": "@php ./vendor/bin/php-cs-fixer fix --path-mode=intersection", "php-cs-fixer:dry": "@php ./vendor/bin/php-cs-fixer fix --dry-run --diff --path-mode=intersection", - "phpstan": "@php ./vendor/bin/phpstan analyze -c phpstan.neon.dist", - "phpstan:generate-baseline": "@php ./vendor/bin/phpstan analyze -c phpstan.neon.dist", + "phpstan": "@php -d memory_limit=-1 ./vendor/bin/phpstan analyze -c phpstan.neon.dist", + "phpstan:generate-baseline": "@php -d memory_limit=-1 ./vendor/bin/phpstan analyze -c phpstan.neon.dist --generate-baseline", "restore-test-db": [ "@php ./tests/bin/restore-test-db.php" ], @@ -257,6 +257,7 @@ "php-cs-fixer": "Launch php cs fixer, fixes will be applied automatically", "php-cs-fixer:dry": "Launch php cs fixer in dry mode: fixes will not be applied automatically", "phpstan": "Launch a phpstan analyzis", + "phpstan:generate-baseline": "Launch a phpstan analyzis and generate a baseline file", "restore-test-db": "Restore the whole DB in a single dump", "restore-test-tables": "Restore all tables one by one, only when they have been modified", "test-all": "Launch all PHPUnit test suites" From 6d6d9fbcaecf3a9ed37f91bb093374cb801ca3c8 Mon Sep 17 00:00:00 2001 From: Hlavtox Date: Tue, 17 Sep 2024 13:07:31 +0200 Subject: [PATCH 34/47] Remove redirection on cms exception --- .../Improve/Design/CmsPageController.php | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/PrestaShopBundle/Controller/Admin/Improve/Design/CmsPageController.php b/src/PrestaShopBundle/Controller/Admin/Improve/Design/CmsPageController.php index 3f20d56b365aa..30a0e9e045e46 100644 --- a/src/PrestaShopBundle/Controller/Admin/Improve/Design/CmsPageController.php +++ b/src/PrestaShopBundle/Controller/Admin/Improve/Design/CmsPageController.php @@ -93,24 +93,7 @@ class CmsPageController extends FrameworkBundleAdminController public function indexAction(CmsPageCategoryFilters $categoryFilters, CmsPageFilters $cmsFilters, Request $request) { $cmsCategoryParentId = (int) $categoryFilters->getFilters()['id_cms_category_parent']; - $viewData = []; - - try { - $viewData = $this - ->get('prestashop.core.cms_page.data_provider.cms_page_view') - ->getView($cmsCategoryParentId) - ; - } catch (Exception $exception) { - $this->addFlash( - 'error', - $this->getErrorMessageForException($exception, $this->getErrorMessages()) - ); - - if ($exception instanceof CmsPageCategoryNotFoundException) { - return $this->redirectToRoute('admin_cms_pages_index'); - } - } - + $viewData = $this->get('prestashop.core.cms_page.data_provider.cms_page_view')->getView($cmsCategoryParentId); $cmsCategoryGridFactory = $this->get('prestashop.core.grid.factory.cms_page_category'); $cmsCategoryGrid = $cmsCategoryGridFactory->getGrid($categoryFilters); From 4f566e695ea7a256da1311099ee597cc1cc8c629 Mon Sep 17 00:00:00 2001 From: Dominik Shaim Ulrich Date: Tue, 17 Sep 2024 14:03:41 +0200 Subject: [PATCH 35/47] Update Image.php --- classes/Image.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/classes/Image.php b/classes/Image.php index 1103dbfd38435..d4fbd6d7b9353 100644 --- a/classes/Image.php +++ b/classes/Image.php @@ -665,6 +665,15 @@ public function deleteImage($forceDelete = false) } } + // We need to delete old thumbnails (if exists) from variant images as well + $old_thumbnails = glob(_PS_TMP_IMG_DIR_ . 'product_mini_*.' . $this->image_format); + if (!empty($old_thumbnails)) { + foreach ($old_thumbnails as $file) { + // we don't care, if it exists, because glob will handle this + @unlink($file); + } + } + // Can we delete the image folder? if (is_dir($this->image_dir . $this->getImgFolder())) { $deleteFolder = true; From 44c1fca8888e0d93bf551a0148d4f87da66fe9b7 Mon Sep 17 00:00:00 2001 From: Dominik Shaim Ulrich Date: Tue, 17 Sep 2024 14:08:32 +0200 Subject: [PATCH 36/47] Update Image.php --- classes/Image.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Image.php b/classes/Image.php index d4fbd6d7b9353..791f545805517 100644 --- a/classes/Image.php +++ b/classes/Image.php @@ -666,7 +666,7 @@ public function deleteImage($forceDelete = false) } // We need to delete old thumbnails (if exists) from variant images as well - $old_thumbnails = glob(_PS_TMP_IMG_DIR_ . 'product_mini_*.' . $this->image_format); + $old_thumbnails = glob(_PS_TMP_IMG_DIR_ . 'product_mini_' . $this->id_product . '_*.' . $this->image_format); if (!empty($old_thumbnails)) { foreach ($old_thumbnails as $file) { // we don't care, if it exists, because glob will handle this From 316410e110eff906fa87a9b8415e39570af9d53b Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Wed, 18 Sep 2024 15:41:52 +0200 Subject: [PATCH 37/47] fix filepath --- controllers/front/UploadController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/front/UploadController.php b/controllers/front/UploadController.php index 2a79270c7333f..9caac14d07c8a 100644 --- a/controllers/front/UploadController.php +++ b/controllers/front/UploadController.php @@ -75,6 +75,6 @@ public function postProcess() private function getPath(): string { - return _PS_UPLOAD_DIR_ . $this->filename; + return _PS_UPLOAD_DIR_ . basename($this->filename); } } From d91fc990d8efc9cf70f9c872aa1b11326db01626 Mon Sep 17 00:00:00 2001 From: matthieu-rolland Date: Thu, 19 Sep 2024 12:04:58 +0000 Subject: [PATCH 38/47] Update default catalog 8.2.x --- translations/default/AdminActions.xlf | 645 ++++--- .../default/AdminAdvparametersFeature.xlf | 1514 ++++++++--------- .../default/AdminAdvparametersHelp.xlf | 125 +- .../AdminAdvparametersNotification.xlf | 518 +++--- translations/default/AdminCatalogFeature.xlf | 821 +++++---- translations/default/AdminCatalogHelp.xlf | 117 +- .../default/AdminCatalogNotification.xlf | 158 +- translations/default/AdminDesignHelp.xlf | 3 +- .../default/AdminDesignNotification.xlf | 16 +- translations/default/AdminGlobal.xlf | 1162 ++++++------- .../default/AdminInternationalFeature.xlf | 319 ++-- .../default/AdminInternationalHelp.xlf | 122 +- .../AdminInternationalNotification.xlf | 108 +- translations/default/AdminModulesFeature.xlf | 58 +- .../default/AdminModulesNotification.xlf | 139 +- .../default/AdminNavigationHeader.xlf | 18 +- translations/default/AdminNavigationMenu.xlf | 332 ++-- .../default/AdminNavigationNotification.xlf | 36 +- .../default/AdminNotificationsError.xlf | 762 ++++----- .../default/AdminNotificationsInfo.xlf | 42 +- .../default/AdminNotificationsSuccess.xlf | 104 +- .../default/AdminNotificationsWarning.xlf | 60 +- .../default/AdminOrderscustomersFeature.xlf | 265 ++- .../AdminOrderscustomersNotification.xlf | 112 +- .../default/AdminPaymentNotification.xlf | 6 +- translations/default/AdminShippingFeature.xlf | 54 +- .../default/AdminShopparametersFeature.xlf | 289 ++-- .../default/AdminShopparametersHelp.xlf | 48 +- .../AdminShopparametersNotification.xlf | 4 +- translations/default/EmailsBody.xlf | 482 +++--- translations/default/EmailsSubject.xlf | 34 +- translations/default/Install.xlf | 200 +-- .../default/ModulesBlockreassuranceAdmin.xlf | 34 +- .../default/ModulesContactinfoShop.xlf | 8 +- .../default/ModulesEmailsubscriptionShop.xlf | 2 +- .../default/ModulesFacetedsearchAdmin.xlf | 162 +- .../default/ModulesFacetedsearchShop.xlf | 34 +- translations/default/ModulesLinklistAdmin.xlf | 10 +- .../default/ModulesProductcommentsAdmin.xlf | 38 +- .../default/ModulesProductcommentsShop.xlf | 10 +- translations/default/ShopFormsHelp.xlf | 6 +- translations/default/ShopFormsLabels.xlf | 18 +- .../default/ShopNotificationsError.xlf | 33 +- .../default/ShopNotificationsSuccess.xlf | 18 +- .../default/ShopNotificationsWarning.xlf | 4 +- translations/default/ShopPdf.xlf | 174 +- translations/default/ShopThemeActions.xlf | 150 +- translations/default/ShopThemeCatalog.xlf | 182 +- translations/default/ShopThemeCheckout.xlf | 44 +- .../default/ShopThemeCustomeraccount.xlf | 32 +- translations/default/ShopThemeGlobal.xlf | 120 +- translations/default/messages.xlf | 80 +- 52 files changed, 4750 insertions(+), 5082 deletions(-) diff --git a/translations/default/AdminActions.xlf b/translations/default/AdminActions.xlf index 8e36c717c9f64..6dbbe798ca176 100644 --- a/translations/default/AdminActions.xlf +++ b/translations/default/AdminActions.xlf @@ -7,11 +7,6 @@ Uninstall Line: 583 - - View - View - Line: 575 - @@ -23,6 +18,15 @@ + + + + Save and stay + Save and stay + Line: 54 + + + @@ -50,12 +54,31 @@ - + - - Remove - Remove - Line: 49 + + Select all + Select all + Line: 37 + + + Unselect all + Unselect all + Line: 42 + + + Display + Display + Line: 63 + + + + + + + View + View + Line: 85 @@ -91,15 +114,6 @@ - - - - Search - Search - Line: 92 - - - @@ -109,31 +123,12 @@ - - - - Preview - Preview - Line: 77 - - - - + - - Select all - Select all - Line: 37 - - - Unselect all - Unselect all - Line: 42 - - - Display - Display - Line: 63 + + Remove + Remove + Line: 51 @@ -146,15 +141,6 @@ - - - - Save and stay - Save and stay - Line: 144 - - - @@ -187,30 +173,53 @@ - + + + + Search + Search + Line: 78 + + + + Add current page to Quick Access Add current page to Quick Access - Line: 64 + Line: 68 - + + + + Choose language: + Choose language: + Line: 67 + + + + Close Close - Line: 34 + Line: 40 - + - - Choose language: - Choose language: - Line: 67 + + Install + Install + Line: 4391 + + + Edit: %s + Edit: %s + Line: 1647 @@ -231,20 +240,20 @@ Find a category Line: 155 - - - - Collapse all Collapse all - Line: 127 + Line: 151 Expand all Expand all - Line: 133 + Line: 152 + + + + Check all Check all @@ -266,13 +275,22 @@ - + Delete selected items? Delete selected items? - Line: 54 + Line: 48 + + + Delete selected + Delete selected + Line: 48 + + + + Add new menu Add new menu @@ -283,6 +301,16 @@ Show or hide menu. Line: 187 + + Enable selection + Enable selection + Line: 314 + + + Disable selection + Disable selection + Line: 318 + @@ -294,17 +322,17 @@ - + Configure Configure - Line: 31 + Line: 36 Refresh Refresh - Line: 35 + Line: 39 @@ -358,20 +386,6 @@ - - - - Edit - Edit - Line: 79 - - - Delete - Delete - Line: 88 - - - @@ -383,6 +397,16 @@ + + Edit + Edit + Line: 56 + + + Delete + Delete + Line: 61 + Add new Add new @@ -436,6 +460,20 @@ + + + + Search ID + Search ID + Line: 187 + + + Search name + Search name + Line: 196 + + + @@ -462,34 +500,6 @@ Search zones Line: 189 - - Search ISO code - Search ISO code - Line: 169 - - - - - - - Search order ID - Search order ID - Line: 142 - - - - - - - Enable selection - Enable selection - Line: 264 - - - Disable selection - Disable selection - Line: 274 - @@ -504,15 +514,39 @@ Search employee Line: 280 + + Search message + Search message + Line: 290 + + + + + Search email Search email - Line: 244 + Line: 198 + + + Search first name + Search first name + Line: 178 + + + Search last name + Search last name + Line: 188 + + Search ISO code + Search ISO code + Line: 209 + Search code Search code @@ -527,16 +561,6 @@ - - Search first name - Search first name - Line: 180 - - - Search last name - Search last name - Line: 189 - Search post code Search post code @@ -549,13 +573,35 @@ - + + + + Search order ID + Search order ID + Line: 141 + + + + Search reference Search reference - Line: 308 + Line: 144 + + + + + + + Search description + Search description + Line: 149 + + + + Search total Search total @@ -566,30 +612,6 @@ Search payment Line: 339 - - Search company - Search company - Line: 387 - - - - - - - Search ID - Search ID - Line: 134 - - - Search name - Search name - Line: 143 - - - Search message - Search message - Line: 152 - @@ -601,6 +623,20 @@ + + + + Search company + Search company + Line: 227 + + + Search customer + Search customer + Line: 217 + + + @@ -793,15 +829,20 @@ Delete selection for associated stores Line: 706 + + Delete from all stores + Delete from all stores + Line: 423 + + + Duplicate for current store + Duplicate for current store + Line: 339 + - - Search description - Search description - Line: 157 - Search key Search key @@ -837,15 +878,6 @@ - - - - Install - Install - Line: 79 - - - @@ -855,21 +887,12 @@ - - - - Delete selected - Delete selected - Line: 232 - - - - + - - Edit: %s - Edit: %s - Line: 170 + + Add tag + Add tag + Line: 186 @@ -896,33 +919,6 @@ - - - - Add tag - Add tag - Line: 186 - - - - - - - Delete from all stores - Delete from all stores - Line: 142 - - - - - - - Duplicate for current store - Duplicate for current store - Line: 119 - - - @@ -981,15 +977,6 @@ - - - - Search customer - Search customer - Line: 143 - - - @@ -1038,6 +1025,11 @@ Go Line: 42 + + Browse + Browse + Line: 37 + @@ -1047,6 +1039,11 @@ Download Line: 33 + + Back to list + Back to list + Line: 48 + @@ -1058,6 +1055,24 @@ + + + + Change + Change + Line: 104 + + + + + + + Read more + Read more + Line: 95 + + + @@ -1085,6 +1100,52 @@ + + + + Export + Export + Line: 37 +Comment: Recommended modules will be attached to here. + + + + + + + Edit: %name% + Edit: %name% + Line: 27 + + + + + + + Preview + Preview + Line: 75 + + + + + + + Learn more + Learn more + Line: 37 + + + + + + + Edit: %value% + Edit: %value% + Line: 28 + + + @@ -1158,6 +1219,15 @@ + + + + Update + Update + Line: 51 + + + @@ -1185,21 +1255,12 @@ - - - - Edit: %value% - Edit: %value% - Line: 28 - - - - + Try again Try again - Line: 72 + Line: 53 @@ -1240,12 +1301,12 @@ - + Configure URL Configure URL - Line: 110 + Line: 65 @@ -1286,20 +1347,39 @@ Unselect Line: 67 + + Expand + Expand + Line: 49 + + + Collapse + Collapse + Line: 58 + - - Export - Export - Line: 39 - Show SQL query Show SQL query Line: 45 + + Export to SQL Manager + Export to SQL Manager + Line: 48 + + + + + + + Duplicate + Duplicate + Line: 116 + @@ -1321,36 +1401,8 @@ - - - - Export to SQL Manager - Export to SQL Manager - Line: 217 - - - - - - - Duplicate - Duplicate - Line: 131 - - - - - Expand - Expand - Line: 42 - - - Collapse - Collapse - Line: 43 - Create Create @@ -1381,15 +1433,6 @@ - - - - Read more - Read more - Line: 76 - - - @@ -1399,33 +1442,6 @@ - - - - Learn more - Learn more - Line: 38 - - - - - - - Back to list - Back to list - Line: 34 - - - - - - - Edit: %name% - Edit: %name% - Line: 27 - - - @@ -1500,15 +1516,6 @@ - - - - Change - Change - Line: 169 - - - @@ -1525,24 +1532,15 @@ Select Line: 56 - - - - - - Update - Update - Line: 69 + + Select another address + Select another address + Line: 34 - - Select another address - Select another address - Line: 186 - View full details View full details @@ -1573,15 +1571,6 @@ - - - - Browse - Browse - Line: 738 - - - diff --git a/translations/default/AdminAdvparametersFeature.xlf b/translations/default/AdminAdvparametersFeature.xlf index f58775a26fbc0..f891ebc85bd18 100644 --- a/translations/default/AdminAdvparametersFeature.xlf +++ b/translations/default/AdminAdvparametersFeature.xlf @@ -109,6 +109,12 @@ Comment: Customer threads feature flag Line: 92 Comment: Order states feature flag + + Permissions + Permissions + Line: 80 +Comment: Permissions feature flag + @@ -246,876 +252,909 @@ Comment: Order states feature flag Advanced Stock Management Line: 330 - - - - - - Back office connection from %ip% - Back office connection from %ip% - Line: 254 + + Template + Template + Line: 575 - - - - - - %class_name% addition - %class_name% addition - Line: 184 -Comment: voluntary do affectation here + + Customer ID + Customer ID + Line: 430 - - - - - - Edit this SQL query - Edit this SQL query - Line: 108 + + Active (0/1) + Active (0/1) + Line: 428 - - - - - - Attribute groups - Attribute groups - Line: 586 + + Customer email + Customer email + Line: 429 - - Cart rules - Cart rules - Line: 592 + + Root category (0/1) + Root category (0/1) + Line: 211 - - Contact information - Contact information - Line: 569 + + Product ID + Product ID + Line: 135 - - Discount prices - Discount prices - Line: 572 + + Attribute (Name:Type:Position) + Attribute (Name:Type:Position) + Line: 138 - - Module hooks - Module hooks - Line: 578 + + Value (Value:Position) + Value (Value:Position) + Line: 141 - - Meta information - Meta information - Line: 579 + + Supplier reference + Supplier reference + Line: 143 - - Product combinations - Product combinations - Line: 581 + + Default (0 = No, 1 = Yes) + Default (0 = No, 1 = Yes) + Line: 156 - - Available quantities for sale - Available quantities for sale - Line: 582 + + Combination availability date + Combination availability date + Line: 157 - - Warehouses - Warehouses - Line: 584 + + Choose among product images by position (1,2,3...) + Choose among product images by position (1,2,3...) + Line: 159 - - Webservice accounts - Webservice accounts - Line: 585 + + UPC + UPC + Line: 260 - - Tax rules groups - Tax rules groups - Line: 589 + + Minimal quantity + Minimal quantity + Line: 282 - - Import data - Import data - Line: 609 + + Image URLs (x,y,z...) + Image URLs (x,y,z...) + Line: 302 - - Choose the source shop - Choose the source shop - Line: 589 + + Image alt texts (x,y,z...) + Image alt texts (x,y,z...) + Line: 303 - - Choose data to import - Choose data to import - Line: 624 + + Depends on stock + Depends on stock + Line: 334 - - Shop groups list - Shop groups list - Line: 860 + + Warehouse + Warehouse + Line: 338 - - Choose the source store - Choose the source store - Line: 616 + + EAN-13 + EAN-13 + Line: 259 - - Store groups list - Store groups list - Line: 892 + + Titles ID (Mr = 1, Ms = 2, else 0) + Titles ID (Mr = 1, Ms = 2, else 0) + Line: 386 - - - - - - Shop group - Shop group - Line: 179 + + Birth date (yyyy-mm-dd) + Birth date (yyyy-mm-dd) + Line: 389 - - Multistore options - Multistore options - Line: 66 + + Newsletter (0/1) + Newsletter (0/1) + Line: 392 - - Default shop - Default shop - Line: 69 + + Partner offers (0/1) + Partner offers (0/1) + Line: 393 - - Add a new shop group - Add a new shop group - Line: 169 + + Registration date (yyyy-mm-dd) + Registration date (yyyy-mm-dd) + Line: 394 - - Add a new shop - Add a new shop - Line: 155 + + Groups (x,y,z...) + Groups (x,y,z...) + Line: 395 - - Shop group name - Shop group name - Line: 186 + + Default group ID + Default group ID + Line: 396 - - Share customers - Share customers - Line: 206 + + Categories (x,y,z...) + Categories (x,y,z...) + Line: 245 - - Share available quantities for sale - Share available quantities for sale - Line: 226 + + Tax rule ID + Tax rule ID + Line: 248 - - Share available quantities between shops of this group. When changing this option, all available products quantities will be reset to 0. - Share available quantities between shops of this group. When changing this option, all available products quantities will be reset to 0. - Line: 241 + + On sale (0/1) + On sale (0/1) + Line: 250 - - Share orders - Share orders - Line: 245 + + Discount amount + Discount amount + Line: 251 - - Store group - Store group - Line: 184 + + Discount percent + Discount percent + Line: 252 - - Default store - Default store - Line: 69 + + Discount from (yyyy-mm-dd) + Discount from (yyyy-mm-dd) + Line: 253 - - Add a new group of stores - Add a new group of stores - Line: 169 - - - Add a new store - Add a new store - Line: 155 + + Discount to (yyyy-mm-dd) + Discount to (yyyy-mm-dd) + Line: 254 - - Name of the store group - Name of the store group - Line: 191 + + Reference # + Reference # + Line: 255 - - - - - - Multistore tree - Multistore tree - Line: 382 + + Supplier reference # + Supplier reference # + Line: 256 - - Shop URL ID - Shop URL ID - Line: 66 + + Delivery time of out-of-stock products with allowed orders: + Delivery time of out-of-stock products with allowed orders: + Line: 276 - - Shop name - Shop name - Line: 71 + + Additional shipping cost + Additional shipping cost + Line: 286 - - Is it the main URL? - Is it the main URL? - Line: 81 + + Unit for the price per unit + Unit for the price per unit + Line: 287 - - URL options - URL options - Line: 164 + + Tags (x,y,z...) + Tags (x,y,z...) + Line: 291 - - Is it the main URL for this shop? - Is it the main URL for this shop? - Line: 167 + + Rewritten URL + Rewritten URL + Line: 295 - - Shop URL - Shop URL - Line: 220 + + Label when backorder allowed + Label when backorder allowed + Line: 297 - - Domain - Domain - Line: 246 + + Available for order (0 = No, 1 = Yes) + Available for order (0 = No, 1 = Yes) + Line: 298 - - SSL Domain - SSL Domain - Line: 252 + + Product availability date + Product availability date + Line: 299 - - Physical URL - Physical URL - Line: 258 + + Product creation date + Product creation date + Line: 300 - - Virtual URL - Virtual URL - Line: 265 + + Show price (0 = No, 1 = Yes) + Show price (0 = No, 1 = Yes) + Line: 301 - - Final URL - Final URL - Line: 273 + + Delete existing images (0 = No, 1 = Yes) + Delete existing images (0 = No, 1 = Yes) + Line: 305 - - Edit this shop - Edit this shop + + Feature (Name:Value:Position:Customized) + Feature (Name:Value:Position:Customized) Line: 307 - - Add a new URL - Add a new URL - Line: 352 + + Available online only (0 = No, 1 = Yes) + Available online only (0 = No, 1 = Yes) + Line: 308 - - Store URL ID - Store URL ID - Line: 66 + + Customizable (0 = No, 1 = Yes) + Customizable (0 = No, 1 = Yes) + Line: 310 - - Store name - Store name - Line: 71 + + Uploadable files (0 = No, 1 = Yes) + Uploadable files (0 = No, 1 = Yes) + Line: 311 - - Is it the main URL for this store? - Is it the main URL for this store? - Line: 187 + + Text fields (0 = No, 1 = Yes) + Text fields (0 = No, 1 = Yes) + Line: 312 - - Store URL - Store URL - Line: 240 + + Action when out of stock + Action when out of stock + Line: 313 - - Edit this store - Edit this store - Line: 327 + + Virtual product (0 = No, 1 = Yes) + Virtual product (0 = No, 1 = Yes) + Line: 314 - - - - - - Statistics - Statistics - Line: 39 + + File URL + File URL + Line: 315 - - - - - - Notifications - Notifications - Line: 101 + + Expiration date (yyyy-mm-dd) + Expiration date (yyyy-mm-dd) + Line: 320 - - - - - - This is a test message. Your server is now configured to send email. - This is a test message. Your server is now configured to send email. - Line: 73 + + Number of days + Number of days + Line: 322 - - Test message -- Prestashop - Test message -- Prestashop - Line: 77 + + Accessories (x,y,z...) + Accessories (x,y,z...) + Line: 341 - - Error: Please check your configuration - Error: Please check your configuration - Line: 112 + + Active (0/1) + Active (0/1) + Line: 525 - - An error has occurred. Please check your configuration - An error has occurred. Please check your configuration - Line: 112 + + Image URL + Image URL + Line: 540 + + + Address (2) + Address (2) + Line: 528 + + + Latitude + Latitude + Line: 533 + + + Longitude + Longitude + Line: 534 + + + Hours (x,y,z...) + Hours (x,y,z...) + Line: 539 + + + ID / Name of the store + ID / Name of the store + Line: 542 + + + ID / Name of group shop + ID / Name of group shop + Line: 478 + + + Ignore this column + Ignore this column + Line: 596 + + + Store contacts + Store contacts + Line: 4635 - + - - %key% (missing description) - %key% (missing description) - Line: 143 + + Back office connection from %ip% + Back office connection from %ip% + Line: 254 - + - - Use /usr/sbin/sendmail (recommended; works in most cases) - Use /usr/sbin/sendmail (recommended; works in most cases) - Line: 59 - - - Set my own SMTP parameters (for advanced users ONLY) - Set my own SMTP parameters (for advanced users ONLY) - Line: 63 - - - Never send emails (may be useful for testing purposes) - Never send emails (may be useful for testing purposes) - Line: 67 + + %class_name% addition + %class_name% addition + Line: 184 +Comment: voluntary do affectation here - + - - View (GET) - View (GET) - Line: 58 - - - Modify (PUT) - Modify (PUT) - Line: 59 - - - Add (POST) - Add (POST) - Line: 60 - - - Patch (PATCH) - Patch (PATCH) - Line: 61 + + Edit this SQL query + Edit this SQL query + Line: 108 - - Delete (DELETE) - Delete (DELETE) - Line: 62 + + Select your default file encoding + Select your default file encoding + Line: 71 - - Fast view (HEAD) - Fast view (HEAD) - Line: 63 + + SQL query name + SQL query name + Line: 153 - + - - Age - Age - Line: 83 + + Attribute groups + Attribute groups + Line: 586 - - - - - - Template - Template - Line: 118 + + Cart rules + Cart rules + Line: 592 - - Recipient - Recipient - Line: 111 + + Contact information + Contact information + Line: 569 - - Subject - Subject - Line: 132 + + Discount prices + Discount prices + Line: 572 - - Sent - Sent - Line: 139 + + Module hooks + Module hooks + Line: 578 - - - - - - Erase all - Erase all - Line: 248 + + Meta information + Meta information + Line: 579 - - Severity (1-4) - Severity (1-4) - Line: 104 + + Product combinations + Product combinations + Line: 581 - - Object type - Object type - Line: 119 + + Available quantities for sale + Available quantities for sale + Line: 582 - - Object ID - Object ID - Line: 126 + + Warehouses + Warehouses + Line: 584 - - Error code - Error code - Line: 147 + + Webservice accounts + Webservice accounts + Line: 585 - - - - - - Refresh list - Refresh list - Line: 189 + + Tax rules groups + Tax rules groups + Line: 589 - - - - - - Last update - Last update - Line: 145 + + Import data + Import data + Line: 609 - - The user will be signed out from this session. - The user will be signed out from this session. - Line: 165 + + Choose the source shop + Choose the source shop + Line: 589 - - Delete session? - Delete session? - Line: 171 + + Choose data to import + Choose data to import + Line: 624 - - Users will be signed out from all selected sessions. - Users will be signed out from all selected sessions. - Line: 295 + + Shop groups list + Shop groups list + Line: 860 - - Delete selected sessions? - Delete selected sessions? - Line: 301 + + Choose the source store + Choose the source store + Line: 616 - - - - - - Employee ID - Employee ID - Line: 117 + + Store groups list + Store groups list + Line: 892 + + + Customer groups + Customer groups + Line: 588 - + - - Customer ID - Customer ID - Line: 61 + + Shop group + Shop group + Line: 179 - - Active (0/1) - Active (0/1) - Line: 59 + + Multistore options + Multistore options + Line: 66 - - Customer email - Customer email - Line: 60 + + Default shop + Default shop + Line: 69 - - - - - - Root category (0/1) - Root category (0/1) - Line: 63 + + Add a new shop group + Add a new shop group + Line: 169 - - ID / Name of shop - ID / Name of shop - Line: 74 + + Add a new shop + Add a new shop + Line: 155 - - - - - - Product ID - Product ID - Line: 57 + + Shop group name + Shop group name + Line: 186 - - Attribute (Name:Type:Position) - Attribute (Name:Type:Position) - Line: 59 + + Share customers + Share customers + Line: 206 - - Value (Value:Position) - Value (Value:Position) - Line: 60 + + Share available quantities for sale + Share available quantities for sale + Line: 226 - - Supplier reference - Supplier reference - Line: 61 + + Share available quantities between shops of this group. When changing this option, all available products quantities will be reset to 0. + Share available quantities between shops of this group. When changing this option, all available products quantities will be reset to 0. + Line: 241 - - Default (0 = No, 1 = Yes) - Default (0 = No, 1 = Yes) - Line: 77 + + Share orders + Share orders + Line: 245 - - Combination availability date - Combination availability date - Line: 78 + + Store group + Store group + Line: 184 - - Choose among product images by position (1,2,3...) - Choose among product images by position (1,2,3...) - Line: 79 + + Default store + Default store + Line: 69 - - UPC - UPC - Line: 64 + + Add a new group of stores + Add a new group of stores + Line: 169 - - Minimal quantity - Minimal quantity - Line: 70 + + Add a new store + Add a new store + Line: 155 - - Image URLs (x,y,z...) - Image URLs (x,y,z...) - Line: 80 + + Name of the store group + Name of the store group + Line: 191 - - Image alt texts (x,y,z...) - Image alt texts (x,y,z...) + + + + + + Multistore tree + Multistore tree + Line: 382 + + + Shop URL ID + Shop URL ID + Line: 66 + + + Shop name + Shop name + Line: 71 + + + Is it the main URL? + Is it the main URL? Line: 81 - - Depends on stock - Depends on stock - Line: 94 + + URL options + URL options + Line: 164 - - Warehouse - Warehouse - Line: 99 + + Is it the main URL for this shop? + Is it the main URL for this shop? + Line: 167 - - EAN-13 - EAN-13 - Line: 63 + + Shop URL + Shop URL + Line: 220 - - Advanced stock management - Advanced stock management - Line: 89 + + Domain + Domain + Line: 246 - - - - - - Titles ID (Mr = 1, Ms = 2, else 0) - Titles ID (Mr = 1, Ms = 2, else 0) - Line: 59 + + SSL Domain + SSL Domain + Line: 252 - - Birth date (yyyy-mm-dd) - Birth date (yyyy-mm-dd) - Line: 62 + + Physical URL + Physical URL + Line: 258 - - Newsletter (0/1) - Newsletter (0/1) - Line: 65 + + Virtual URL + Virtual URL + Line: 265 - - Partner offers (0/1) - Partner offers (0/1) + + Final URL + Final URL + Line: 273 + + + Edit this shop + Edit this shop + Line: 307 + + + Add a new URL + Add a new URL + Line: 352 + + + Store URL ID + Store URL ID Line: 66 - - Registration date (yyyy-mm-dd) - Registration date (yyyy-mm-dd) - Line: 67 + + Store name + Store name + Line: 71 - - Groups (x,y,z...) - Groups (x,y,z...) - Line: 68 + + Is it the main URL for this store? + Is it the main URL for this store? + Line: 187 - - Default group ID - Default group ID - Line: 69 + + Store URL + Store URL + Line: 240 + + + Edit this store + Edit this store + Line: 327 - + - - Categories (x,y,z...) - Categories (x,y,z...) - Line: 60 + + Statistics + Statistics + Line: 39 - - Tax rule ID - Tax rule ID - Line: 63 + + + + + + Notifications + Notifications + Line: 101 - - On sale (0/1) - On sale (0/1) - Line: 65 + + + + + + Both + Both + Line: 125 - - Discount amount - Discount amount - Line: 66 + + + + + + This is a test message. Your server is now configured to send email. + This is a test message. Your server is now configured to send email. + Line: 73 - - Discount percent - Discount percent - Line: 67 + + Test message -- Prestashop + Test message -- Prestashop + Line: 77 - - Discount from (yyyy-mm-dd) - Discount from (yyyy-mm-dd) - Line: 68 + + Error: Please check your configuration + Error: Please check your configuration + Line: 112 - - Discount to (yyyy-mm-dd) - Discount to (yyyy-mm-dd) - Line: 69 + + An error has occurred. Please check your configuration + An error has occurred. Please check your configuration + Line: 112 - - Reference # - Reference # - Line: 70 + + + + + + %key% (missing description) + %key% (missing description) + Line: 143 - - Supplier reference # - Supplier reference # - Line: 71 + + + + + + Use /usr/sbin/sendmail (recommended; works in most cases) + Use /usr/sbin/sendmail (recommended; works in most cases) + Line: 59 - - Delivery time of out-of-stock products with allowed orders: - Delivery time of out-of-stock products with allowed orders: - Line: 88 + + Set my own SMTP parameters (for advanced users ONLY) + Set my own SMTP parameters (for advanced users ONLY) + Line: 63 - - Additional shipping cost - Additional shipping cost - Line: 98 + + Never send emails (may be useful for testing purposes) + Never send emails (may be useful for testing purposes) + Line: 67 - - Unit for the price per unit - Unit for the price per unit - Line: 99 + + + + + + View (GET) + View (GET) + Line: 58 - - Tags (x,y,z...) - Tags (x,y,z...) - Line: 103 + + Modify (PUT) + Modify (PUT) + Line: 59 - - Rewritten URL - Rewritten URL - Line: 107 + + Add (POST) + Add (POST) + Line: 60 - - Label when backorder allowed - Label when backorder allowed - Line: 109 + + Patch (PATCH) + Patch (PATCH) + Line: 61 - - Available for order (0 = No, 1 = Yes) - Available for order (0 = No, 1 = Yes) - Line: 110 + + Delete (DELETE) + Delete (DELETE) + Line: 62 - - Product availability date - Product availability date - Line: 111 + + Fast view (HEAD) + Fast view (HEAD) + Line: 63 - - Product creation date - Product creation date - Line: 112 + + + + + + Refresh list + Refresh list + Line: 163 + + + + + + + Age + Age + Line: 83 - - Show price (0 = No, 1 = Yes) - Show price (0 = No, 1 = Yes) - Line: 113 + + + + + + Recipient + Recipient + Line: 111 - - Delete existing images (0 = No, 1 = Yes) - Delete existing images (0 = No, 1 = Yes) - Line: 116 + + Subject + Subject + Line: 132 - - Feature (Name:Value:Position:Customized) - Feature (Name:Value:Position:Customized) - Line: 117 + + Sent + Sent + Line: 139 - - Available online only (0 = No, 1 = Yes) - Available online only (0 = No, 1 = Yes) - Line: 118 + + Erase all + Erase all + Line: 231 - - Customizable (0 = No, 1 = Yes) - Customizable (0 = No, 1 = Yes) - Line: 120 + + + + + + Severity (1-4) + Severity (1-4) + Line: 104 - - Uploadable files (0 = No, 1 = Yes) - Uploadable files (0 = No, 1 = Yes) - Line: 121 + + Object type + Object type + Line: 119 - - Text fields (0 = No, 1 = Yes) - Text fields (0 = No, 1 = Yes) - Line: 122 + + Object ID + Object ID + Line: 126 - - Action when out of stock - Action when out of stock - Line: 123 + + Error code + Error code + Line: 147 - - Virtual product (0 = No, 1 = Yes) - Virtual product (0 = No, 1 = Yes) - Line: 124 + + + + + + Last update + Last update + Line: 145 - - File URL - File URL - Line: 125 + + The user will be signed out from this session. + The user will be signed out from this session. + Line: 164 - - Expiration date (yyyy-mm-dd) - Expiration date (yyyy-mm-dd) - Line: 134 + + Delete session? + Delete session? + Line: 170 - - Number of days - Number of days - Line: 137 + + Users will be signed out from all selected sessions. + Users will be signed out from all selected sessions. + Line: 293 - - Accessories (x,y,z...) - Accessories (x,y,z...) - Line: 175 + + Delete selected sessions? + Delete selected sessions? + Line: 299 - - EAN13 - EAN13 - Line: 74 + + Employee ID + Employee ID + Line: 117 - + - - Active (0/1) - Active (0/1) - Line: 58 - - - Image URL - Image URL - Line: 73 - - - Address (2) - Address (2) - Line: 61 + + Key + Key + Line: 86 - - Latitude - Latitude - Line: 66 + + Key description + Key description + Line: 93 - - Longitude - Longitude - Line: 67 + + + + + + ID / Name of shop + ID / Name of shop + Line: 74 - - Hours (x,y,z...) - Hours (x,y,z...) - Line: 72 + + + + + + Advanced stock management + Advanced stock management + Line: 89 - - ID / Name of the store - ID / Name of the store - Line: 76 + + Product reference + Product reference + Line: 58 - + - - ID / Name of group shop - ID / Name of group shop - Line: 67 + + EAN13 + EAN13 + Line: 74 @@ -1139,11 +1178,6 @@ Comment: voluntary do affectation here - - Product reference - Product reference - Line: 185 - Combination reference Combination reference @@ -1242,15 +1276,6 @@ Comment: voluntary do affectation here - - - - Customer groups - Customer groups - Line: 76 - - - @@ -1412,11 +1437,6 @@ Comment: voluntary do affectation here - - Both - Both - Line: 100 - Send email in HTML format Send email in HTML format @@ -1554,22 +1574,8 @@ Comment: voluntary do affectation here - - - - Ignore this column - Ignore this column - Line: 92 - - - - - Store contacts - Store contacts - Line: 68 - What do you want to import? What do you want to import? @@ -1638,11 +1644,6 @@ Comment: voluntary do affectation here - - Select your default file encoding - Select your default file encoding - Line: 44 - Enable multi-statements queries Enable multi-statements queries @@ -1650,15 +1651,6 @@ Comment: voluntary do affectation here - - - - SQL query name - SQL query name - Line: 54 - - - @@ -1728,21 +1720,6 @@ Comment: voluntary do affectation here - - Key - Key - Line: 90 - - - Key description - Key description - Line: 131 - - - Permissions - Permissions - Line: 144 - Webservice account key. Webservice account key. @@ -1864,6 +1841,11 @@ Comment: voluntary do affectation here A test email has been sent to the email address you provided. Line: 40 + + Send a test email + Send a test email + Line: 49 + @@ -1921,7 +1903,8 @@ Comment: voluntary do affectation here New features New features - Line: 37 + Line: 37 +Comment: Recommended modules will be attached to here. Experimental features @@ -2682,15 +2665,6 @@ Comment: voluntary do affectation here - - - - Send a test email - Send a test email - Line: 96 - - - diff --git a/translations/default/AdminAdvparametersHelp.xlf b/translations/default/AdminAdvparametersHelp.xlf index db136a45e3059..8d5f8e8777565 100644 --- a/translations/default/AdminAdvparametersHelp.xlf +++ b/translations/default/AdminAdvparametersHelp.xlf @@ -87,6 +87,36 @@ Line: 1074 Comment: Special case for Product : either one or the other. Not both. + + A category root is where a category tree can begin. This is used with multistore. + A category root is where a category tree can begin. This is used with multistore. + Line: 212 + + + 0 = Use quantity set in product, 1 = Use quantity from warehouse. + 0 = Use quantity set in product, 1 = Use quantity from warehouse. + Line: 335 + + + ID of the warehouse to set as storage. + ID of the warehouse to set as storage. + Line: 339 + + + Enable advanced stock management on product (0 = No, 1 = Yes) + Enable advanced stock management on product (0 = No, 1 = Yes) + Line: 169 + + + Enable advanced stock management on product (0 = No, 1 = Yes). + Enable advanced stock management on product (0 = No, 1 = Yes). + Line: 331 + + + Ignore this field if you don't use the Multistore tool. If you leave this field empty, the default store will be used. + Ignore this field if you don't use the Multistore tool. If you leave this field empty, the default store will be used. + Line: 543 + @@ -193,11 +223,6 @@ Comment: Special case for Product : either one or the other. Not both. - - A category root is where a category tree can begin. This is used with multistore. - A category root is where a category tree can begin. This is used with multistore. - Line: 64 - Ignore this field if you don't use the Multistore tool. If you leave this field empty, the default shop will be used. Ignore this field if you don't use the Multistore tool. If you leave this field empty, the default shop will be used. @@ -207,21 +232,6 @@ Comment: Special case for Product : either one or the other. Not both. - - 0 = Use quantity set in product, 1 = Use quantity from warehouse. - 0 = Use quantity set in product, 1 = Use quantity from warehouse. - Line: 95 - - - ID of the warehouse to set as storage. - ID of the warehouse to set as storage. - Line: 100 - - - Enable advanced stock management on product (0 = No, 1 = Yes) - Enable advanced stock management on product (0 = No, 1 = Yes) - Line: 90 - Enable Advanced Stock Management on product (0 = No, 1 = Yes) Enable Advanced Stock Management on product (0 = No, 1 = Yes) @@ -231,11 +241,6 @@ Comment: Special case for Product : either one or the other. Not both. - - Enable advanced stock management on product (0 = No, 1 = Yes). - Enable advanced stock management on product (0 = No, 1 = Yes). - Line: 155 - Enable Advanced Stock Management on product (0 = No, 1 = Yes). Enable Advanced Stock Management on product (0 = No, 1 = Yes). @@ -243,15 +248,6 @@ Comment: Special case for Product : either one or the other. Not both. - - - - Ignore this field if you don't use the Multistore tool. If you leave this field empty, the default store will be used. - Ignore this field if you don't use the Multistore tool. If you leave this field empty, the default store will be used. - Line: 77 - - - @@ -468,6 +464,11 @@ Comment: Special case for Product : either one or the other. Not both. This page will be displayed just after login. Line: 229 + + Password should be at least %num% characters long. + Password should be at least %num% characters long. + Line: 173 + @@ -564,39 +565,6 @@ Comment: Special case for Product : either one or the other. Not both. - - - - Password should be at least %num% characters long. - Password should be at least %num% characters long. - Line: 90 - - - - - - - Informative only - Informative only - Line: 31 - - - Warning - Warning - Line: 34 - - - Error - Error - Line: 37 - - - Major issue (crash)! - Major issue (crash)! - Line: 40 - - - @@ -739,6 +707,26 @@ Comment: Special case for Product : either one or the other. Not both. + + Informative only + Informative only + Line: 36 + + + Warning + Warning + Line: 41 + + + Error + Error + Line: 46 + + + Major issue (crash)! + Major issue (crash)! + Line: 51 + Severity levels Severity levels @@ -771,7 +759,8 @@ Comment: Special case for Product : either one or the other. Not both. You can also export the query results as a CSV file by clicking on the "%export_label%" button You can also export the query results as a CSV file by clicking on the "%export_label%" button - Line: 37 + Line: 37 +Comment: Recommended modules will be attached to here. diff --git a/translations/default/AdminAdvparametersNotification.xlf b/translations/default/AdminAdvparametersNotification.xlf index 2d6f2825e015d..941d8470206ed 100644 --- a/translations/default/AdminAdvparametersNotification.xlf +++ b/translations/default/AdminAdvparametersNotification.xlf @@ -124,6 +124,11 @@ No valid tables were found to backup. Line: 335 + + Error deleting + Error deleting + Line: 192 + @@ -337,6 +342,186 @@ EAN-13 "%ean13%" has incorrect value for product with ID %id%. Line: 2667 + + There is an empty row in the file that won't be imported. + There is an empty row in the file that won't be imported. + Line: 3828 + + + %s import + %s import + Line: 4687 + + + (from %s to %s) + (from %s to %s) + Line: 4689 + + + with truncate + with truncate + Line: 4692 + + + The category ID must be unique. It can't be the same as the one for Root or Home category. + The category ID must be unique. It can't be the same as the one for Root or Home category. + Line: 1262 + + + The category ID must be unique. It can't be the same as the one for the parent category (ID: %1$s). + The category ID must be unique. It can't be the same as the one for the parent category (ID: %1$s). + Line: 1286 + + + A category can't be its own parent. You should rename it (current name: %1$s). + A category can't be its own parent. You should rename it (current name: %1$s). + Line: 1303 + + + %category_name% (ID: %id%) cannot be saved + %category_name% (ID: %id%) cannot be saved + Line: 1330 + + + URL rewriting failed to auto-generate a friendly URL for: %category_name% + URL rewriting failed to auto-generate a friendly URL for: %category_name% + Line: 1363 + + + Rewrite link for %1$s (ID %2$s): re-written as %3$s. + Rewrite link for %1$s (ID %2$s): re-written as %3$s. + Line: 1850 + + + A category cannot be its own parent. The parent category ID is either missing or unknown (ID: %1$s). + A category cannot be its own parent. The parent category ID is either missing or unknown (ID: %1$s). + Line: 1405 + + + The root category cannot be modified. + The root category cannot be modified. + Line: 1427 + + + cannot be copied. + cannot be copied. + Line: 3870 + + + %1$s (ID: %2$s) cannot be %3$s + %1$s (ID: %2$s) cannot be %3$s + Line: 1453 + + + Unknown tax rule group ID. You need to create a group with this ID first. + Unknown tax rule group ID. You need to create a group with this ID first. + Line: 1692 + + + %1$s (ID: %2$s) cannot be saved + %1$s (ID: %2$s) cannot be saved + Line: 3973 + + + %data% cannot be saved + %data% cannot be saved + Line: 3945 + + + Shop is not valid + Shop is not valid + Line: 1977 + + + Discount is invalid + Discount is invalid + Line: 2052 + + + Tags list is invalid + Tags list is invalid + Line: 2079 + + + Error copying image: %url% + Error copying image: %url% + Line: 2501 + + + Product #%id%: the picture (%url%) cannot be saved. + Product #%id%: the picture (%url%) cannot be saved. + Line: 2147 + + + Advanced stock management has incorrect value. Not set for product %name% + Advanced stock management has incorrect value. Not set for product %name% + Line: 2198 + + + Advanced stock management is not enabled, cannot enable on product %name% + Advanced stock management is not enabled, cannot enable on product %name% + Line: 2206 + + + Advanced stock management is not enabled, warehouse not set on product %name% + Advanced stock management is not enabled, warehouse not set on product %name% + Line: 2225 + + + Incorrect value for "Depends on stock" for product %name% + Incorrect value for "Depends on stock" for product %name% + Line: 2266 + + + Advanced stock management is not enabled, cannot set "Depends on stock" for product %name% + Advanced stock management is not enabled, cannot set "Depends on stock" for product %name% + Line: 2860 + + + The uploaded file exceeds the upload_max_filesize directive in php.ini. If your server configuration allows it, you may add a directive in your .htaccess. + The uploaded file exceeds the upload_max_filesize directive in php.ini. If your server configuration allows it, you may add a directive in your .htaccess. + Line: 790 + + + The uploaded file exceeds the post_max_size directive in php.ini. If your server configuration allows it, you may add a directive in your .htaccess, for example: + The uploaded file exceeds the post_max_size directive in php.ini. If your server configuration allows it, you may add a directive in your .htaccess, for example: + Line: 794 + + + The uploaded file was only partially uploaded. + The uploaded file was only partially uploaded. + Line: 801 + + + An error occurred while uploading / copying the file. + An error occurred while uploading / copying the file. + Line: 813 + + + The extension of your file should be ".csv". + The extension of your file should be ".csv". + Line: 810 + + + No file was uploaded. + No file was uploaded. + Line: 805 + + + The import directory doesn't exist. Please check your file path. + The import directory doesn't exist. Please check your file path. + Line: 685 + + + The import directory must be writable (CHMOD 755 / 777). + The import directory must be writable (CHMOD 755 / 777). + Line: 689 + + + To proceed, please upload a file first. + To proceed, please upload a file first. + Line: 4699 + @@ -346,6 +531,56 @@ The file is too large and cannot be downloaded. Please use the LIMIT clause in this query. Line: 381 + + The "%tablename%" table does not exist. + The "%tablename%" table does not exist. + Line: 424 + + + The "%attribute%" attribute does not exist in the "%table%" table. + The "%attribute%" attribute does not exist in the "%table%" table. + Line: 514 + + + Undefined "%s" error + Undefined "%s" error + Line: 522 + + + The "*" operator cannot be used in a nested query. + The "*" operator cannot be used in a nested query. + Line: 440 + + + The operator "%s" is incorrect. + The operator "%s" is incorrect. + Line: 450 + + + The "%operator%" operator is incorrect. + The "%operator%" operator is incorrect. + Line: 474 + + + The LIMIT clause must contain numeric arguments. + The LIMIT clause must contain numeric arguments. + Line: 528 + + + The "%reference%" reference does not exist in the "%table%" table. + The "%reference%" reference does not exist in the "%table%" table. + Line: 535 + + + When multiple tables are used, each attribute must refer back to a table. + When multiple tables are used, each attribute must refer back to a table. + Line: 543 + + + "%key%" is an unauthorized keyword. + "%key%" is an unauthorized keyword. + Line: 554 + @@ -448,158 +683,10 @@ The SameSite=None is only available in secure mode. Line: 80 - - The SameSite=None attribute is only available in secure mode. - The SameSite=None attribute is only available in secure mode. - Line: 79 - - - - - - - There is an empty row in the file that won't be imported. - There is an empty row in the file that won't be imported. - Line: 295 - - - %s import - %s import - Line: 321 - - - (from %s to %s) - (from %s to %s) - Line: 326 - - - with truncate - with truncate - Line: 332 - - - - - - - The category ID must be unique. It can't be the same as the one for Root or Home category. - The category ID must be unique. It can't be the same as the one for Root or Home category. - Line: 219 - - - The category ID must be unique. It can't be the same as the one for the parent category (ID: %1$s). - The category ID must be unique. It can't be the same as the one for the parent category (ID: %1$s). - Line: 251 - - - A category can't be its own parent. You should rename it (current name: %1$s). - A category can't be its own parent. You should rename it (current name: %1$s). - Line: 271 - - - %category_name% (ID: %id%) cannot be saved - %category_name% (ID: %id%) cannot be saved - Line: 305 - - - URL rewriting failed to auto-generate a friendly URL for: %category_name% - URL rewriting failed to auto-generate a friendly URL for: %category_name% - Line: 350 - - - Rewrite link for %1$s (ID %2$s): re-written as %3$s. - Rewrite link for %1$s (ID %2$s): re-written as %3$s. - Line: 364 - - - A category cannot be its own parent. The parent category ID is either missing or unknown (ID: %1$s). - A category cannot be its own parent. The parent category ID is either missing or unknown (ID: %1$s). - Line: 422 - - - The root category cannot be modified. - The root category cannot be modified. - Line: 447 - - - cannot be copied. - cannot be copied. - Line: 491 - - - %1$s (ID: %2$s) cannot be %3$s - %1$s (ID: %2$s) cannot be %3$s - Line: 500 - - - Unknown tax rule group ID. You need to create a group with this ID first. - Unknown tax rule group ID. You need to create a group with this ID first. - Line: 496 - - - %1$s (ID: %2$s) cannot be saved - %1$s (ID: %2$s) cannot be saved - Line: 681 - - - %data% cannot be saved - %data% cannot be saved - Line: 710 - - - Shop is not valid - Shop is not valid - Line: 469 - - - Discount is invalid - Discount is invalid - Line: 988 - - - Tags list is invalid - Tags list is invalid - Line: 1037 - - - Error copying image: %url% - Error copying image: %url% - Line: 1126 - - - Product #%id%: the picture (%url%) cannot be saved. - Product #%id%: the picture (%url%) cannot be saved. - Line: 1144 - - - Advanced stock management has incorrect value. Not set for product %name% - Advanced stock management has incorrect value. Not set for product %name% - Line: 1239 - - - Advanced stock management is not enabled, cannot enable on product %name% - Advanced stock management is not enabled, cannot enable on product %name% - Line: 1247 - - - Advanced stock management is not enabled, warehouse not set on product %name% - Advanced stock management is not enabled, warehouse not set on product %name% - Line: 1266 - - - Incorrect value for "Depends on stock" for product %name% - Incorrect value for "Depends on stock" for product %name% - Line: 1311 - - - Advanced stock management is not enabled, cannot set "Depends on stock" for product %name% - Advanced stock management is not enabled, cannot set "Depends on stock" for product %name% - Line: 1320 - Warehouse did not exist, cannot set on product %name% Warehouse did not exist, cannot set on product %name% @@ -814,67 +901,8 @@ - - - - Error: Could not write to file. Make sure that the correct permissions are set on the file %s - Error: Could not write to file. Make sure that the correct permissions are set on the file %s - Line: 81 - - - - - The "%tablename%" table does not exist. - The "%tablename%" table does not exist. - Line: 157 - - - The "%attribute%" attribute does not exist in the "%table%" table. - The "%attribute%" attribute does not exist in the "%table%" table. - Line: 319 - - - Undefined "%s" error - Undefined "%s" error - Line: 329 - - - The "*" operator cannot be used in a nested query. - The "*" operator cannot be used in a nested query. - Line: 178 - - - The operator "%s" is incorrect. - The operator "%s" is incorrect. - Line: 212 - - - The "%operator%" operator is incorrect. - The "%operator%" operator is incorrect. - Line: 251 - - - The LIMIT clause must contain numeric arguments. - The LIMIT clause must contain numeric arguments. - Line: 345 - - - The "%reference%" reference does not exist in the "%table%" table. - The "%reference%" reference does not exist in the "%table%" table. - Line: 362 - - - When multiple tables are used, each attribute must refer back to a table. - When multiple tables are used, each attribute must refer back to a table. - Line: 372 - - - "%key%" is an unauthorized keyword. - "%key%" is an unauthorized keyword. - Line: 406 - The "%function%" function is not allowed. The "%function%" function is not allowed. @@ -893,31 +921,6 @@ - - The uploaded file exceeds the upload_max_filesize directive in php.ini. If your server configuration allows it, you may add a directive in your .htaccess. - The uploaded file exceeds the upload_max_filesize directive in php.ini. If your server configuration allows it, you may add a directive in your .htaccess. - Line: 111 - - - The uploaded file exceeds the post_max_size directive in php.ini. If your server configuration allows it, you may add a directive in your .htaccess, for example: - The uploaded file exceeds the post_max_size directive in php.ini. If your server configuration allows it, you may add a directive in your .htaccess, for example: - Line: 115 - - - The uploaded file was only partially uploaded. - The uploaded file was only partially uploaded. - Line: 120 - - - An error occurred while uploading / copying the file. - An error occurred while uploading / copying the file. - Line: 90 - - - The extension of your file should be ".csv". - The extension of your file should be ".csv". - Line: 134 - The extension of your file should be .csv. The extension of your file should be .csv. @@ -925,13 +928,26 @@ - + - - Error deleting - Error deleting - Line: 239 + + Error: Could not write to file. Make sure that the correct permissions are set on the file %s + Error: Could not write to file. Make sure that the correct permissions are set on the file %s + Line: 102 + + + + + + The SameSite=None attribute is only available in secure mode. + The SameSite=None attribute is only available in secure mode. + Line: 252 + + + + + It appears the backup was successful, however you must download and carefully verify the backup file before proceeding. It appears the backup was successful, however you must download and carefully verify the backup file before proceeding. @@ -983,25 +999,6 @@ - - - - No file was uploaded. - No file was uploaded. - Line: 145 - - - The import directory doesn't exist. Please check your file path. - The import directory doesn't exist. Please check your file path. - Line: 384 - - - The import directory must be writable (CHMOD 755 / 777). - The import directory must be writable (CHMOD 755 / 777). - Line: 396 - - - @@ -1081,15 +1078,6 @@ - - - - To proceed, please upload a file first. - To proceed, please upload a file first. - Line: 87 - - - diff --git a/translations/default/AdminCatalogFeature.xlf b/translations/default/AdminCatalogFeature.xlf index 073e97237911d..a90288b1cd91f 100644 --- a/translations/default/AdminCatalogFeature.xlf +++ b/translations/default/AdminCatalogFeature.xlf @@ -444,6 +444,16 @@ Save then add another value Line: 355 + + Color + Color + Line: 323 + + + Attributes + Attributes + Line: 206 + @@ -587,6 +597,66 @@ Reply to the next unanswered message in this thread Line: 683 + + Mark as "handled" + Mark as "handled" + Line: 690 + + + Re-open + Re-open + Line: 697 + + + Mark as "pending 1" (will be answered later) + Mark as "pending 1" (will be answered later) + Line: 706 + + + Disable pending status + Disable pending status + Line: 729 + + + Mark as "pending 2" (will be answered later) + Mark as "pending 2" (will be answered later) + Line: 722 + + + Message to: + Message to: + Line: 807 + + + Product: + Product: + Line: 810 + + + Status: + Status: + Line: 832 + + + Closed + Closed + Line: 57 + + + Pending 1 + Pending 1 + Line: 58 + + + Pending 2 + Pending 2 + Line: 59 + + + Message forwarded to + Message forwarded to + Line: 423 + @@ -611,6 +681,55 @@ Add a new feature value Line: 418 + + Add new feature + Add new feature + Line: 209 + + + + + + + Impact on weight + Impact on weight + Line: 155 + + + Short description + Short description + Line: 472 + + + Condition + Condition + Line: 309 + + + Low stock level + Low stock level + Line: 283 + + + Label when in stock + Label when in stock + Line: 296 + + + Delivery time of in-stock products: + Delivery time of in-stock products: + Line: 269 + + + Number of allowed downloads + Number of allowed downloads + Line: 317 + + + Receive a low stock alert by email + Receive a low stock alert by email + Line: 284 + @@ -629,6 +748,35 @@ Reduction with or without taxes Line: 300 + + Beginning + Beginning + Line: 123 + + + End + End + Line: 130 + + + Reduction type + Reduction type + Line: 290 + + + Leave initial price + Leave initial price + Line: 269 + + + + + + + Number of products + Number of products + Line: 68 + @@ -672,16 +820,7 @@ All combinations All combinations - Line: 488 - - - - - - - Ref: %s - Ref: %s - Line: 166 + Line: 489 @@ -703,67 +842,8 @@ - - - - Mark as "handled" - Mark as "handled" - Line: 282 - - - Re-open - Re-open - Line: 287 - - - Mark as "pending 1" (will be answered later) - Mark as "pending 1" (will be answered later) - Line: 295 - - - Disable pending status - Disable pending status - Line: 319 - - - Mark as "pending 2" (will be answered later) - Mark as "pending 2" (will be answered later) - Line: 311 - - - Message to: - Message to: - Line: 190 - - - Product: - Product: - Line: 198 - - - Status: - Status: - Line: 234 - - - - - Closed - Closed - Line: 51 - - - Pending 1 - Pending 1 - Line: 52 - - - Pending 2 - Pending 2 - Line: 53 - Opened Opened @@ -778,6 +858,35 @@ Default delivery time: [1]%delivery_time% - %oos_delivery_time%[/1] [2]Edit delivery time[/2] Line: 96 + + Specific delivery time for this product + Specific delivery time for this product + Line: 104 + + + None + None + Line: 95 + + + + + + + Use default behavior + Use default behavior + Line: 71 + + + Allow orders + Allow orders + Line: 66 + + + Deny orders + Deny orders + Line: 67 + @@ -797,6 +906,40 @@ Decrement both. Line: 84 + + Use pack quantity + Use pack quantity + Line: 82 + + + Use quantity of products in the pack + Use quantity of products in the pack + Line: 83 + + + Use both, whatever is lower + Use both, whatever is lower + Line: 84 + + + + + + + New + New + Line: 57 + + + Used + Used + Line: 58 + + + Refurbished + Refurbished + Line: 59 + @@ -821,6 +964,16 @@ An intangible product that doesn't require shipping. You can also add a downloadable file. Line: 80 + + Pack of products + Pack of products + Line: 94 + + + Standard product + Standard product + Line: 92 + @@ -845,6 +998,26 @@ Only customers with the link can access the product. Line: 75 + + Everywhere + Everywhere + Line: 65 + + + Catalog only + Catalog only + Line: 68 + + + Search only + Search only + Line: 71 + + + Nowhere + Nowhere + Line: 74 + @@ -856,33 +1029,6 @@ - - - - Products - Products - Line: 203 - - - - - - - Color - Color - Line: 128 - - - - - - - Attributes - Attributes - Line: 70 - - - @@ -892,17 +1038,12 @@ - + - - Beginning - Beginning - Line: 282 - - - End - End - Line: 292 + + Products + Products + Line: 111 @@ -969,6 +1110,15 @@ + + + + Select a store + Select a store + Line: 757 + + + @@ -1015,15 +1165,6 @@ - - - - Add new feature - Add new feature - Line: 205 - - - @@ -1033,33 +1174,6 @@ - - - - Select a store - Select a store - Line: 1557 - - - - - - - Number of products - Number of products - Line: 422 - - - - - - - Message forwarded to - Message forwarded to - Line: 293 - - - @@ -1104,11 +1218,6 @@ - - Impact on weight - Impact on weight - Line: 168 - ISBN code ISBN code @@ -1134,16 +1243,6 @@ Impact on price per unit (tax excl.) Line: 173 - - UPC barcode - UPC barcode - Line: 118 - - - EAN-13 or JAN barcode - EAN-13 or JAN barcode - Line: 102 - Set as default combination Set as default combination @@ -1154,6 +1253,26 @@ Impact on price (tax incl.) Line: 147 + + Ecotax (tax incl.) + Ecotax (tax incl.) + Line: 153 + + + Send me an email when the quantity is below or equals this level + Send me an email when the quantity is below or equals this level + Line: 207 + + + Stock location + Stock location + Line: 191 + + + Availability date + Availability date + Line: 214 + @@ -1172,21 +1291,6 @@ - - Short description - Short description - Line: 281 - - - Pack of products - Pack of products - Line: 193 - - - Standard product - Standard product - Line: 192 - Add products to your pack Add products to your pack @@ -1236,45 +1340,15 @@ - - Condition - Condition - Line: 210 - - - New - New - Line: 202 - - - Used - Used - Line: 203 - - - Refurbished - Refurbished - Line: 204 - - - Everywhere - Everywhere - Line: 98 - - - Catalog only - Catalog only - Line: 99 - - - Search only - Search only - Line: 100 + + UPC barcode + UPC barcode + Line: 168 - - Nowhere - Nowhere - Line: 101 + + EAN-13 or JAN barcode + EAN-13 or JAN barcode + Line: 177 Display options @@ -1340,55 +1414,20 @@ Retail price (tax excl.) Line: 150 - - Ecotax (tax incl.) - Ecotax (tax incl.) - Line: 174 - Retail price (tax incl.) - Retail price (tax incl.) - Line: 165 - - - Retail price per unit (tax excl.) - Retail price per unit (tax excl.) - Line: 228 - - - - - - - Low stock level - Low stock level - Line: 207 - - - Label when in stock - Label when in stock - Line: 238 - - - Use default behavior - Use default behavior - Line: 285 - - - Allow orders - Allow orders - Line: 300 - - - Deny orders - Deny orders - Line: 299 - - - Send me an email when the quantity is below or equals this level - Send me an email when the quantity is below or equals this level - Line: 221 + Retail price (tax incl.) + Line: 165 + + + Retail price per unit (tax excl.) + Retail price per unit (tax excl.) + Line: 228 + + + + Create combinations Create combinations @@ -1409,16 +1448,6 @@ I want to specify available quantities manually. Line: 149 - - Stock location - Stock location - Line: 200 - - - Availability date - Availability date - Line: 261 - Label when out of stock (and backorders allowed) Label when out of stock (and backorders allowed) @@ -1439,21 +1468,6 @@ Add downloadable file Line: 271 - - Use pack quantity - Use pack quantity - Line: 334 - - - Use quantity of products in the pack - Use quantity of products in the pack - Line: 335 - - - Use both, whatever is lower - Use both, whatever is lower - Line: 336 - Pack stock behavior Pack stock behavior @@ -1562,16 +1576,6 @@ - - Delivery time of in-stock products: - Delivery time of in-stock products: - Line: 254 - - - Specific delivery time for this product - Specific delivery time for this product - Line: 211 - Specific delivery time to this product Specific delivery time to this product @@ -1636,16 +1640,6 @@ - - Reduction type - Reduction type - Line: 305 - - - Leave initial price - Leave initial price - Line: 289 - Add customer Add customer @@ -1685,11 +1679,6 @@ - - Number of allowed downloads - Number of allowed downloads - Line: 109 - Number of days Number of days @@ -1720,6 +1709,15 @@ + + + + If the price per unit of this combination is different from the initial price per unit, enter the value of the impact (negative or positive). + If the price per unit of this combination is different from the initial price per unit, enter the value of the impact (negative or positive). + Line: 135 + + + @@ -1732,16 +1730,6 @@ Edit fixed quantity Line: 84 - - Stocks - Stocks - Line: 176 - - - Enter stock location - Enter stock location - Line: 109 - @@ -1753,15 +1741,6 @@ - - - - [1]Edit default behavior[/1] - [1]Edit default behavior[/1] - Line: 80 - - - @@ -1791,11 +1770,6 @@ - - If the price per unit of this combination is different from the initial price per unit, enter the value of the impact (negative or positive). - If the price per unit of this combination is different from the initial price per unit, enter the value of the impact (negative or positive). - Line: 233 - Final retail price (tax excl.) Final retail price (tax excl.) @@ -1813,15 +1787,6 @@ - - - - Receive a low stock alert by email - Receive a low stock alert by email - Line: 61 - - - @@ -2168,8 +2133,22 @@ + + + + [1]Edit default behavior[/1] + [1]Edit default behavior[/1] + Line: 87 + + + + + Stocks + Stocks + Line: 142 + Recent stock movements Recent stock movements @@ -2180,6 +2159,11 @@ [1]View all stock movements[/1] Line: 101 + + Edit quantity + Edit quantity + Line: 82 + @@ -2203,6 +2187,11 @@ + + Enter stock location + Enter stock location + Line: 71 + Enter threshold value Enter threshold value @@ -2212,6 +2201,11 @@ + + Ref: %s + Ref: %s + Line: 99 + Pack quantities Pack quantities @@ -2288,6 +2282,11 @@ Having suppliers is optional if brands supply you directly. Make sure you don't confuse product suppliers and product brands to facilitate stock management. Line: 32 + + Add new supplier + Add new supplier + Line: 37 + @@ -2297,6 +2296,11 @@ Viewing %from%-%to% on %total% (page %current_page% / %page_count%) Line: 62 + + Items per page: + Items per page: + Line: 74 + @@ -2322,6 +2326,15 @@ + + + + Edit: %value% + Edit: %value% + Line: 28 + + + @@ -2343,6 +2356,11 @@ Price (tax excl.) Line: 57 + + Quantity + Quantity + Line: 65 + @@ -2507,6 +2525,11 @@ Comment: "Prev." is short for "Previous" Next combination Line: 68 + + Stock + Stock + Line: 120 + @@ -2552,6 +2575,11 @@ Comment: First tag [1] is number of combinations selected. Second tag [2] is the Stock management is disabled Line: 190 + + Combinations + Combinations + Line: 83 + @@ -2729,32 +2757,8 @@ Comment: First tag [1] is number of combinations selected. Second tag [2] is the - - - - Stock - Stock - Line: 51 - - - Quantities - Quantities - Line: 29 - - - - - Quantity - Quantity - Line: 197 - - - Combinations - Combinations - Line: 150 - Summary Summary @@ -2805,11 +2809,6 @@ Comment: First tag [1] is number of combinations selected. Second tag [2] is the Simple product Line: 159 - - Cover - Cover - Line: 83 - Features Features @@ -2942,6 +2941,16 @@ Comment: First tag [1] is number of combinations selected. Second tag [2] is the + + Quantities + Quantities + Line: 327 + + + Cover + Cover + Line: 325 + Drop images here Drop images here @@ -3074,8 +3083,7 @@ Comment: First tag [1] is number of combinations selected. Second tag [2] is the Add new catalog price rule Add new catalog price rule - Line: 31 -Comment: Stable feature flags form + Line: 31 @@ -3142,15 +3150,6 @@ Comment: Stable feature flags form - - - - Edit: %value% - Edit: %value% - Line: 26 - - - @@ -3319,11 +3318,6 @@ Comment: Stable feature flags form Combinations are the different variations of a product, with attributes like its size, weight or color taking different values. Line: 33 - - Generate combinations - Generate combinations - Line: 40 - @@ -3351,6 +3345,11 @@ Comment: Stable feature flags form + + Generate combinations + Generate combinations + Line: 102 + Error log Error log @@ -3553,15 +3552,6 @@ Comment: Stable feature flags form - - - - Add new supplier - Add new supplier - Line: 33 - - - @@ -3594,15 +3584,6 @@ Comment: Stable feature flags form - - - - Items per page: - Items per page: - Line: 115 - - - @@ -3612,31 +3593,31 @@ Comment: Stable feature flags form - + + + + [1][/1] of [2][/2] characters allowed + [1][/1] of [2][/2] characters allowed + Line: 37 + + + + Type Type - Line: 429 + Line: 623 Main category Main category - Line: 176 - - - - - - - [1][/1] of [2][/2] characters allowed - [1][/1] of [2][/2] characters allowed - Line: 37 + Line: 362 [1][/1] of [2][/2] characters used (recommended) [1][/1] of [2][/2] characters used (recommended) - Line: 30 + Line: 1084 @@ -3651,16 +3632,6 @@ Comment: Stable feature flags form - - None - None - Line: 65 - - - Edit quantity - Edit quantity - Line: 75 - Use checkboxes to bulk edit quantities Use checkboxes to bulk edit quantities diff --git a/translations/default/AdminCatalogHelp.xlf b/translations/default/AdminCatalogHelp.xlf index e5dd02898b5ad..1fd3e90f21785 100644 --- a/translations/default/AdminCatalogHelp.xlf +++ b/translations/default/AdminCatalogHelp.xlf @@ -222,6 +222,11 @@ Add new feature values Line: 272 + + Add new feature value + Add new feature value + Line: 224 + @@ -241,6 +246,16 @@ Mobile phone number for this supplier. Line: 183 + + Will appear in the list of suppliers. + Will appear in the list of suppliers. + Line: 163 + + + Upload a supplier logo from your computer. + Upload a supplier logo from your computer. + Line: 256 + @@ -261,15 +276,6 @@ - - - - Add new feature value - Add new feature value - Line: 210 - - - @@ -293,6 +299,15 @@ + + + + Leave empty to disable + Leave empty to disable + Line: 200 + + + @@ -337,11 +352,6 @@ - - Leave empty to disable - Leave empty to disable - Line: 209 - Combine several attributes, e.g.: "Size: all", "Color: red". Combine several attributes, e.g.: "Size: all", "Color: red". @@ -412,30 +422,21 @@ - - - - This interface allows you to specify the suppliers of the current combination. - This interface allows you to specify the suppliers of the current combination. - Line: 88 - - - - + If the price of this combination is different from the initial retail price, enter the value of the impact (negative or positive). If the price of this combination is different from the initial retail price, enter the value of the impact (negative or positive). - Line: 123 + Line: 109 - + - - Team[/1].]]> - Team[/1].]]> - Line: 65 + + This interface allows you to specify the suppliers of the current combination. + This interface allows you to specify the suppliers of the current combination. + Line: 88 @@ -566,6 +567,15 @@ + + + + Team[/1].]]> + Team[/1].]]> + Line: 79 + + + @@ -578,19 +588,10 @@ Controls how you want stock of the pack to be calculated. You can decide, if you want to manage the stocks of packs manually, or if it should be calculated automatically depending on stock of the products inside. In that case, the quantity of the pack inside is ignored. Line: 118 - - - - - - Will appear in the list of suppliers. - Will appear in the list of suppliers. - Line: 150 - - - Upload a supplier logo from your computer. - Upload a supplier logo from your computer. - Line: 278 + + Controls how you want stock of the pack to be calculated. You can decide, if you want to manage the stock of pack manually, or if it should be calculated automatically depending on stock of the products inside. In that case, the quantity of the pack is ignored. + Controls how you want stock of the pack to be calculated. You can decide, if you want to manage the stock of pack manually, or if it should be calculated automatically depending on stock of the products inside. In that case, the quantity of the pack is ignored. + Line: 118 @@ -687,6 +688,21 @@ Does this combination have a different price? Is it cheaper or more expensive than the default retail price? Line: 169 + + The minimum quantity required to buy this product (set to 1 to disable this feature). E.g.: if set to 3, customers will be able to purchase the product only if they take at least 3 in quantity. + The minimum quantity required to buy this product (set to 1 to disable this feature). E.g.: if set to 3, customers will be able to purchase the product only if they take at least 3 in quantity. + Line: 104 + + + Team[/1]]]> + Team[/1]]]> + Line: 146 + + + This type of product code is specific to Europe and Japan, but is widely used internationally. It is a superset of the UPC code: all products marked with an EAN will be accepted in North America. + This type of product code is specific to Europe and Japan, but is widely used internationally. It is a superset of the UPC code: all products marked with an EAN will be accepted in North America. + Line: 234 + @@ -830,16 +846,6 @@ - - The minimum quantity required to buy this product (set to 1 to disable this feature). E.g.: if set to 3, customers will be able to purchase the product only if they take at least 3 in quantity. - The minimum quantity required to buy this product (set to 1 to disable this feature). E.g.: if set to 3, customers will be able to purchase the product only if they take at least 3 in quantity. - Line: 43 - - - Team[/1]]]> - Team[/1]]]> - Line: 74 - Number of days this file can be accessed by customers. Set to zero for unlimited access. Number of days this file can be accessed by customers. Set to zero for unlimited access. @@ -911,11 +917,6 @@ Comment: First tag [1][/1] is for a HTML link. Second tag [2] is an icon (no clo - - This type of product code is specific to Europe and Japan, but is widely used internationally. It is a superset of the UPC code: all products marked with an EAN will be accepted in North America. - This type of product code is specific to Europe and Japan, but is widely used internationally. It is a superset of the UPC code: all products marked with an EAN will be accepted in North America. - Line: 119 - MPN is used internationally to identify the Manufacturer Part Number. MPN is used internationally to identify the Manufacturer Part Number. diff --git a/translations/default/AdminCatalogNotification.xlf b/translations/default/AdminCatalogNotification.xlf index 9b35f5eae446a..fde43060dc37b 100644 --- a/translations/default/AdminCatalogNotification.xlf +++ b/translations/default/AdminCatalogNotification.xlf @@ -14,12 +14,12 @@ You cannot set 0 or a negative position, the minimum is 1. You cannot set 0 or a negative position, the minimum is 1. - Line: 7235 + Line: 7239 You cannot set a position greater than the total number of products in the category, starting at 1. You cannot set a position greater than the total number of products in the category, starting at 1. - Line: 7256 + Line: 7260 @@ -78,6 +78,15 @@ + + + + Failed to copy the file. + Failed to copy the file. + Line: 363 + + + @@ -198,6 +207,11 @@ Invalid quantity Line: 478 + + There are not enough products in stock. + There are not enough products in stock. + Line: 490 + @@ -417,6 +431,51 @@ An error occurred while attempting to add products to the pack. Line: 3187 + + An error occurred while updating the specific price. + An error occurred while updating the specific price. + Line: 1025 + + + The specific price ID is invalid. + The specific price ID is invalid. + Line: 1035 + + + An error occurred while attempting to delete the specific price. + An error occurred while attempting to delete the specific price. + Line: 1039 + + + No reduction value has been submitted. + No reduction value has been submitted. + Line: 1003 + + + The submitted reduction value (0-100) is out-of-range. + The submitted reduction value (0-100) is out-of-range. + Line: 1007 + + + An attachment name is required. + An attachment name is required. + Line: 450 + + + This attachment was unable to be loaded into the database. + This attachment was unable to be loaded into the database. + Line: 501 + + + Invalid description for %s language. + Invalid description for %s language. + Line: 445 + + + A specific price already exists for these parameters. + A specific price already exists for these parameters. + Line: 1599 + @@ -431,6 +490,11 @@ The address is not correct. Please make sure all of the required fields are completed. Line: 529 + + It is not possible to delete a supplier if there are pending supplier orders. + It is not possible to delete a supplier if there are pending supplier orders. + Line: 544 + @@ -506,31 +570,6 @@ - - An error occurred while updating the specific price. - An error occurred while updating the specific price. - Line: 366 - - - The specific price ID is invalid. - The specific price ID is invalid. - Line: 564 - - - An error occurred while attempting to delete the specific price. - An error occurred while attempting to delete the specific price. - Line: 568 - - - No reduction value has been submitted. - No reduction value has been submitted. - Line: 310 - - - The submitted reduction value (0-100) is out-of-range. - The submitted reduction value (0-100) is out-of-range. - Line: 314 - Submitted reduction value (0-100) is out-of-range Submitted reduction value (0-100) is out-of-range @@ -651,26 +690,6 @@ - - An attachment name is required. - An attachment name is required. - Line: 352 - - - This attachment was unable to be loaded into the database. - This attachment was unable to be loaded into the database. - Line: 384 - - - Invalid description for %s language. - Invalid description for %s language. - Line: 364 - - - Failed to copy the file. - Failed to copy the file. - Line: 376 - Invalid description for %s language Invalid description for %s language @@ -724,6 +743,11 @@ General%s to edit settings.]]> Line: 826 + + Unable to resize one or more of your pictures. + Unable to resize one or more of your pictures. + Line: 717 + @@ -749,27 +773,8 @@ - - - - A specific price already exists for these parameters. - A specific price already exists for these parameters. - Line: 172 - - - - - It is not possible to delete a supplier if there are pending supplier orders. - It is not possible to delete a supplier if there are pending supplier orders. - Line: 518 - - - Unable to resize one or more of your pictures. - Unable to resize one or more of your pictures. - Line: 539 - General%s to edit settings.]]> General%s to edit settings.]]> @@ -793,11 +798,6 @@ - - There are not enough products in stock. - There are not enough products in stock. - Line: 1979 - Selected products were successfully canceled. Selected products were successfully canceled. @@ -923,12 +923,12 @@ - + There is no result for this search. Update your filters to view other products. There is no result for this search. Update your filters to view other products. - Line: 78 + Line: 143 @@ -1106,17 +1106,13 @@ Comment: "It" refers to the option "Force update of friendly URL" - + What do you want to do with the products associated with this category? What do you want to do with the products associated with this category? - Line: 31 + Line: 28 - - - - Note that if they have another category, your products will logically remain associated with it. Note that if they have another category, your products will logically remain associated with it. @@ -1203,12 +1199,12 @@ Comment: "It" refers to the option "Force update of friendly URL" - + There is no attachment yet. There is no attachment yet. - Line: 419 + Line: 613 diff --git a/translations/default/AdminDesignHelp.xlf b/translations/default/AdminDesignHelp.xlf index 8eed5d357bdcb..645c1d7799ac2 100644 --- a/translations/default/AdminDesignHelp.xlf +++ b/translations/default/AdminDesignHelp.xlf @@ -223,8 +223,7 @@ Add new page category Add new page category - Line: 31 -Comment: Stable feature flags form + Line: 31 Add new page diff --git a/translations/default/AdminDesignNotification.xlf b/translations/default/AdminDesignNotification.xlf index 0c0c0234f6cf3..42d53f18fcda7 100644 --- a/translations/default/AdminDesignNotification.xlf +++ b/translations/default/AdminDesignNotification.xlf @@ -148,6 +148,11 @@ Make sure the theme you use doesn't rely on this image format before deleting it. Line: 1026 + + This name already exists. + This name already exists. + Line: 586 + @@ -187,7 +192,7 @@ The page Category cannot be moved here. The page Category cannot be moved here. - Line: 1143 + Line: 1126 @@ -220,15 +225,6 @@ - - - - This name already exists. - This name already exists. - Line: 144 - - - diff --git a/translations/default/AdminGlobal.xlf b/translations/default/AdminGlobal.xlf index c39c2f097b4c7..15673e6021146 100644 --- a/translations/default/AdminGlobal.xlf +++ b/translations/default/AdminGlobal.xlf @@ -16,6 +16,26 @@ Amount Line: 78 + + Product + Product + Line: 132 + + + Tax excluded + Tax excluded + Line: 93 + + + Tax included + Tax included + Line: 94 + + + Value + Value + Line: 67 + @@ -70,27 +90,22 @@ - + Brands Brands - Line: 30 + Line: 52 Suppliers Suppliers - Line: 30 + Line: 53 Attributes Attributes - Line: 30 - - - Products - Products - Line: 30 + Line: 50 @@ -110,11 +125,6 @@ - - Product - Product - Line: 94 - Stock Stock @@ -130,26 +140,6 @@ Unit price Line: 95 - - Quantity - Quantity - Line: 96 - - - Tax excluded - Tax excluded - Line: 227 - - - Tax included - Tax included - Line: 227 - - - Value - Value - Line: 210 - @@ -159,6 +149,11 @@ Zone Line: 141 + + result(s) + result(s) + Line: 75 + @@ -205,11 +200,6 @@ Discount Line: 64 - - Category - Category - Line: 63 - @@ -240,8 +230,31 @@ + + + + Bulk actions + Bulk actions + Line: 177 + + + + + + + Module + Module + Line: 38 + + + + + Quantity + Quantity + Line: 55 + Action Action @@ -251,6 +264,11 @@ + + Category + Category + Line: 39 + Supplier Supplier @@ -302,6 +320,15 @@ + + + + Products + Products + Line: 30 + + + @@ -311,20 +338,6 @@ - - - - result(s) - result(s) - Line: 75 - - - Bulk actions - Bulk actions - Line: 32 - - - @@ -339,15 +352,6 @@ - - - - Module - Module - Line: 179 - - - @@ -445,6 +449,15 @@ + + + + Default + Default + Line: 639 + + + @@ -452,6 +465,11 @@ Miscellaneous Line: 77 + + (tax excl.) + (tax excl.) + Line: 302 + @@ -466,6 +484,11 @@ Radio buttons Line: 196 + + Values + Values + Line: 273 + @@ -496,6 +519,15 @@ + + + + Invalid characters: + Invalid characters: + Line: 202 + + + @@ -503,6 +535,11 @@ 30 day Line: 608 + + 30 days + 30 days + Line: 595 + @@ -512,6 +549,54 @@ Date of birth Line: 298 + + Last name + Last name + Line: 288 + + + First name + First name + Line: 284 + + + Social title + Social title + Line: 279 + + + + + + + Stores + Stores + Line: 600 + + + Width + Width + Line: 319 + + + Height + Height + Line: 328 + + + + + + + Customers + Customers + Line: 4608 + + + Depth + Depth + Line: 265 + @@ -545,15 +630,15 @@ Search results Line: 377 + + Company + Company + Line: 342 + - - Stores - Stores - Line: 583 - Countries Countries @@ -561,6 +646,20 @@ + + + + All currencies + All currencies + Line: 222 + + + All groups + All groups + Line: 242 + + + @@ -578,6 +677,44 @@ Week Line: 121 + + Never + Never + Line: 120 + + + + + + + Fax + Fax + Line: 540 + + + Note + Note + Line: 255 + + + Phone + Phone + Line: 535 + + + Zip/Postal code + Zip/Postal code + Line: 508 + + + + + + + DNI + DNI + Line: 243 + @@ -604,6 +741,15 @@ + + + + 30 Days + 30 Days + Line: 1466 + + + @@ -611,10 +757,10 @@ Abandoned Carts Line: 85 - - Orders - Orders - Line: 73 + + Configuration + Configuration + Line: 38 @@ -625,24 +771,29 @@ Configure Line: 46 - - Sales - Sales - Line: 67 - - + - - Configuration - Configuration - Line: 43 + + Tax excl. + Tax excl. + Line: 252 + + Orders + Orders + Line: 51 + + + Sales + Sales + Line: 46 + Conversion Rate Conversion Rate @@ -676,14 +827,15 @@ By position Line: 262 - - - - - - Shop association - Shop association - Line: 268 + + Descending + Descending + Line: 274 + + + Ascending + Ascending + Line: 279 @@ -699,6 +851,11 @@ Firstname Line: 278 + + Gender + Gender + Line: 270 + @@ -715,6 +872,20 @@ + + + + Yes + Yes + Line: 320 + + + No + No + Line: 321 + + + @@ -742,16 +913,6 @@ Pages Line: 60 - - Yes - Yes - Line: 271 - - - No - No - Line: 275 - @@ -768,6 +929,15 @@ + + + + Maximum image size: %s. + Maximum image size: %s. + Line: 771 + + + @@ -779,11 +949,21 @@ + + Shop association + Shop association + Line: 183 + Hook Hook Line: 139 + + Delete + Delete + Line: 173 + @@ -793,6 +973,20 @@ Link Line: 1405 + + Label + Label + Line: 1401 + + + + + + + Save + Save + Line: 208 + @@ -821,6 +1015,20 @@ Displaying %1$s of %2$s Line: 53 + + Quantity sold + Quantity sold + Line: 65 + + + + + + + Edit + Edit + Line: 243 + @@ -830,6 +1038,44 @@ images Line: 157 + + Available quantity for sale + Available quantity for sale + Line: 318 + + + Item + Item + Line: 227 + + + Images + Images + Line: 316 + + + + + + + Settings updated + Settings updated + Line: 63 + + + + + + + Average price + Average price + Line: 467 + + + Percentage + Percentage + Line: 493 + @@ -841,12 +1087,12 @@ - + - - Quantity sold - Quantity sold - Line: 292 + + Guide + Guide + Line: 132 @@ -862,38 +1108,10 @@ Products bought: Line: 142 - - Guide - Guide - Line: 100 - - - - - - - Available quantity for sale - Available quantity for sale - Line: 123 - - - Item - Item - Line: 122 - - - Average price - Average price - Line: 152 - - - - - - - Never - Never - Line: 188 + + All countries + All countries + Line: 119 @@ -924,69 +1142,21 @@ - - - - 30 days - 30 days - Line: 51 - - - - + - - 30 Days - 30 Days - Line: 82 - - - - - - - Customers - Customers - Line: 78 - All time All time - Line: 79 + Line: 75 - - All currencies - All currencies - Line: 517 - - - All groups - All groups - Line: 519 - - - All countries - All countries - Line: 518 - - - Tax excl. - Tax excl. - Line: 468 - Tax incl. Tax incl. - Line: 466 - - - All customers - All customers - Line: 520 + Line: 467 @@ -1013,6 +1183,15 @@ + + + + Text + Text + Line: 56 + + + @@ -1049,12 +1228,12 @@ - + - - Percentage - Percentage - Line: 263 + + Filename + Filename + Line: 91 @@ -1104,17 +1283,13 @@ - + Store(s) Store(s) - Line: 304 + Line: 64 - - - - Delete from store Delete from store @@ -1122,22 +1297,8 @@ - - - - Edit - Edit - Line: 131 - - - - - Gender - Gender - Line: 116 - Search title Search title @@ -1154,39 +1315,6 @@ - - - - Width - Width - Line: 78 - - - Height - Height - Line: 79 - - - Depth - Depth - Line: 80 - - - - - - - Fax - Fax - Line: 69 - - - Note - Note - Line: 71 - - - @@ -1196,15 +1324,6 @@ - - - - Values - Values - Line: 256 - - - @@ -1214,15 +1333,6 @@ - - - - Maximum image size: %s. - Maximum image size: %s. - Line: 544 - - - @@ -1230,10 +1340,14 @@ Enable gravatar Line: 154 + + + + Avatar Avatar - Line: 147 + Line: 77 @@ -1289,50 +1403,17 @@ - - - - Descending - Descending - Line: 84 - - - Ascending - Ascending - Line: 83 - - - - - - - (tax excl.) - (tax excl.) - Line: 79 - - - - + - - Filename - Filename - Line: 72 + + Apply changes to all stores + Apply changes to all stores + Line: 161 - - Text - Text - Line: 84 - - - Label - Label - Line: 79 - Required Required @@ -1340,17 +1421,13 @@ - - - - Default - Default - Line: 312 - - - + + All customers + All customers + Line: 220 + % % @@ -1358,62 +1435,6 @@ - - - - Last name - Last name - Line: 211 - - - First name - First name - Line: 184 - - - Company - Company - Line: 238 - - - Phone - Phone - Line: 399 - - - Zip/Postal code - Zip/Postal code - Line: 320 - - - - - - - DNI - DNI - Line: 261 - - - - - - - Social title - Social title - Line: 134 - - - - - - - Invalid characters: - Invalid characters: - Line: 75 - - - @@ -1426,11 +1447,6 @@ Existing Line: 124 - - tax incl. - tax incl. - Line: 109 - @@ -1442,12 +1458,12 @@ - + - - Images - Images - Line: 54 + + tax incl. + tax incl. + Line: 97 @@ -1460,13 +1476,17 @@ - + - - Settings updated - Settings updated - Line: 105 + + Cancel + Cancel + Line: 125 + + + + Apply changes to all associated stores Apply changes to all associated stores @@ -1476,11 +1496,6 @@ - - Delete - Delete - Line: 99 - Not Required Not Required @@ -1512,24 +1527,6 @@ - - - - Cancel - Cancel - Line: 65 - - - - - - - Apply changes to all stores - Apply changes to all stores - Line: 123 - - - @@ -1567,6 +1564,47 @@ + + + + No records found + No records found + Line: 28 + + + + + + + Active + Active + Line: 26 + + + Inactive + Inactive + Line: 26 + + + + + + + Deleted customer + Deleted customer + Line: 31 + + + + + + + Settings + Settings + Line: 33 + + + @@ -1576,12 +1614,26 @@ - + + + + Meta keywords + Meta keywords + Line: 75 + + + Meta description + Meta description + Line: 64 + + + + General General - Line: 37 + Line: 36 @@ -1690,6 +1742,11 @@ Example Line: 42 + + Language + Language + Line: 41 + @@ -1710,6 +1767,15 @@ + + + + Taxes + Taxes + Line: 31 + + + @@ -1731,20 +1797,20 @@ Inherited Line: 52 - - - - No results found for No results found for - Line: 67 + Line: 33 Searching for Searching for - Line: 67 + Line: 33 + + + + Edit color Edit color @@ -1752,15 +1818,6 @@ - - - - Settings - Settings - Line: 34 - - - @@ -1773,10 +1830,6 @@ Enable %product_name% input Line: 85 - - - - N/A N/A @@ -1784,6 +1837,20 @@ + + + + Quick navigation + Quick navigation + Line: 28 + + + Price + Price + Line: 41 + + + @@ -1841,15 +1908,6 @@ - - - - Quick navigation - Quick navigation - Line: 61 - - - @@ -1862,14 +1920,19 @@ For Line: 60 + + Customer + Customer + Line: 81 + - + - - Price - Price - Line: 219 + + Currency + Currency + Line: 49 @@ -1890,16 +1953,6 @@ Group Line: 148 - - Currency - Currency - Line: 146 - - - Customer - Customer - Line: 149 - @@ -1922,16 +1975,6 @@ - - Meta keywords - Meta keywords - Line: 174 - - - Meta description - Meta description - Line: 162 - Friendly URL Friendly URL @@ -2074,16 +2117,6 @@ - - Active - Active - Line: 155 - - - Inactive - Inactive - Line: 158 - Newsletter Newsletter @@ -2131,25 +2164,6 @@ Delivery Line: 40 - - Invoice - Invoice - Line: 51 - - - - - - - Language - Language - Line: 138 - - - Combination - Combination - Line: 67 - @@ -2163,36 +2177,11 @@ - - No records found - No records found - Line: 226 - Toggle Toggle Line: 100 - - Date - Date - Line: 127 - - - Details - Details - Line: 209 - - - Payment - Payment - Line: 130 - - - Loading... - Loading... - Line: 237 - @@ -2204,6 +2193,33 @@ + + + + Invoice + Invoice + Line: 77 + + + + + + + Combination + Combination + Line: 49 + + + + + + + Carrier + Carrier + Line: 57 + + + @@ -2230,6 +2246,11 @@ Package item Line: 56 + + Available + Available + Line: 51 + @@ -2241,6 +2262,15 @@ + + + + Email: + Email: + Line: 74 + + + @@ -2252,11 +2282,6 @@ - - Deleted customer - Deleted customer - Line: 39 - from from @@ -2269,6 +2294,15 @@ + + + + Date + Date + Line: 31 + + + @@ -2289,6 +2323,16 @@ + + Details + Details + Line: 62 + + + Payment + Payment + Line: 29 + Employee Employee @@ -2314,20 +2358,6 @@ - - - - Taxes - Taxes - Line: 223 - - - Available - Available - Line: 82 - - - @@ -2353,16 +2383,6 @@ - - Carrier - Carrier - Line: 39 - - - Email: - Email: - Line: 84 - Tax Tax @@ -2375,25 +2395,6 @@ - - - - Title - Title - Line: 427 - - - File name - File name - Line: 428 - - - %count% file(s) - %count% file(s) - Line: 744 - - - @@ -2413,6 +2414,34 @@ + + + + Title + Title + Line: 621 + + + File name + File name + Line: 622 + + + %count% file(s) + %count% file(s) + Line: 1007 + + + + + + + Loading... + Loading... + Line: 107 + + + @@ -2422,15 +2451,6 @@ - - - - Save - Save - Line: 38 - - - diff --git a/translations/default/AdminInternationalFeature.xlf b/translations/default/AdminInternationalFeature.xlf index 3f984325ca27a..5c1d04cb7587a 100644 --- a/translations/default/AdminInternationalFeature.xlf +++ b/translations/default/AdminInternationalFeature.xlf @@ -69,26 +69,11 @@ - - Expressions to translate: - Expressions to translate: - Line: 57 - - - Total missing expressions: - Total missing expressions: - Line: 58 - missing missing Line: 111 - - expressions - expressions - Line: 110 - @@ -107,6 +92,21 @@ + + Expressions to translate: + Expressions to translate: + Line: 56 + + + Total missing expressions: + Total missing expressions: + Line: 57 + + + expressions + expressions + Line: 116 + Modify translations Modify translations @@ -146,6 +146,70 @@ Zip/Postal code format Line: 268 + + Add new country + Add new country + Line: 123 + + + ISO code + ISO code + Line: 206 + + + Default currency + Default currency + Line: 229 + + + Default store currency + Default store currency + Line: 236 + + + Address format + Address format + Line: 280 + + + Contains states + Contains states + Line: 309 + + + Do you need a tax identification number? + Do you need a tax identification number? + Line: 327 + + + Display tax label (e.g. "Tax incl.") + Display tax label (e.g. "Tax incl.") + Line: 345 + + + Call prefix + Call prefix + Line: 220 + + + Does it need a ZIP/Postal code? + Does it need a ZIP/Postal code? + Line: 254 + + + ZIP/Postal code format + ZIP/Postal code format + Line: 273 + + + + + + + Add new state + Add new state + Line: 115 + @@ -170,6 +234,11 @@ Zip/Postal code range Line: 289 + + Add new tax rules group + Add new tax rules group + Line: 81 + @@ -219,32 +288,40 @@ View/Edit TXT version Line: 2552 - - - - Enabled Languages Enabled Languages - Line: 90 + Line: 1453 - - - - Main Country Main Country - Line: 81 + Line: 1465 - - - - Front office Translations Front office Translations - Line: 81 + Line: 1478 + + + Back office translations + Back office translations + Line: 1343 + + + Installed modules translations + Installed modules translations + Line: 1359 + + + Email translations + Email translations + Line: 1367 + + + Other translations + Other translations + Line: 1375 @@ -282,26 +359,6 @@ - - Back office translations - Back office translations - Line: 57 - - - Installed modules translations - Installed modules translations - Line: 59 - - - Email translations - Email translations - Line: 60 - - - Other translations - Other translations - Line: 61 - Back office Back office @@ -324,6 +381,15 @@ + + + + Symbol + Symbol + Line: 203 + + + @@ -333,6 +399,30 @@ + + + + Language code + Language code + Line: 121 + + + Date format + Date format + Line: 128 + + + Date format (full) + Date format (full) + Line: 135 + + + Flag + Flag + Line: 97 + + + @@ -340,14 +430,10 @@ Search rate Line: 173 - - - - - - Add new country - Add new country - Line: 139 + + Rate + Rate + Line: 100 @@ -365,24 +451,6 @@ - - - - Add new state - Add new state - Line: 357 - - - - - - - Add new tax rules group - Add new tax rules group - Line: 333 - - - @@ -394,16 +462,6 @@ - - ISO code - ISO code - Line: 182 - - - Symbol - Symbol - Line: 148 - Currency name Currency name @@ -471,26 +529,6 @@ - - Language code - Language code - Line: 106 - - - Date format - Date format - Line: 118 - - - Date format (full) - Date format (full) - Line: 134 - - - Flag - Flag - Line: 150 - "No-picture" image "No-picture" image @@ -572,11 +610,6 @@ - - Default currency - Default currency - Line: 145 - Default language Default language @@ -604,50 +637,6 @@ - - - - Default store currency - Default store currency - Line: 126 - - - Address format - Address format - Line: 156 - - - Contains states - Contains states - Line: 164 - - - Do you need a tax identification number? - Do you need a tax identification number? - Line: 168 - - - Display tax label (e.g. "Tax incl.") - Display tax label (e.g. "Tax incl.") - Line: 172 - - - Call prefix - Call prefix - Line: 120 - - - Does it need a ZIP/Postal code? - Does it need a ZIP/Postal code? - Line: 141 - - - ZIP/Postal code format - ZIP/Postal code format - Line: 145 - - - @@ -677,15 +666,6 @@ - - - - Rate - Rate - Line: 101 - - - @@ -734,13 +714,17 @@ - + Select your theme Select your theme - Line: 125 + Line: 75 + + + + Core (no theme selected) Core (no theme selected) @@ -873,8 +857,7 @@ Add new currency Add new currency - Line: 31 -Comment: Stable feature flags form + Line: 31 diff --git a/translations/default/AdminInternationalHelp.xlf b/translations/default/AdminInternationalHelp.xlf index 1befa4bfefbd3..b3e2b15d68dbd 100644 --- a/translations/default/AdminInternationalHelp.xlf +++ b/translations/default/AdminInternationalHelp.xlf @@ -38,52 +38,43 @@ - + Some of these expressions use this special syntax: %s. Some of these expressions use this special syntax: %s. - Line: 84 + Line: 68 There are [1]%replace%[/1] products There are [1]%replace%[/1] products - Line: 89 + Line: 73 "%s" will be replaced by a number. "%s" will be replaced by a number. - Line: 89 + Line: 73 List of pages in [1]%replace%[/1] List of pages in [1]%replace%[/1] - Line: 90 + Line: 74 "%s" will be replaced by a string. "%s" will be replaced by a string. - Line: 90 + Line: 74 Feature: [1]%1%[/1] ([1]%2%[/1] values) Feature: [1]%1%[/1] ([1]%2%[/1] values) - Line: 91 + Line: 75 The numbers enable you to reorder the variables when necessary. The numbers enable you to reorder the variables when necessary. - Line: 91 - - - Click on the title of a section to open its fieldsets. - Click on the title of a section to open its fieldsets. - Line: 53 + Line: 75 - - - - You must use this syntax in your translations. Here are several examples: You must use this syntax in your translations. Here are several examples: @@ -93,6 +84,11 @@ + + Click on the title of a section to open its fieldsets. + Click on the title of a section to open its fieldsets. + Line: 52 + Here you can modify translations for all installed module. Here you can modify translations for all installed module. @@ -132,6 +128,50 @@ Display this country to your customers (the selected country will always be displayed in the Back Office). Line: 305 + + Indicate the format of the postal code: use L for a letter, N for a number, and C for the country's ISO 3166-1 alpha-2 code. For example, NNNNN for the United States, France, Poland and many other; LNNNNLLL for Argentina, etc. If you do not want PrestaShop to verify the postal code for this country, leave it blank. + Indicate the format of the postal code: use L for a letter, N for a number, and C for the country's ISO 3166-1 alpha-2 code. For example, NNNNN for the United States, France, Poland and many other; LNNNNLLL for Argentina, etc. If you do not want PrestaShop to verify the postal code for this country, leave it blank. + Line: 276 + + + + + + + Provide the state name to be displayed in addresses and on invoices. + Provide the state name to be displayed in addresses and on invoices. + Line: 155 + + + 1 to 4 letter ISO code. + 1 to 4 letter ISO code. + Line: 164 + + + You can prefix it with the country ISO code if needed. + You can prefix it with the country ISO code if needed. + Line: 164 + + + Country where the state is located. + Country where the state is located. + Line: 177 + + + Only the countries with the option "contains states" enabled are displayed. + Only the countries with the option "contains states" enabled are displayed. + Line: 177 + + + Geographical region where this state is located. + Geographical region where this state is located. + Line: 190 + + + Used for shipping + Used for shipping + Line: 191 + @@ -336,54 +376,6 @@ - - - - Indicate the format of the postal code: use L for a letter, N for a number, and C for the country's ISO 3166-1 alpha-2 code. For example, NNNNN for the United States, France, Poland and many other; LNNNNLLL for Argentina, etc. If you do not want PrestaShop to verify the postal code for this country, leave it blank. - Indicate the format of the postal code: use L for a letter, N for a number, and C for the country's ISO 3166-1 alpha-2 code. For example, NNNNN for the United States, France, Poland and many other; LNNNNLLL for Argentina, etc. If you do not want PrestaShop to verify the postal code for this country, leave it blank. - Line: 146 - - - - - - - Provide the state name to be displayed in addresses and on invoices. - Provide the state name to be displayed in addresses and on invoices. - Line: 92 - - - 1 to 4 letter ISO code. - 1 to 4 letter ISO code. - Line: 118 - - - You can prefix it with the country ISO code if needed. - You can prefix it with the country ISO code if needed. - Line: 120 - - - Country where the state is located. - Country where the state is located. - Line: 148 - - - Only the countries with the option "contains states" enabled are displayed. - Only the countries with the option "contains states" enabled are displayed. - Line: 150 - - - Geographical region where this state is located. - Geographical region where this state is located. - Line: 163 - - - Used for shipping - Used for shipping - Line: 165 - - - diff --git a/translations/default/AdminInternationalNotification.xlf b/translations/default/AdminInternationalNotification.xlf index 34d94e461fb27..60f918604a714 100644 --- a/translations/default/AdminInternationalNotification.xlf +++ b/translations/default/AdminInternationalNotification.xlf @@ -18,52 +18,43 @@ - + Apache mod_security is activated on your server. This could result in some Bad Request errors Apache mod_security is activated on your server. This could result in some Bad Request errors - Line: 31 + Line: 33 Warning! Your hosting provider is using the Suhosin patch for PHP, which limits the maximum number of fields allowed in a form: Warning! Your hosting provider is using the Suhosin patch for PHP, which limits the maximum number of fields allowed in a form: - Line: 37 + Line: 39 Please ask your hosting provider to increase the Suhosin limit to Please ask your hosting provider to increase the Suhosin limit to - Line: 41 + Line: 43 Warning! Your PHP configuration limits the maximum number of fields allowed in a form: Warning! Your PHP configuration limits the maximum number of fields allowed in a form: - Line: 43 + Line: 45 for max_input_vars. for max_input_vars. - Line: 44 + Line: 46 Please ask your hosting provider to increase this limit to Please ask your hosting provider to increase this limit to - Line: 45 - - - This expression uses a special syntax: - This expression uses a special syntax: - Line: 133 + Line: 47 %s at least, or you will have to edit the translation files. %s at least, or you will have to edit the translation files. - Line: 47 + Line: 49 - - - - %limit% for suhosin.post.max_vars. %limit% for suhosin.post.max_vars. @@ -76,6 +67,15 @@ + + + + This expression uses a special syntax: + This expression uses a special syntax: + Line: 140 + + + @@ -194,6 +194,11 @@ Comment: @todo Throw exception An error has occurred during the default group update Line: 583 + + An error has occurred, this module does not exist: %s + An error has occurred, this module does not exist: %s + Line: 513 + @@ -217,6 +222,21 @@ Comment: @todo Throw exception Cannot add configuration %1$s for %2$s language Line: 1581 + + Localization pack imported successfully. + Localization pack imported successfully. + Line: 517 + + + The translation was successfully copied. + The translation was successfully copied. + Line: 507 + + + The translations have been successfully added. + The translations have been successfully added. + Line: 508 + @@ -426,49 +446,45 @@ Comment: @todo Throw exception Cannot write into the "%file%" Line: 3183 - - - - Cannot create the folder "%folder%". Please check your directory writing permissions. Cannot create the folder "%folder%". Please check your directory writing permissions. - Line: 93 + Line: 302 You must select two languages in order to copy data from one to another. You must select two languages in order to copy data from one to another. - Line: 166 + Line: 399 You must select two themes in order to copy data from one to another. You must select two themes in order to copy data from one to another. - Line: 172 + Line: 404 There is nothing to copy (same language and theme). There is nothing to copy (same language and theme). - Line: 181 + Line: 409 Theme(s) not found Theme(s) not found - Line: 204 + Line: 426 Impossible to copy "%source%" to "%dest%". Impossible to copy "%source%" to "%dest%". - Line: 107 + Line: 439 Impossible to translate "%dest%". Impossible to translate "%dest%". - Line: 127 + Line: 442 A part of the data has been copied but some of the language files could not be found. A part of the data has been copied but some of the language files could not be found. - Line: 139 + Line: 449 @@ -570,11 +586,6 @@ Comment: @todo Throw exception - - Localization pack imported successfully. - Localization pack imported successfully. - Line: 212 - Importing a new language may fail without the OpenSSL module. Please enable "openssl.so" on your server configuration. Importing a new language may fail without the OpenSSL module. Please enable "openssl.so" on your server configuration. @@ -584,21 +595,6 @@ Comment: @todo Throw exception - - An error has occurred, this module does not exist: %s - An error has occurred, this module does not exist: %s - Line: 143 - - - The translation was successfully copied. - The translation was successfully copied. - Line: 318 - - - The translations have been successfully added. - The translations have been successfully added. - Line: 177 - You must select at least one translation type to export translations. You must select at least one translation type to export translations. @@ -651,11 +647,6 @@ Comment: @todo Throw exception The geolocation database is unavailable. Line: 107 - - Invalid whitelist - Invalid whitelist - Line: 123 - Country selection is invalid. Country selection is invalid. @@ -663,6 +654,15 @@ Comment: @todo Throw exception + + + + Invalid whitelist + Invalid whitelist + Line: 76 + + + diff --git a/translations/default/AdminModulesFeature.xlf b/translations/default/AdminModulesFeature.xlf index 1df43c56080e8..b09c13e26be1c 100644 --- a/translations/default/AdminModulesFeature.xlf +++ b/translations/default/AdminModulesFeature.xlf @@ -185,22 +185,12 @@ Comment: Set the modules categories - + - - PrestaShop Addons Marketplace - PrestaShop Addons Marketplace - Line: 31 - - - Exit to PrestaShop Addons Marketplace - Exit to PrestaShop Addons Marketplace - Line: 28 - - - See all results for your search on - See all results for your search on - Line: 30 + + Free + Free + Line: 100 @@ -223,6 +213,25 @@ Comment: Set the modules categories + + + + PrestaShop Addons Marketplace + PrestaShop Addons Marketplace + Line: 32 + + + Exit to PrestaShop Addons Marketplace + Exit to PrestaShop Addons Marketplace + Line: 29 + + + See all results for your search on + See all results for your search on + Line: 31 + + + @@ -230,6 +239,10 @@ Comment: Set the modules categories Recently used Line: 45 + + + + All categories All categories @@ -316,15 +329,15 @@ Comment: Set the modules categories Yes, reset it Line: 102 - - Optional: delete module folder after uninstall. - Optional: delete module folder after uninstall. - Line: 66 - + + Optional: delete module folder after uninstall. + Optional: delete module folder after uninstall. + Line: 44 + Bulk action confirmation Bulk action confirmation @@ -353,11 +366,6 @@ Comment: Set the modules categories - - Free - Free - Line: 212 - v%version% by %author% v%version% by %author% diff --git a/translations/default/AdminModulesNotification.xlf b/translations/default/AdminModulesNotification.xlf index 6e4e103e5751e..583bf9bbbad84 100644 --- a/translations/default/AdminModulesNotification.xlf +++ b/translations/default/AdminModulesNotification.xlf @@ -74,6 +74,16 @@ Successfully signed in to PrestaShop Addons. Line: 525 + + The module transplanted successfully to the hook. + The module transplanted successfully to the hook. + Line: 509 + + + The module was successfully removed from the hook. + The module was successfully removed from the hook. + Line: 510 + @@ -81,152 +91,152 @@ Unable to install the module (Module name is not valid). Unable to install the module (Module name is not valid). - Line: 379 + Line: 380 The version of your module is not compliant with your PrestaShop version. The version of your module is not compliant with your PrestaShop version. - Line: 386 + Line: 387 Before installing this module, you have to install this/these module(s) first: Before installing this module, you have to install this/these module(s) first: - Line: 395 + Line: 396 This module has already been installed. This module has already been installed. - Line: 409 + Line: 410 Could not install module controllers. Could not install module controllers. - Line: 415 + Line: 427 Technical error: PrestaShop could not install this module. Technical error: PrestaShop could not install this module. - Line: 428 + Line: 440 Current version: %s Current version: %s - Line: 516 + Line: 528 %d file upgrade applied %d file upgrade applied - Line: 517 + Line: 529 No upgrade has been applied No upgrade has been applied - Line: 520 + Line: 532 Upgraded from: %s to %s Upgraded from: %s to %s - Line: 522 + Line: 534 %d upgrade left %d upgrade left - Line: 523 + Line: 535 Module %s cannot be upgraded this time: please refresh this page to update it. Module %s cannot be upgraded this time: please refresh this page to update it. - Line: 527 + Line: 539 To prevent any problem, this module has been turned off To prevent any problem, this module has been turned off - Line: 529 + Line: 541 The module is not installed. The module is not installed. - Line: 744 + Line: 756 Unable to install override: %s Unable to install override: %s - Line: 867 + Line: 885 %1$s is not a valid module name. %1$s is not a valid module name. - Line: 1203 + Line: 1226 All modules cannot be loaded due to memory limit restrictions, please increase your memory_limit value on your server configuration All modules cannot be loaded due to memory limit restrictions, please increase your memory_limit value on your server configuration - Line: 1371 + Line: 1394 %s could not be loaded. %s could not be loaded. - Line: 1396 + Line: 1419 Error found in config file: Error found in config file: - Line: 1404 + Line: 1427 %1$s (parse error in %2$s) %1$s (parse error in %2$s) - Line: 1459 + Line: 1482 %1$s (class missing in %2$s) %1$s (class missing in %2$s) - Line: 1526 + Line: 1549 The following module(s) could not be loaded The following module(s) could not be loaded - Line: 1578 + Line: 1601 No template found for module No template found for module - Line: 2217 + Line: 2240 The method %1$s in the class %2$s is already overridden by the module %3$s version %4$s at %5$s. The method %1$s in the class %2$s is already overridden by the module %3$s version %4$s at %5$s. - Line: 2899 + Line: 2922 The method %1$s in the class %2$s is already overridden. The method %1$s in the class %2$s is already overridden. - Line: 2902 + Line: 2925 Failed to override method %1$s in class %2$s. Failed to override method %1$s in class %2$s. - Line: 2979 + Line: 3002 The property %1$s in the class %2$s is already defined. The property %1$s in the class %2$s is already defined. - Line: 2914 + Line: 2937 Failed to override property %1$s in class %2$s. Failed to override property %1$s in class %2$s. - Line: 2987 + Line: 3010 The constant %1$s in the class %2$s is already defined. The constant %1$s in the class %2$s is already defined. - Line: 2926 + Line: 2949 Failed to override constant %1$s in class %2$s. Failed to override constant %1$s in class %2$s. - Line: 2995 + Line: 3018 @@ -384,6 +394,21 @@ Please select a module to unhook. Line: 213 + + This module cannot be loaded. + This module cannot be loaded. + Line: 222 + + + Hook cannot be loaded. + Hook cannot be loaded. + Line: 224 + + + An error occurred while deleting the module from its hook. + An error occurred while deleting the module from its hook. + Line: 227 + @@ -482,6 +507,15 @@ + + + + The override file %1$s conflicts with an existing override in %2$s. + The override file %1$s conflicts with an existing override in %2$s. + Line: 91 + + + @@ -513,49 +547,24 @@ Configuration successfully applied. Line: 183 - - Cannot %action% module %module%. %error_details% - Cannot %action% module %module%. %error_details% - Line: 207 - - - %action% action on module %module% succeeded. - %action% action on module %module% succeeded. - Line: 193 - - + - - This module cannot be loaded. - This module cannot be loaded. - Line: 182 - - - Hook cannot be loaded. - Hook cannot be loaded. - Line: 191 - - - An error occurred while deleting the module from its hook. - An error occurred while deleting the module from its hook. - Line: 200 - - - The module transplanted successfully to the hook. - The module transplanted successfully to the hook. - Line: 236 - - - The module was successfully removed from the hook. - The module was successfully removed from the hook. - Line: 237 + + Cannot %action% module %module%. %error_details% + Cannot %action% module %module%. %error_details% + Line: 514 + + %action% action on module %module% succeeded. + %action% action on module %module% succeeded. + Line: 263 + %module% did not return a valid response on installation. %module% did not return a valid response on installation. diff --git a/translations/default/AdminNavigationHeader.xlf b/translations/default/AdminNavigationHeader.xlf index 58a59c62c50bd..e62987ab11d55 100644 --- a/translations/default/AdminNavigationHeader.xlf +++ b/translations/default/AdminNavigationHeader.xlf @@ -97,27 +97,27 @@ - + Quick Access Quick Access - Line: 26 + Line: 28 Please name this shortcut: Please name this shortcut: - Line: 60 + Line: 64 Remove from Quick Access Remove from Quick Access - Line: 49 + Line: 53 Manage your quick accesses Manage your quick accesses - Line: 69 + Line: 73 @@ -343,13 +343,17 @@ - + Search store name Search store name - Line: 67 + Line: 33 + + + + Customize your multistore header, [1]pick a color[/1] for this store context. Customize your multistore header, [1]pick a color[/1] for this store context. diff --git a/translations/default/AdminNavigationMenu.xlf b/translations/default/AdminNavigationMenu.xlf index fd3bb1bf18f0c..86dbe39977883 100644 --- a/translations/default/AdminNavigationMenu.xlf +++ b/translations/default/AdminNavigationMenu.xlf @@ -386,366 +386,244 @@ Comment: subtab Authorization Server Line: 133 - - - - Files Files - Line: 76 - - - - - - - List of applications - List of applications - Line: 63 + Line: 34 - - - - DB Backup DB Backup Line: 58 - - - - Categories Categories - Line: 110 + Line: 42 - - - - Credit Slips Credit Slips - Line: 78 + Line: 50 - - - - Currencies Currencies - Line: 74 + Line: 52 - - - - Email Email - Line: 87 + Line: 60 - - - - - Line: 67 + Line: 106 - - - - Orders Orders - Line: 154 + Line: 90 - - - - Products Products - Line: 137 + Line: 100 - - - - Search Engines Search Engines - Line: 76 + Line: 105 - - - - States States - Line: 79 + Line: 113 - - - - Suppliers Suppliers - Line: 76 + Line: 121 - - - - Tax Rules Tax Rules - Line: 70 + Line: 125 - - - - Administration Administration - Line: 68 - - - - - - - Authorization Server Management - Authorization Server Management - Line: 58 + Line: 31 - - - - Import Import - Line: 323 + Line: 51 - - - - Logs Logs - Line: 66 + Line: 77 - - - - Performance Performance - Line: 74 + Line: 95 - - - - Profiles Profiles - Line: 81 - - - - - - - Customer Sessions - Customer Sessions - Line: 215 - - - Employee Sessions - Employee Sessions - Line: 185 + Line: 101 Security Security - Line: 78 + Line: 138 - - - - SQL Manager SQL Manager - Line: 347 + Line: 112 - - - - Information Information - Line: 56 + Line: 69 - - - - Contacts Contacts - Line: 67 + Line: 48 - - - - Customers Customers - Line: 100 + Line: 55 - - - - Maintenance Maintenance - Line: 60 - - - - - - - Order settings - Order settings - Line: 56 + Line: 79 - - - - Product Settings Product Settings - Line: 59 + Line: 99 - - - - Titles Titles - Line: 65 + Line: 128 - - - - - - Email Theme - Email Theme - Line: 82 - - - - - Positions Positions - Line: 139 + Line: 97 - - - - Geolocation Geolocation - Line: 61 + Line: 65 - - - - Localization Localization - Line: 68 + Line: 74 - - - - Payment Methods Payment Methods - Line: 64 + Line: 92 - - - - Preferences Preferences - Line: 177 + Line: 93 - - - - Stock Stock - Line: 45 + Line: 119 - - - - Outstanding Outstanding - Line: 61 + Line: 91 - - - - Order Messages Order Messages - Line: 68 + Line: 88 - - - - Delivery Slips Delivery Slips - Line: 83 + Line: 59 + + + Translations + Translations + Line: 130 + + + International + International + Line: 71 + + + + + + + List of applications + List of applications + Line: 63 + + + + + + + Customer Sessions + Customer Sessions + Line: 93 + + + + + + + Employee Sessions + Employee Sessions + Line: 93 + + + + + + + Authorization Server Management + Authorization Server Management + Line: 58 + + + + + + + Order settings + Order settings + Line: 56 + + + + + + + Email Theme + Email Theme + Line: 82 @@ -794,18 +672,4 @@ Comment: subtab - - - - Translations - Translations - Line: 51 - - - International - International - Line: 50 - - - diff --git a/translations/default/AdminNavigationNotification.xlf b/translations/default/AdminNavigationNotification.xlf index fafcb4bcebf57..3a615751a2722 100644 --- a/translations/default/AdminNavigationNotification.xlf +++ b/translations/default/AdminNavigationNotification.xlf @@ -97,36 +97,36 @@ - - - - An error occurred while updating new window property. - An error occurred while updating new window property. - Line: 231 - - - An error occurred while updating the new window property for this object. - An error occurred while updating the new window property for this object. - Line: 234 - - - - + Have you checked your [1][2]abandoned carts[/2][/1]?[3]Your next order could be hiding there! Have you checked your [1][2]abandoned carts[/2][/1]?[3]Your next order could be hiding there! - Line: 225 + Line: 2105 Are you active on social media these days? Are you active on social media these days? - Line: 237 + Line: 2118 Seems like all your customers are happy :) Seems like all your customers are happy :) - Line: 240 + Line: 2121 + + + + + + + An error occurred while updating new window property. + An error occurred while updating new window property. + Line: 231 + + + An error occurred while updating the new window property for this object. + An error occurred while updating the new window property for this object. + Line: 234 diff --git a/translations/default/AdminNotificationsError.xlf b/translations/default/AdminNotificationsError.xlf index 2f448b46157aa..8ae324c14647c 100644 --- a/translations/default/AdminNotificationsError.xlf +++ b/translations/default/AdminNotificationsError.xlf @@ -45,6 +45,20 @@ + + + + Property %s is empty. + Property %s is empty. + Line: 406 + + + The %s field is required. + The %s field is required. + Line: 399 + + + @@ -142,6 +156,11 @@ File has an invalid extension, it should be one of these: %s. Line: 99 + + The uploaded file is too large. + The uploaded file is too large. + Line: 89 + @@ -161,6 +180,11 @@ Error while uploading image; please change your server's settings. Line: 547 + + Image format not recognized, allowed formats are: %s + Image format not recognized, allowed formats are: %s + Line: 516 + @@ -198,11 +222,6 @@ - - Property %s is empty. - Property %s is empty. - Line: 1202 - Property %1$s has a bad value (allowed values are: %2$s). Property %1$s has a bad value (allowed values are: %2$s). @@ -243,6 +262,11 @@ The range of property %1$s is currently %2$d. It must be between %3$d and %4$d. Line: 1257 + + The %1$s field is too long (%2$d chars max). + The %1$s field is too long (%2$d chars max). + Line: 1235 + @@ -375,6 +399,45 @@ Comment: check if some ids are in list_skip_actions and forbid deletion You need at least one object. Line: 4042 + + Can't delete #%id% + Can't delete #%id% + Line: 4074 + + + You must select at least one item to perform a bulk action. + You must select at least one item to perform a bulk action. + Line: 4173 + + + An error occurred when attempting to update the required fields. + An error occurred when attempting to update the required fields. + Line: 1368 + + + Unable to delete associated images. + Unable to delete associated images. + Line: 1145 + + + Due to memory limit restrictions, this image cannot be loaded. Please increase your memory_limit value via your server's configuration settings. + Due to memory limit restrictions, this image cannot be loaded. Please increase your memory_limit value via your server's configuration settings. + Line: 4004 + + + The object cannot be loaded (the identifier is missing or invalid) + The object cannot be loaded (the identifier is missing or invalid) + Line: 1779 + + + + + + + Access denied. + Access denied. + Line: 321 + @@ -401,12 +464,12 @@ Comment: check if some ids are in list_skip_actions and forbid deletion file (%s) not writable file (%s) not writable - Line: 2851 + Line: 2874 directory (%s) not writable directory (%s) not writable - Line: 2951 + Line: 2974 @@ -419,6 +482,15 @@ Comment: check if some ids are in list_skip_actions and forbid deletion + + + + This functionality has been disabled. + This functionality has been disabled. + Line: 166 + + + @@ -426,6 +498,36 @@ Comment: check if some ids are in list_skip_actions and forbid deletion Failed to update the position. Line: 780 + + You must select at least one element to delete. + You must select at least one element to delete. + Line: 818 + + + An error occurred while updating the status for an object. + An error occurred while updating the status for an object. + Line: 719 + + + (cannot load object) + (cannot load object) + Line: 720 + + + You do not have permission to delete this. + You do not have permission to delete this. + Line: 821 + + + You do not have permission to edit this. + You do not have permission to edit this. + Line: 771 + + + An error occurred while deleting this selection. + An error occurred while deleting this selection. + Line: 816 + @@ -449,6 +551,16 @@ Comment: check if some ids are in list_skip_actions and forbid deletion Invalid message. Line: 426 + + Bad SQL query + Bad SQL query + Line: 954 + + + Please fill in all the required fields. + Please fill in all the required fields. + Line: 493 + @@ -467,6 +579,20 @@ Comment: check if some ids are in list_skip_actions and forbid deletion An error occurred during the file upload process. Line: 443 + + The email address is invalid. + The email address is invalid. + Line: 427 + + + + + + + The selected date range is not valid. + The selected date range is not valid. + Line: 325 + @@ -494,6 +620,11 @@ Comment: check if some ids are in list_skip_actions and forbid deletion Incorrect value for "Depends on stock" for product %name% Line: 2852 + + Invalid tag(s) (%s) + Invalid tag(s) (%s) + Line: 2095 + @@ -538,6 +669,26 @@ Comment: Error wordings, one_error is not used anymore File upload was not completed. Line: 480 + + File too large (limit of %s bytes). + File too large (limit of %s bytes). + Line: 476 + + + Internal error #%s + Internal error #%s + Line: 488 + + + No file has been selected + No file has been selected + Line: 493 + + + No file was uploaded. + No file was uploaded. + Line: 484 + @@ -679,15 +830,62 @@ Comment: Error wordings, one_error is not used anymore You need at least one object. Line: 680 + + The file is missing. + The file is missing. + Line: 471 + + + An error occurred while updating an object. + An error occurred while updating an object. + Line: 2035 + + + Cannot delete file + Cannot delete file + Line: 1162 + + + An error occurred while uploading the image. + An error occurred while uploading the image. + Line: 1722 + + + Invalid date format. + Invalid date format. + Line: 797 + + + The %s field is not valid + The %s field is not valid + Line: 772 + + + + + + + "%key%" does not exist. + "%key%" does not exist. + Line: 549 + + + + + + + An error occurred while updating the status. + An error occurred while updating the status. + Line: 87 + + + + + An error occurred while creating an object. An error occurred while creating an object. - Line: 1826 - - - An error occurred during deletion. - An error occurred during deletion. - Line: 622 + Line: 710 @@ -729,6 +927,20 @@ Comment: Error wordings, one_error is not used anymore + + + + An error occurred during deletion. + An error occurred during deletion. + Line: 248 + + + An error occurred while deleting the object. + An error occurred while deleting the object. + Line: 253 + + + @@ -741,6 +953,25 @@ Comment: Error wordings, one_error is not used anymore The Zip/Postal code is invalid. Line: 386 + + Your Zip/Postal code is incorrect. + Your Zip/Postal code is incorrect. + Line: 382 + + + It must be entered as follows: + It must be entered as follows: + Line: 382 + + + + + + + You do not have permission to add this. + You do not have permission to add this. + Line: 403 + @@ -797,6 +1028,15 @@ Comment: Error wordings, one_error is not used anymore + + + + The field %field_name% is required at least in your default language. + The field %field_name% is required at least in your default language. + Line: 523 + + + @@ -804,6 +1044,20 @@ Comment: Error wordings, one_error is not used anymore Error while uploading image; please change your server's settings. (Error code: %s) Line: 199 + + Image format not recognized, allowed formats are: .gif, .jpg, .png + Image format not recognized, allowed formats are: .gif, .jpg, .png + Line: 196 + + + + + + + The %s field is invalid. + The %s field is invalid. + Line: 589 + @@ -861,6 +1115,15 @@ Comment: Error wordings, one_error is not used anymore + + + + %s is invalid. + %s is invalid. + Line: 82 + + + @@ -902,105 +1165,26 @@ Comment: Error wordings, one_error is not used anymore - + - - Invalid tag(s) (%s) - Invalid tag(s) (%s) - Line: 1058 + + Invalid selection + Invalid selection + Line: 150 - + - - The selected condition must be different in each field to set an order of priority. - The selected condition must be different in each field to set an order of priority. - Line: 105 - - - - - - - Bad SQL query - Bad SQL query - Line: 60 - - - "%key%" does not exist. - "%key%" does not exist. - Line: 388 - - - - - - - You must select at least one element to delete. - You must select at least one element to delete. - Line: 51 - - - Can't delete #%id% - Can't delete #%id% - Line: 66 - - - - - - - An error occurred while updating the status for an object. - An error occurred while updating the status for an object. - Line: 70 - - - (cannot load object) - (cannot load object) - Line: 75 - - - An error occurred while updating the status. - An error occurred while updating the status. - Line: 82 - - - - - - - Your Zip/Postal code is incorrect. - Your Zip/Postal code is incorrect. - Line: 95 - - - It must be entered as follows: - It must be entered as follows: - Line: 97 - - - - - - - Invalid selection - Invalid selection - Line: 150 - - - - - - - Category "%s" could not be created. - Category "%s" could not be created. - Line: 155 - - - This product could not be assigned to category "%s". - This product could not be assigned to category "%s". - Line: 160 + + Category "%s" could not be created. + Category "%s" could not be created. + Line: 155 + + + This product could not be assigned to category "%s". + This product could not be assigned to category "%s". + Line: 160 @@ -1013,15 +1197,6 @@ Comment: Error wordings, one_error is not used anymore - - - - Access denied. - Access denied. - Line: 251 - - - @@ -1107,16 +1282,6 @@ Comment: Error wordings, one_error is not used anymore - - This functionality has been disabled. - This functionality has been disabled. - Line: 269 - - - You do not have permission to delete this. - You do not have permission to delete this. - Line: 381 - An unexpected error occurred. [%type% code %code%]: %message% An unexpected error occurred. [%type% code %code%]: %message% @@ -1150,11 +1315,6 @@ Comment: Error wordings, one_error is not used anymore - - File too large (limit of %s bytes). - File too large (limit of %s bytes). - Line: 605 - Themes can only be changed in single store context. Themes can only be changed in single store context. @@ -1184,11 +1344,6 @@ Comment: Error wordings, one_error is not used anymore - - You must select at least one item to perform a bulk action. - You must select at least one item to perform a bulk action. - Line: 587 - You need permission to edit this. You need permission to edit this. @@ -1199,6 +1354,11 @@ Comment: Error wordings, one_error is not used anymore Unexpected error occurred. Line: 426 + + An unexpected error occurred. + An unexpected error occurred. + Line: 427 + @@ -1208,14 +1368,19 @@ Comment: Error wordings, one_error is not used anymore The object cannot be loaded (or found) Line: 332 + + Max file size allowed is "%s" bytes. + Max file size allowed is "%s" bytes. + Line: 342 + - - An unexpected error occurred. - An unexpected error occurred. - Line: 393 + + An error occurred while attempting to save. + An error occurred while attempting to save. + Line: 411 @@ -1230,11 +1395,6 @@ Comment: Error wordings, one_error is not used anymore - - The file is missing. - The file is missing. - Line: 352 - Invalid action Invalid action @@ -1249,16 +1409,6 @@ Comment: Error wordings, one_error is not used anymore - - You do not have permission to edit this. - You do not have permission to edit this. - Line: 936 - - - You do not have permission to add this. - You do not have permission to add this. - Line: 406 - The value of the PHP.ini setting "max_input_vars" must be increased to %value% in order to be able to submit the product form. The value of the PHP.ini setting "max_input_vars" must be increased to %value% in order to be able to submit the product form. @@ -1268,21 +1418,6 @@ Comment: Error wordings, one_error is not used anymore - - Internal error #%s - Internal error #%s - Line: 631 - - - An error occurred while attempting to save. - An error occurred while attempting to save. - Line: 665 - - - An error occurred when attempting to update the required fields. - An error occurred when attempting to update the required fields. - Line: 646 - Invalid data supplied. Invalid data supplied. @@ -1295,15 +1430,6 @@ Comment: Error wordings, one_error is not used anymore - - - - No file has been selected - No file has been selected - Line: 395 - - - @@ -1313,27 +1439,8 @@ Comment: Error wordings, one_error is not used anymore - - - - An error occurred while updating an object. - An error occurred while updating an object. - Line: 281 - - - - - Image format not recognized, allowed formats are: %s - Image format not recognized, allowed formats are: %s - Line: 922 - - - Unable to delete associated images. - Unable to delete associated images. - Line: 883 - You cannot upload more files You cannot upload more files @@ -1341,6 +1448,15 @@ Comment: Error wordings, one_error is not used anymore + + + + Image format not recognized, allowed formats are: .gif, .jpg, .png, .webp + Image format not recognized, allowed formats are: .gif, .jpg, .png, .webp + Line: 726 + + + @@ -1357,21 +1473,6 @@ Comment: Error wordings, one_error is not used anymore - - No file was uploaded. - No file was uploaded. - Line: 329 - - - Cannot delete file - Cannot delete file - Line: 334 - - - Due to memory limit restrictions, this image cannot be loaded. Please increase your memory_limit value via your server's configuration settings. - Due to memory limit restrictions, this image cannot be loaded. Please increase your memory_limit value via your server's configuration settings. - Line: 320 - Invalid ID. Invalid ID. @@ -1386,6 +1487,11 @@ Comment: Error wordings, one_error is not used anymore + + The selected condition must be different in each field to set an order of priority. + The selected condition must be different in each field to set an order of priority. + Line: 1498 + Product price is invalid Product price is invalid @@ -1415,16 +1521,6 @@ Comment: Error wordings, one_error is not used anymore - - An error occurred while uploading the image. - An error occurred while uploading the image. - Line: 535 - - - Image format not recognized, allowed formats are: .gif, .jpg, .png, .webp - Image format not recognized, allowed formats are: .gif, .jpg, .png, .webp - Line: 548 - The address for this supplier has been deleted. The address for this supplier has been deleted. @@ -1432,46 +1528,8 @@ Comment: Error wordings, one_error is not used anymore - - - - The object cannot be loaded (the identifier is missing or invalid) - The object cannot be loaded (the identifier is missing or invalid) - Line: 150 - - - - - - - An error occurred while deleting this selection. - An error occurred while deleting this selection. - Line: 250 - - - An error occurred while deleting the object. - An error occurred while deleting the object. - Line: 246 - - - - - Please fill in all the required fields. - Please fill in all the required fields. - Line: 571 - - - Image format not recognized, allowed formats are: .gif, .jpg, .png - Image format not recognized, allowed formats are: .gif, .jpg, .png - Line: 598 - - - Max file size allowed is "%s" bytes. - Max file size allowed is "%s" bytes. - Line: 594 - Same product quantity is already in cart Same product quantity is already in cart @@ -1571,6 +1629,20 @@ Comment: Error wordings, one_error is not used anymore + + + + This field is invalid + This field is invalid + Line: 163 + + + This field cannot be shorter than %limit% characters + This field cannot be shorter than %limit% characters + Line: 319 + + + @@ -1587,6 +1659,11 @@ Comment: Error wordings, one_error is not used anymore The "%s" field is invalid. HTML tags are not allowed. Line: 137 + + This field cannot be longer than %limit% characters + This field cannot be longer than %limit% characters + Line: 104 + @@ -1607,6 +1684,15 @@ Comment: Error wordings, one_error is not used anymore + + + + This field cannot be empty. + This field cannot be empty. + Line: 72 + + + @@ -1621,31 +1707,8 @@ Comment: Error wordings, one_error is not used anymore - - - - The email address is invalid. - The email address is invalid. - Line: 81 - - - - - - - The uploaded file is too large. - The uploaded file is too large. - Line: 109 - - - - - The %s field is required. - The %s field is required. - Line: 292 - This value should be greater than %value% This value should be greater than %value% @@ -1656,14 +1719,19 @@ Comment: Error wordings, one_error is not used anymore This value should be greater than or equal to %value% Line: 240 + + This value should be less than or equal to %value%. + This value should be less than or equal to %value%. + Line: 255 + - + - - This field is invalid - This field is invalid - Line: 124 + + This field is invalid, it must contain numeric values + This field is invalid, it must contain numeric values + Line: 117 @@ -1683,16 +1751,6 @@ Comment: Error wordings, one_error is not used anymore - - The %s field is invalid. - The %s field is invalid. - Line: 182 - - - This field cannot be shorter than %limit% characters - This field cannot be shorter than %limit% characters - Line: 232 - %s is invalid. Please enter an integer greater than or equal to 0. %s is invalid. Please enter an integer greater than or equal to 0. @@ -1703,11 +1761,6 @@ Comment: Error wordings, one_error is not used anymore %s is invalid. Please enter an integer lower than or equal to %s. Line: 346 - - This field is invalid. - This field is invalid. - Line: 336 - @@ -1724,20 +1777,6 @@ Comment: Error wordings, one_error is not used anymore - - - - This field cannot be empty. - This field cannot be empty. - Line: 207 - - - This field cannot be longer than %limit% characters - This field cannot be longer than %limit% characters - Line: 169 - - - @@ -1752,22 +1791,8 @@ Comment: Error wordings, one_error is not used anymore - - - - This field is invalid, it must contain numeric values - This field is invalid, it must contain numeric values - Line: 74 - - - - - Invalid date format. - Invalid date format. - Line: 53 - This field is required This field is required @@ -1775,15 +1800,6 @@ Comment: Error wordings, one_error is not used anymore - - - - The %s field is not valid - The %s field is not valid - Line: 92 - - - @@ -1793,33 +1809,6 @@ Comment: Error wordings, one_error is not used anymore - - - - The %1$s field is too long (%2$d chars max). - The %1$s field is too long (%2$d chars max). - Line: 179 - - - - - - - This field cannot be longer than %limit% characters. - This field cannot be longer than %limit% characters. - Line: 124 - - - - - - - The field %field_name% is required at least in your default language. - The field %field_name% is required at least in your default language. - Line: 119 - - - @@ -1843,30 +1832,12 @@ Comment: Error wordings, one_error is not used anymore - - - - The selected date range is not valid. - The selected date range is not valid. - Line: 192 - - - - - - - %s is invalid. - %s is invalid. - Line: 135 - - - - + - - This value should be less than or equal to %value%. - This value should be less than or equal to %value%. - Line: 168 + + This field is invalid. + This field is invalid. + Line: 55 @@ -1879,6 +1850,15 @@ Comment: Error wordings, one_error is not used anymore + + + + This field cannot be longer than %limit% characters. + This field cannot be longer than %limit% characters. + Line: 75 + + + diff --git a/translations/default/AdminNotificationsInfo.xlf b/translations/default/AdminNotificationsInfo.xlf index 10d7435a7aeb6..61ee0638284b2 100644 --- a/translations/default/AdminNotificationsInfo.xlf +++ b/translations/default/AdminNotificationsInfo.xlf @@ -33,12 +33,12 @@ - + Delete selected item? Delete selected item? - Line: 863 + Line: 688 @@ -78,7 +78,7 @@ - + Note that this page is available in all shops context only, this is why your context has just switched. @@ -87,6 +87,15 @@ + + + + Note that this feature is only available in the "all stores" context. It will be added to all your stores. + Note that this feature is only available in the "all stores" context. It will be added to all your stores. + Line: 107 + + + @@ -115,15 +124,6 @@ - - - - Note that this feature is only available in the "all stores" context. It will be added to all your stores. - Note that this feature is only available in the "all stores" context. It will be added to all your stores. - Line: 118 - - - @@ -156,6 +156,15 @@ + + + + Note that this page is available in a single shop context only. Switch context to work on it. + Note that this page is available in a single shop context only. Switch context to work on it. + Line: 49 + + + @@ -165,13 +174,4 @@ - - - - Note that this page is available in a single shop context only. Switch context to work on it. - Note that this page is available in a single shop context only. Switch context to work on it. - Line: 37 - - - diff --git a/translations/default/AdminNotificationsSuccess.xlf b/translations/default/AdminNotificationsSuccess.xlf index 5dd21f1237021..b8546947ab3c1 100644 --- a/translations/default/AdminNotificationsSuccess.xlf +++ b/translations/default/AdminNotificationsSuccess.xlf @@ -60,6 +60,45 @@ Successful upgrade. Line: 522 + + Successful deletion + Successful deletion + Line: 494 + + + The settings have been successfully updated. + The settings have been successfully updated. + Line: 499 + + + The status has been successfully updated. + The status has been successfully updated. + Line: 498 + + + Image successfully deleted. + Image successfully deleted. + Line: 500 + + + Comment successfully added. + Comment successfully added. + Line: 504 + + + The selection has been successfully deleted. + The selection has been successfully deleted. + Line: 495 + + + + + + + Successful creation + Successful creation + Line: 489 + @@ -80,15 +119,6 @@ - - - - The settings have been updated. - The settings have been updated. - Line: 111 - - - @@ -112,12 +142,12 @@ - + - - Successful deletion - Successful deletion - Line: 581 + + The settings have been updated. + The settings have been updated. + Line: 136 @@ -147,11 +177,6 @@ - - The settings have been successfully updated. - The settings have been successfully updated. - Line: 133 - Your theme has been correctly exported: %path% Your theme has been correctly exported: %path% @@ -168,22 +193,8 @@ - - - - The status has been successfully updated. - The status has been successfully updated. - Line: 1224 - - - - - Image successfully deleted. - Image successfully deleted. - Line: 482 - The image was successfully deleted. The image was successfully deleted. @@ -214,33 +225,6 @@ - - - - Successful creation - Successful creation - Line: 104 - - - - - - - Comment successfully added. - Comment successfully added. - Line: 1306 - - - - - - - The selection has been successfully deleted. - The selection has been successfully deleted. - Line: 132 - - - diff --git a/translations/default/AdminNotificationsWarning.xlf b/translations/default/AdminNotificationsWarning.xlf index 1a764c63cb7b6..ad7a9a8f3ae6e 100644 --- a/translations/default/AdminNotificationsWarning.xlf +++ b/translations/default/AdminNotificationsWarning.xlf @@ -1,5 +1,14 @@ + + + + No module has been installed. + No module has been installed. + Line: 545 + + + @@ -9,15 +18,6 @@ - - - - No module has been installed. - No module has been installed. - Line: 35 - - - @@ -37,6 +37,15 @@ + + + + Delete selected items? + Delete selected items? + Line: 69 + + + @@ -46,12 +55,21 @@ - + + + + Delete selected item? + Delete selected item? + Line: 126 + + + + Invalid configuration Invalid configuration - Line: 77 + Line: 64 @@ -73,15 +91,6 @@ - - - - Delete selected items? - Delete selected items? - Line: 234 - - - @@ -93,11 +102,6 @@ - - Delete selected item? - Delete selected item? - Line: 94 - Delete selected item from current store? Delete selected item from current store? @@ -110,16 +114,16 @@ - + Delete item Delete item - Line: 121 + Line: 228 - + Maximum value must be higher than minimum value. diff --git a/translations/default/AdminOrderscustomersFeature.xlf b/translations/default/AdminOrderscustomersFeature.xlf index 31b6d8bf66f7e..2f0d165345c1b 100644 --- a/translations/default/AdminOrderscustomersFeature.xlf +++ b/translations/default/AdminOrderscustomersFeature.xlf @@ -568,6 +568,40 @@ Best regards, Net Profit per Visitor Line: 208 + + Free Shipping + Free Shipping + Line: 625 + + + %amount% tax excl. + %amount% tax excl. + Line: 198 + + + Cart #%ID% + Cart #%ID% + Line: 302 + + + Total cart + Total cart + Line: 301 + + + + + + + VAT number + VAT number + Line: 445 + + + Identification number + Identification number + Line: 446 + @@ -592,6 +626,26 @@ Best regards, Order #%id% from %date% Line: 189 + + Date issued + Date issued + Line: 52 + + + Return Merchandise Authorization (RMA) + Return Merchandise Authorization (RMA) + Line: 88 + + + Enable returns + Enable returns + Line: 60 + + + Customer explanation + Customer explanation + Line: 116 + @@ -608,7 +662,7 @@ Best regards, Free order Free order - Line: 277 + Line: 287 @@ -621,15 +675,6 @@ Best regards, - - - - Free Shipping - Free Shipping - Line: 133 - - - @@ -653,15 +698,6 @@ Best regards, - - - - %amount% tax excl. - %amount% tax excl. - Line: 55 - - - @@ -696,16 +732,6 @@ Best regards, - - Cart #%ID% - Cart #%ID% - Line: 72 - - - Total cart - Total cart - Line: 71 - Total Cart Total Cart @@ -763,15 +789,6 @@ Best regards, - - - - Date issued - Date issued - Line: 100 - - - @@ -790,6 +807,20 @@ Best regards, + + + + Registration + Registration + Line: 222 + + + Last visit + Last visit + Line: 230 + + + @@ -807,6 +838,11 @@ Best regards, It looks like you have exceeded the number of tabs allowed. Check your browser settings to open multiple tabs. Line: 449 + + New client + New client + Line: 195 + @@ -830,16 +866,6 @@ Best regards, - - Registration - Registration - Line: 805 - - - Last visit - Last visit - Line: 806 - You can use this feature in a single shop context only. Switch context to enable it. You can use this feature in a single shop context only. Switch context to enable it. @@ -847,15 +873,6 @@ Best regards, - - - - Return Merchandise Authorization (RMA) - Return Merchandise Authorization (RMA) - Line: 126 - - - @@ -867,11 +884,6 @@ Best regards, - - New client - New client - Line: 367 - Add new order Add new order @@ -896,16 +908,6 @@ Best regards, - - VAT number - VAT number - Line: 258 - - - Identification number - Identification number - Line: 137 - Customer email Customer email @@ -982,11 +984,6 @@ Best regards, - - Enable returns - Enable returns - Line: 54 - Return window Return window @@ -999,15 +996,6 @@ Best regards, - - - - Customer explanation - Customer explanation - Line: 90 - - - @@ -1189,16 +1177,6 @@ Best regards, - - - - Set required fields for this section - Set required fields for this section - Line: 37 -Comment: Recommended modules will be attached to here. - - - @@ -1412,6 +1390,11 @@ Comment: Recommended modules will be attached to here. + + Set required fields for this section + Set required fields for this section + Line: 63 + Manage your Customers Manage your Customers @@ -1651,6 +1634,11 @@ Comment: Recommended modules will be attached to here. Add to cart Line: 93 + + Gift + Gift + Line: 210 + @@ -1718,11 +1706,6 @@ Comment: Recommended modules will be attached to here. - - Gift - Gift - Line: 78 - Delivery option Delivery option @@ -1738,11 +1721,6 @@ Comment: Recommended modules will be attached to here. Gift message Line: 93 - - Recycled packaging - Recycled packaging - Line: 64 - @@ -1804,6 +1782,15 @@ Comment: Recommended modules will be attached to here. + + + + Add a product + Add a product + Line: 32 + + + @@ -1813,6 +1800,20 @@ Comment: Recommended modules will be attached to here. + + + + Reference number: + Reference number: + Line: 64 + + + Supplier reference: + Supplier reference: + Line: 67 + + + @@ -1825,11 +1826,6 @@ Comment: Recommended modules will be attached to here. New invoice information Line: 86 - - Edit the price - Edit the price - Line: 68 - @@ -1873,6 +1869,11 @@ Comment: Recommended modules will be attached to here. + + Recycled packaging + Recycled packaging + Line: 117 + Documents Documents @@ -1929,6 +1930,15 @@ Comment: Recommended modules will be attached to here. + + + + Edit the price + Edit the price + Line: 51 + + + @@ -2067,31 +2077,12 @@ Comment: Recommended modules will be attached to here. - + - - Reference number: - Reference number: - Line: 38 - - - Supplier reference: - Supplier reference: - Line: 44 - Refunded Refunded - Line: 70 - - - - - - - Add a product - Add a product - Line: 154 + Line: 79 Partial refund @@ -2113,6 +2104,11 @@ Comment: Recommended modules will be attached to here. This order has been partially paid by voucher. Choose the amount you want to refund: Line: 272 + + Stock location + Stock location + Line: 76 + @@ -2183,11 +2179,6 @@ Comment: Recommended modules will be attached to here. - - Stock location - Stock location - Line: 126 - Shipping details Shipping details diff --git a/translations/default/AdminOrderscustomersNotification.xlf b/translations/default/AdminOrderscustomersNotification.xlf index c4cb90cb52188..7254514589ff0 100644 --- a/translations/default/AdminOrderscustomersNotification.xlf +++ b/translations/default/AdminOrderscustomersNotification.xlf @@ -9,6 +9,20 @@ + + + + The message was successfully sent to the customer. + The message was successfully sent to the customer. + Line: 503 + + + A partial refund was successfully created. + A partial refund was successfully created. + Line: 523 + + + @@ -16,6 +30,16 @@ Invalid new order status Line: 365 + + expires on %s. + expires on %s. + Line: 147 + + + downloadable %d time(s) + downloadable %d time(s) + Line: 150 + @@ -30,6 +54,11 @@ The order cannot be renewed. Line: 602 + + You must add a minimum quantity of %d + You must add a minimum quantity of %d + Line: 512 + @@ -93,6 +122,11 @@ The order invoice cannot be found within your database. Line: 230 + + The order cannot be found within your database. + The order cannot be found within your database. + Line: 218 + @@ -157,13 +191,17 @@ - + Direct link Direct link - Line: 490 + Line: 311 + + + + There is no status defined for this order. There is no status defined for this order. @@ -171,26 +209,12 @@ - - - - expires on %s. - expires on %s. - Line: 427 - - - downloadable %d time(s) - downloadable %d time(s) - Line: 428 - - - [Generated] CartRule for Free Shipping [Generated] CartRule for Free Shipping - Line: 444 + Line: 445 @@ -212,15 +236,6 @@ - - - - The order cannot be found within your database. - The order cannot be found within your database. - Line: 71 - - - @@ -235,13 +250,17 @@ - + An account already exists for this email address: An account already exists for this email address: - Line: 931 + Line: 529 + + + + This customer does not exist. This customer does not exist. @@ -269,15 +288,6 @@ - - - - The message was successfully sent to the customer. - The message was successfully sent to the customer. - Line: 168 - - - @@ -301,15 +311,6 @@ - - - - You must add a minimum quantity of %d - You must add a minimum quantity of %d - Line: 607 - - - @@ -321,11 +322,6 @@ - - A partial refund was successfully created. - A partial refund was successfully created. - Line: 603 - You have to select a shop before creating new orders. You have to select a shop before creating new orders. @@ -518,12 +514,12 @@ - + No cart is available No cart is available - Line: 65 + Line: 73 @@ -635,11 +631,6 @@ Are you sure you want to create a new invoice? Line: 67 - - Are you sure you want to edit this product price? It will be applied to all invoices of this order. - Are you sure you want to edit this product price? It will be applied to all invoices of this order. - Line: 71 - @@ -653,6 +644,11 @@ + + Are you sure you want to edit this product price? It will be applied to all invoices of this order. + Are you sure you want to edit this product price? It will be applied to all invoices of this order. + Line: 54 + Are you sure you want to edit this product price? It will be applied to all identical products in this order. Are you sure you want to edit this product price? It will be applied to all identical products in this order. diff --git a/translations/default/AdminPaymentNotification.xlf b/translations/default/AdminPaymentNotification.xlf index 14add93be125d..4197951393c38 100644 --- a/translations/default/AdminPaymentNotification.xlf +++ b/translations/default/AdminPaymentNotification.xlf @@ -46,14 +46,10 @@ No carrier Line: 668 - - - - %d image(s) %d image(s) - Line: 393 + Line: 472 diff --git a/translations/default/AdminShippingFeature.xlf b/translations/default/AdminShippingFeature.xlf index 3c717fd8f4e54..07b2359c9883d 100644 --- a/translations/default/AdminShippingFeature.xlf +++ b/translations/default/AdminShippingFeature.xlf @@ -106,12 +106,12 @@ - + Free shipping Free shipping - Line: 218 + Line: 26 @@ -280,23 +280,15 @@ Maximum package weight Line: 371 - - - - Name: Name: - Line: 866 + Line: 692 - - - - Delay Delay - Line: 113 + Line: 85 @@ -309,17 +301,17 @@ - + Handling charges Handling charges - Line: 87 + Line: 106 Free shipping starts at Free shipping starts at - Line: 111 + Line: 114 @@ -355,6 +347,24 @@ + + + + Tracking number + Tracking number + Line: 49 + + + + + + + Carrier + Carrier + Line: 87 + + + @@ -366,11 +376,6 @@ - - Carrier - Carrier - Line: 44 - Shipping cost Shipping cost @@ -378,13 +383,4 @@ - - - - Tracking number - Tracking number - Line: 48 - - - diff --git a/translations/default/AdminShopparametersFeature.xlf b/translations/default/AdminShopparametersFeature.xlf index d458b7b089a91..79970b38c8298 100644 --- a/translations/default/AdminShopparametersFeature.xlf +++ b/translations/default/AdminShopparametersFeature.xlf @@ -234,6 +234,11 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table Image height Line: 181 + + Social title + Social title + Line: 80 + @@ -313,6 +318,20 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table Registration date Line: 304 + + Show prices + Show prices + Line: 397 + + + + + + + Alias + Alias + Line: 4631 + @@ -521,11 +540,6 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table It will only be applied to the multistore header to highlight your shop context. Line: 432 - - Store name - Store name - Line: 405 - @@ -564,10 +578,60 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table Return status Line: 488 + + Send email to customer + Send email to customer + Line: 95 + + + Consider the associated order as validated. + Consider the associated order as validated. + Line: 318 + + + Hide this status in all customer orders. + Hide this status in all customer orders. + Line: 340 + + + Attach invoice PDF to email. + Attach invoice PDF to email. + Line: 362 + + + Attach delivery slip PDF to email. + Attach delivery slip PDF to email. + Line: 373 + + + Set the order as shipped. + Set the order as shipped. + Line: 384 + + + Set the order as paid. + Set the order as paid. + Line: 395 + + + Allow a customer to download and view PDF versions of their invoices. + Allow a customer to download and view PDF versions of their invoices. + Line: 329 + + + Send an email to the customer when their order status has changed. + Send an email to the customer when their order status has changed. + Line: 351 + + + Store name + Store name + Line: 476 + Add new store Add new store @@ -694,12 +758,21 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table - + + + + Search + Search + Line: 391 + + + + Visits Visits - Line: 190 + Line: 317 @@ -729,10 +802,33 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table Visitors Line: 352 + + + + Unknown Unknown - Line: 474 + Line: 339 + + + Male + Male + Line: 217 + + + Female + Female + Line: 218 + + + + + + + Product name + Product name + Line: 289 @@ -757,16 +853,6 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table - - Male - Male - Line: 58 - - - Female - Female - Line: 59 - Other Other @@ -774,15 +860,6 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table - - - - Send email to customer - Send email to customer - Line: 122 - - - @@ -790,23 +867,10 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table GET variable Line: 107 - - - - - - Social title - Social title - Line: 109 - - - - - - - Search - Search - Line: 59 + + Server + Server + Line: 100 @@ -837,15 +901,6 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table - - - - Alias - Alias - Line: 67 - - - @@ -1069,6 +1124,11 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table Set backorder status Line: 152 + + Minimum purchase total required in order to validate the order + Minimum purchase total required in order to validate the order + Line: 103 + @@ -1090,15 +1150,6 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table - - - - Minimum purchase total required in order to validate the order - Minimum purchase total required in order to validate the order - Line: 128 - - - @@ -1110,46 +1161,6 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table - - Consider the associated order as validated. - Consider the associated order as validated. - Line: 137 - - - Hide this status in all customer orders. - Hide this status in all customer orders. - Line: 151 - - - Attach invoice PDF to email. - Attach invoice PDF to email. - Line: 165 - - - Attach delivery slip PDF to email. - Attach delivery slip PDF to email. - Line: 172 - - - Set the order as shipped. - Set the order as shipped. - Line: 179 - - - Set the order as paid. - Set the order as paid. - Line: 186 - - - Allow a customer to download and view PDF versions of their invoices. - Allow a customer to download and view PDF versions of their invoices. - Line: 144 - - - Send an email to the customer when their order status has changed. - Send an email to the customer when their order status has changed. - Line: 158 - Allow a customer to download and view PDF versions of his/her invoices. Allow a customer to download and view PDF versions of his/her invoices. @@ -1169,11 +1180,6 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table - - Show prices - Show prices - Line: 80 - Catalog mode Catalog mode @@ -1204,6 +1210,16 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table Default behavior for disabled products Line: 167 + + Number of days for which the product is considered 'new' + Number of days for which the product is considered 'new' + Line: 102 + + + Max size of product summary + Max size of product summary + Line: 109 + @@ -1225,21 +1241,12 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table - + Products per page Products per page - Line: 93 - - - - - - - Product name - Product name - Line: 65 + Line: 49 Product price @@ -1288,22 +1295,12 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table - + - - Number of days for which the product is considered 'new' - Number of days for which the product is considered 'new' - Line: 125 - - - Max size of product summary - Max size of product summary - Line: 134 - Display remaining quantities when the quantity is lower than Display remaining quantities when the quantity is lower than - Line: 143 + Line: 94 @@ -1373,11 +1370,6 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table - - Server - Server - Line: 50 - $_GET variable $_GET variable @@ -1554,7 +1546,8 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table Add new title Add new title - Line: 31 + Line: 31 +Comment: Stable feature flags form @@ -1567,16 +1560,7 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table - - - - Return statuses - Return statuses - Line: 27 - - - - + Status name @@ -1588,6 +1572,19 @@ Comment: PS_LABEL_OOS_PRODUCTS_BOD on configuration_lang table Color Line: 48 + + + + + + Return statuses + Return statuses + Line: 27 + + + + + Email template Email template diff --git a/translations/default/AdminShopparametersHelp.xlf b/translations/default/AdminShopparametersHelp.xlf index 14fbf000b3754..7fe24fd47a698 100644 --- a/translations/default/AdminShopparametersHelp.xlf +++ b/translations/default/AdminShopparametersHelp.xlf @@ -227,6 +227,16 @@ Upload an icon from your computer (File type: .gif, suggested size: 16x16). Line: 305 + + Only letters, numbers and underscores ("_") are allowed. + Only letters, numbers and underscores ("_") are allowed. + Line: 424 + + + Email template for both .html and .txt. + Email template for both .html and .txt. + Line: 425 + @@ -472,20 +482,6 @@ - - - - Only letters, numbers and underscores ("_") are allowed. - Only letters, numbers and underscores ("_") are allowed. - Line: 201 - - - Email template for both .html and .txt. - Email template for both .html and .txt. - Line: 202 - - - @@ -706,10 +702,6 @@ Order's return status name. Line: 41 - - - - Invalid characters: numbers and Invalid characters: numbers and @@ -718,8 +710,12 @@ Status will be highlighted in this color. HTML colors only. Status will be highlighted in this color. HTML colors only. - Line: 83 + Line: 49 + + + + Order status (e.g. 'Pending'). Order status (e.g. 'Pending'). @@ -764,6 +760,11 @@ Only letters and hyphens are allowed. Line: 81 + + To add tags, click in the field, write something, and then press the "Enter" key. + To add tags, click in the field, write something, and then press the "Enter" key. + Line: 70 + @@ -775,13 +776,4 @@ - - - - To add tags, click in the field, write something, and then press the "Enter" key. - To add tags, click in the field, write something, and then press the "Enter" key. - Line: 169 - - - diff --git a/translations/default/AdminShopparametersNotification.xlf b/translations/default/AdminShopparametersNotification.xlf index f6780a89a03ea..86c6ff4f864cf 100644 --- a/translations/default/AdminShopparametersNotification.xlf +++ b/translations/default/AdminShopparametersNotification.xlf @@ -201,12 +201,12 @@ - + Assign a valid page if you want it to be read. Assign a valid page if you want it to be read. - Line: 142 + Line: 118 diff --git a/translations/default/EmailsBody.xlf b/translations/default/EmailsBody.xlf index 1553ed3cfc31d..d6d8179facc53 100644 --- a/translations/default/EmailsBody.xlf +++ b/translations/default/EmailsBody.xlf @@ -18,6 +18,15 @@ + + + + Message from {shop_name} + Message from {shop_name} + Line: 6 + + + @@ -128,11 +137,6 @@ Amount: Line: 54 - - Thank you for shopping with {shop_name}! - Thank you for shopping with {shop_name}! - Line: 8 - @@ -176,11 +180,6 @@ Message from a {shop_name} customer Line: 7 - - Customer message: - Customer message: - Line: 23 - @@ -373,21 +372,6 @@ You can track your package using the following link: Line: 55 - - Order {order_name} - Order {order_name} - Line: 49 - - - %order_history_label% section of your customer account.]]> - %order_history_label% section of your customer account.]]> - Line: 71 - - - %guest_tracking_label% section on our shop.]]> - %guest_tracking_label% section on our shop.]]> - Line: 80 - @@ -409,15 +393,6 @@ - - - - Hi {firstname} {lastname}, - Hi {firstname} {lastname}, - Line: 6 - - - @@ -446,100 +421,6 @@ - - - - Total Tax paid - Total Tax paid - Line: 186 - - - Order details - Order details - Line: 25 - - - Order: - Order: - Line: 30 - - - Placed on - Placed on - Line: 30 - - - Payment: - Payment: - Line: 256 - - - Reference - Reference - Line: 45 - - - Product - Product - Line: 46 - - - Unit price - Unit price - Line: 47 - - - Quantity - Quantity - Line: 48 - - - Total price - Total price - Line: 49 - - - Products - Products - Line: 72 - - - Discounts - Discounts - Line: 100 - - - Gift-wrapping - Gift-wrapping - Line: 129 - - - Shipping - Shipping - Line: 250 - - - Total paid - Total paid - Line: 214 - - - Carrier: - Carrier: - Line: 255 - - - Delivery address - Delivery address - Line: 287 - - - Billing address - Billing address - Line: 312 - - - @@ -557,20 +438,10 @@ Order reference: Line: 31 - - Customer: - Customer: - Line: 30 - - - Message from {shop_name} - Message from {shop_name} - Line: 24 - You have received a new message from [1]{shop_name}[/1] regarding order with the reference [1]{order_name}[/1]. You have received a new message from [1]{shop_name}[/1] regarding order with the reference [1]{order_name}[/1]. @@ -696,35 +567,6 @@ - - - - {product} is nearly out of stock. - {product} is nearly out of stock. - Line: 24 - - - The remaining stock is now less than the specified minimum of - The remaining stock is now less than the specified minimum of - Line: 29 - - - Remaining stock: - Remaining stock: - Line: 30 - - - Stocks[/1] section of your back office to manage your stock.]]> - Stocks[/1] section of your back office to manage your stock.]]> - Line: 31 - - - Hi, - Hi, - Line: 7 - - - @@ -755,6 +597,11 @@ + + Thank you for shopping with {shop_name}! + Thank you for shopping with {shop_name}! + Line: 31 + Your order has been shipped Your order has been shipped @@ -817,20 +664,15 @@ This is to inform you about the creation of a voucher. Line: 24 - - Here is the code of your voucher: - Here is the code of your voucher: - Line: 29 - - - Simply copy/paste this code during the payment process for your next order. - Simply copy/paste this code during the payment process for your next order. - Line: 30 - + + Hi, + Hi, + Line: 7 + This item is once again in-stock. This item is once again in-stock. @@ -855,6 +697,101 @@ + + Customer message: + Customer message: + Line: 327 + + + Total Tax paid + Total Tax paid + Line: 180 + + + Order details + Order details + Line: 31 + + + Order: + Order: + Line: 36 + + + Placed on + Placed on + Line: 36 + + + Payment: + Payment: + Line: 37 + + + Reference + Reference + Line: 52 + + + Product + Product + Line: 53 + + + Unit price + Unit price + Line: 54 + + + Quantity + Quantity + Line: 55 + + + Total price + Total price + Line: 56 + + + Products + Products + Line: 68 + + + Discounts + Discounts + Line: 96 + + + Gift-wrapping + Gift-wrapping + Line: 124 + + + Shipping + Shipping + Line: 152 + + + Total paid + Total paid + Line: 208 + + + Carrier: + Carrier: + Line: 244 + + + Delivery address + Delivery address + Line: 274 + + + Billing address + Billing address + Line: 297 + A new order was placed on {shop_name} by the following customer: {firstname} {lastname} ({email}) A new order was placed on {shop_name} by the following customer: {firstname} {lastname} ({email}) @@ -869,6 +806,21 @@ + + Order {order_name} + Order {order_name} + Line: 24 + + + %order_history_label% section of your customer account.]]> + %order_history_label% section of your customer account.]]> + Line: 45 + + + %guest_tracking_label% section on our shop.]]> + %guest_tracking_label% section on our shop.]]> + Line: 54 + Order edited Order edited @@ -900,8 +852,37 @@ + + + + {product} is nearly out of stock. + {product} is nearly out of stock. + Line: 24 + + + The remaining stock is now less than the specified minimum of + The remaining stock is now less than the specified minimum of + Line: 29 + + + Remaining stock: + Remaining stock: + Line: 30 + + + Stocks[/1] section of your back office to manage your stock.]]> + Stocks[/1] section of your back office to manage your stock.]]> + Line: 31 + + + + + Customer: + Customer: + Line: 29 + Return details Return details @@ -953,6 +934,11 @@ + + Hi {firstname} {lastname}, + Hi {firstname} {lastname}, + Line: 7 + We noticed that during your last visit on {shop_name}, you did not complete the order you had started. We noticed that during your last visit on {shop_name}, you did not complete the order you had started. @@ -978,6 +964,16 @@ Your cart has been saved, you can resume your order by visiting our store: Line: 30 + + Here is your coupon: + Here is your coupon: + Line: 58 + + + Enter this code in your shopping cart to get your discount. + Enter this code in your shopping cart to get your discount. + Line: 59 + @@ -992,16 +988,6 @@ As our way of saying thanks, we want to give you a discount of [1]{amount}%[/1] off your next order! This offer is valid for [1]{days}[/1] days, so do not waste a moment! Line: 23 - - Here is your coupon: - Here is your coupon: - Line: 24 - - - Enter this code in your shopping cart to get your discount. - Enter this code in your shopping cart to get your discount. - Line: 25 - @@ -1049,15 +1035,15 @@ We are pleased to offer you a voucher worth [1]{discount_display} (voucher # {discount_name})[/1] that you can use on your next order. Line: 23 - - Best regards, - Best regards, - Line: 38 - + + Best regards, + Best regards, + Line: 41 + join us! join us! @@ -1092,6 +1078,16 @@ + + Here is the code of your voucher: + Here is the code of your voucher: + Line: 28 + + + Simply copy/paste this code during the payment process for your next order. + Simply copy/paste this code during the payment process for your next order. + Line: 29 + Referral Program Referral Program @@ -1379,11 +1375,6 @@ Your order with the reference [1]{order_name}[/1] is on its way. Line: 128 - - Order ID {order_name} - Order ID {order_name} - Line: 93 - @@ -1421,11 +1412,6 @@ Your order with the reference [1]{order_name}[/1] from [1]{shop_name}[/1] has been canceled by the merchant. Line: 122 - - Go to your customer account to learn more about it. - Go to your customer account to learn more about it. - Line: 127 - @@ -1445,11 +1431,6 @@ Recycled packaging: Line: 313 - - Including total tax - Including total tax - Line: 225 - @@ -1613,20 +1594,6 @@ - - - - Product out of stock - Product out of stock - Line: 3 - - - There are now less than [1]{last_qty}[/1] items in stock. - There are now less than [1]{last_qty}[/1] items in stock. - Line: 121 - - - @@ -1696,15 +1663,15 @@ [1]VOUCHER CODE: {voucher_num}[/1] in the amount of [1]{voucher_amount}[/1] Line: 127 - - - - In order to use it, just copy/paste this code during check out. In order to use it, just copy/paste this code during check out. - Line: 128 + Line: 132 + + + + Voucher new Voucher new @@ -1743,6 +1710,11 @@ + + Including total tax + Including total tax + Line: 208 + New Order New Order @@ -1760,6 +1732,20 @@ + + + + Order ID {order_name} + Order ID {order_name} + Line: 88 + + + Go to your customer account to learn more about it. + Go to your customer account to learn more about it. + Line: 128 + + + @@ -1774,6 +1760,20 @@ + + + + Product out of stock + Product out of stock + Line: 3 + + + There are now less than [1]{last_qty}[/1] items in stock. + There are now less than [1]{last_qty}[/1] items in stock. + Line: 121 + + + @@ -1852,6 +1852,21 @@ Your voucher code on {shop_name} Line: 317 + + We are pleased to offer you a discount of [1]{amount}%[/1] off your next order. And this offer is valid for [1]{days}[/1] days, so do not wait any longer! + We are pleased to offer you a discount of [1]{amount}%[/1] off your next order. And this offer is valid for [1]{days}[/1] days, so do not wait any longer! + Line: 252 + + + Here is your VOUCHER CODE: + Here is your VOUCHER CODE: + Line: 382 + + + Enter this code in your shopping cart to get the discount. + Enter this code in your shopping cart to get the discount. + Line: 387 + @@ -1866,21 +1881,6 @@ Thanks for your order. Line: 50 - - We are pleased to offer you a discount of [1]{amount}%[/1] off your next order. And this offer is valid for [1]{days}[/1] days, so do not wait any longer! - We are pleased to offer you a discount of [1]{amount}%[/1] off your next order. And this offer is valid for [1]{days}[/1] days, so do not wait any longer! - Line: 184 - - - Here is your VOUCHER CODE: - Here is your VOUCHER CODE: - Line: 189 - - - Enter this code in your shopping cart to get the discount. - Enter this code in your shopping cart to get the discount. - Line: 194 - diff --git a/translations/default/EmailsSubject.xlf b/translations/default/EmailsSubject.xlf index 11c271e9ed33a..60e7b24a8cb87 100644 --- a/translations/default/EmailsSubject.xlf +++ b/translations/default/EmailsSubject.xlf @@ -5,7 +5,7 @@ Your guest account has been transformed into a customer account Your guest account has been transformed into a customer account - Line: 1285 + Line: 1288 @@ -59,6 +59,20 @@ + + + + Fwd: Customer message + Fwd: Customer message + Line: 408 + + + An answer to your message is available #ct%thread_id% #tc%thread_token% + An answer to your message is available #ct%thread_id% #tc%thread_token% + Line: 479 + + + @@ -216,22 +230,4 @@ - - - - Fwd: Customer message - Fwd: Customer message - Line: 173 - - - - - - - An answer to your message is available #ct%thread_id% #tc%thread_token% - An answer to your message is available #ct%thread_id% #tc%thread_token% - Line: 153 - - - diff --git a/translations/default/Install.xlf b/translations/default/Install.xlf index eec7a4decc0fa..38c089bd485af 100644 --- a/translations/default/Install.xlf +++ b/translations/default/Install.xlf @@ -32,6 +32,11 @@ Store installation Line: 133 + + Content of your store + Content of your store + Line: 123 + @@ -106,6 +111,96 @@ Fashion and Accessories Line: 210 + + Lingerie and Adult + Lingerie and Adult + Line: 202 + + + Animals and Pets + Animals and Pets + Line: 203 + + + Art and Culture + Art and Culture + Line: 204 + + + Babies + Babies + Line: 205 + + + Beauty and Personal Care + Beauty and Personal Care + Line: 206 + + + Cars + Cars + Line: 207 + + + Computer Hardware and Software + Computer Hardware and Software + Line: 208 + + + Download + Download + Line: 209 + + + Flowers, Gifts and Crafts + Flowers, Gifts and Crafts + Line: 211 + + + Food and beverage + Food and beverage + Line: 212 + + + HiFi, Photo and Video + HiFi, Photo and Video + Line: 213 + + + Home and Garden + Home and Garden + Line: 214 + + + Home Appliances + Home Appliances + Line: 215 + + + Jewelry + Jewelry + Line: 216 + + + Mobile and Telecom + Mobile and Telecom + Line: 217 + + + Services + Services + Line: 218 + + + Shoes and accessories + Shoes and accessories + Line: 219 + + + Travel + Travel + Line: 221 + @@ -446,11 +541,6 @@ Comment: We fill the process step used for Ajax queries - - Content of your store - Content of your store - Line: 29 - Yes Yes @@ -818,96 +908,6 @@ Comment: We fill the process step used for Ajax queries - - Lingerie and Adult - Lingerie and Adult - Line: 234 - - - Animals and Pets - Animals and Pets - Line: 220 - - - Art and Culture - Art and Culture - Line: 221 - - - Babies - Babies - Line: 222 - - - Beauty and Personal Care - Beauty and Personal Care - Line: 223 - - - Cars - Cars - Line: 224 - - - Computer Hardware and Software - Computer Hardware and Software - Line: 225 - - - Download - Download - Line: 226 - - - Flowers, Gifts and Crafts - Flowers, Gifts and Crafts - Line: 228 - - - Food and beverage - Food and beverage - Line: 229 - - - HiFi, Photo and Video - HiFi, Photo and Video - Line: 230 - - - Home and Garden - Home and Garden - Line: 231 - - - Home Appliances - Home Appliances - Line: 232 - - - Jewelry - Jewelry - Line: 233 - - - Mobile and Telecom - Mobile and Telecom - Line: 235 - - - Services - Services - Line: 236 - - - Shoes and accessories - Shoes and accessories - Line: 237 - - - Travel - Travel - Line: 239 - Fashion and accessories Fashion and accessories @@ -1081,15 +1081,15 @@ Comment: We fill the process step used for Ajax queries "%class%" must be an instance of "InstallXmlLoader" Line: 1107 - - - - %query%]]> %query%]]> - Line: 1266 + Line: 328 + + + + %entity%: %message%]]> %entity%: %message%]]> diff --git a/translations/default/ModulesBlockreassuranceAdmin.xlf b/translations/default/ModulesBlockreassuranceAdmin.xlf index c1969c3194c1e..c15ecf0f38502 100644 --- a/translations/default/ModulesBlockreassuranceAdmin.xlf +++ b/translations/default/ModulesBlockreassuranceAdmin.xlf @@ -151,15 +151,6 @@ Comment: Confirm uninstall - - - - CMS Page - CMS Page - Line: 24 - - - @@ -245,6 +236,11 @@ Comment: Confirm uninstall + + CMS Page + CMS Page + Line: 81 + Block Content Block Content @@ -270,6 +266,16 @@ Comment: Confirm uninstall We recommend 3 blocks at maximum. Line: 118 + + None + None + Line: 77 + + + none + none + Line: 57 + @@ -302,11 +308,6 @@ Comment: Confirm uninstall - - None - None - Line: 93 - Header position on all pages Header position on all pages @@ -341,11 +342,6 @@ Comment: Confirm uninstall - - none - none - Line: 41 - Main column Main column diff --git a/translations/default/ModulesContactinfoShop.xlf b/translations/default/ModulesContactinfoShop.xlf index 137b220a566ad..9c1b7648e2bbb 100644 --- a/translations/default/ModulesContactinfoShop.xlf +++ b/translations/default/ModulesContactinfoShop.xlf @@ -41,15 +41,15 @@ Details: Line: 67 + + + + Email us: Email us: Line: 57 - - - - Fax: [1]%fax%[/1] Fax: [1]%fax%[/1] diff --git a/translations/default/ModulesEmailsubscriptionShop.xlf b/translations/default/ModulesEmailsubscriptionShop.xlf index 92fc67afaa1f2..0e792bbd001ba 100644 --- a/translations/default/ModulesEmailsubscriptionShop.xlf +++ b/translations/default/ModulesEmailsubscriptionShop.xlf @@ -68,7 +68,7 @@ - + Newsletter diff --git a/translations/default/ModulesFacetedsearchAdmin.xlf b/translations/default/ModulesFacetedsearchAdmin.xlf index d99c88cf79e24..dba39425eb899 100644 --- a/translations/default/ModulesFacetedsearchAdmin.xlf +++ b/translations/default/ModulesFacetedsearchAdmin.xlf @@ -119,12 +119,12 @@ - + Meta title Meta title - Line: 105 + Line: 93 @@ -288,6 +288,81 @@ Product extras filter Line: 127 + + New filters template + New filters template + Line: 23 + + + You can drag and drop filters to adjust position + You can drag and drop filters to adjust position + Line: 36 + + + Filters: + Filters: + Line: 36 + + + Total filters: %s + Total filters: %s + Line: 42 + + + Filter result limit: + Filter result limit: + Line: 350 + + + Filter style: + Filter style: + Line: 356 + + + Checkbox + Checkbox + Line: 359 + + + Radio button + Radio button + Line: 360 + + + Drop-down list + Drop-down list + Line: 361 + + + List of ranges + List of ranges + Line: 250 + + + Attribute group: %name% (%count% attributes) + Attribute group: %name% (%count% attributes) + Line: 270 + + + Attribute group: %name% (%count% attribute) + Attribute group: %name% (%count% attribute) + Line: 279 + + + This group will allow user to select a color + This group will allow user to select a color + Line: 289 + + + Feature: %name% (%count% values) + Feature: %name% (%count% values) + Line: 329 + + + Feature: %name% (%count% value) + Feature: %name% (%count% value) + Line: 338 + @@ -534,85 +609,6 @@ - - - - New filters template - New filters template - Line: 23 - - - You can drag and drop filters to adjust position - You can drag and drop filters to adjust position - Line: 36 - - - Filters: - Filters: - Line: 36 - - - Total filters: %s - Total filters: %s - Line: 42 - - - Filter result limit: - Filter result limit: - Line: 190 - - - Filter style: - Filter style: - Line: 196 - - - Checkbox - Checkbox - Line: 199 - - - Radio button - Radio button - Line: 200 - - - Drop-down list - Drop-down list - Line: 201 - - - List of ranges - List of ranges - Line: 72 - - - Attribute group: %name% (%count% attributes) - Attribute group: %name% (%count% attributes) - Line: 110 - - - Attribute group: %name% (%count% attribute) - Attribute group: %name% (%count% attribute) - Line: 119 - - - This group will allow user to select a color - This group will allow user to select a color - Line: 129 - - - Feature: %name% (%count% values) - Feature: %name% (%count% values) - Line: 169 - - - Feature: %name% (%count% value) - Feature: %name% (%count% value) - Line: 178 - - - @@ -620,6 +616,10 @@ URL Line: 21 + + + + When the Faceted Search module is enabled, you can get more detailed URLs by choosing the word that best represent this attribute. By default, PrestaShop uses the attribute's name, but you can change that setting using this field. When the Faceted Search module is enabled, you can get more detailed URLs by choosing the word that best represent this attribute. By default, PrestaShop uses the attribute's name, but you can change that setting using this field. diff --git a/translations/default/ModulesFacetedsearchShop.xlf b/translations/default/ModulesFacetedsearchShop.xlf index de5e728c5a9ef..8afecf1e8eea4 100644 --- a/translations/default/ModulesFacetedsearchShop.xlf +++ b/translations/default/ModulesFacetedsearchShop.xlf @@ -1,86 +1,86 @@ - + Price Price - Line: 502 + Line: 236 Weight Weight - Line: 504 + Line: 324 New New - Line: 333 + Line: 370 Used Used - Line: 338 + Line: 378 Refurbished Refurbished - Line: 343 + Line: 386 Condition Condition - Line: 506 + Line: 411 Not available Not available - Line: 302 + Line: 460 Available Available - Line: 307 + Line: 452 In stock In stock - Line: 312 + Line: 444 Availability Availability - Line: 510 + Line: 529 Brand Brand - Line: 512 + Line: 689 Categories Categories - Line: 514 + Line: 1017 New product New product - Line: 364 + Line: 571 On sale On sale - Line: 369 + Line: 554 Discounted Discounted - Line: 374 + Line: 594 Selections Selections - Line: 508 + Line: 622 diff --git a/translations/default/ModulesLinklistAdmin.xlf b/translations/default/ModulesLinklistAdmin.xlf index 109501744868e..b0cde17af6273 100644 --- a/translations/default/ModulesLinklistAdmin.xlf +++ b/translations/default/ModulesLinklistAdmin.xlf @@ -30,6 +30,11 @@ ID Line: 91 + + Name of the block + Name of the block + Line: 98 + @@ -48,11 +53,6 @@ - - Name of the block - Name of the block - Line: 114 - Name of the block cannot be longer than %limit% characters Name of the block cannot be longer than %limit% characters diff --git a/translations/default/ModulesProductcommentsAdmin.xlf b/translations/default/ModulesProductcommentsAdmin.xlf index 9e587ea7f8d35..8d137839e9ca1 100644 --- a/translations/default/ModulesProductcommentsAdmin.xlf +++ b/translations/default/ModulesProductcommentsAdmin.xlf @@ -1,5 +1,24 @@ + + + + Valid for the entire catalog + Valid for the entire catalog + Line: 300 + + + Restricted to some categories + Restricted to some categories + Line: 301 + + + Restricted to some products + Restricted to some products + Line: 302 + + + @@ -249,25 +268,6 @@ Comment: retro compat 1.5 - - - - Valid for the entire catalog - Valid for the entire catalog - Line: 340 - - - Restricted to some categories - Restricted to some categories - Line: 341 - - - Restricted to some products - Restricted to some products - Line: 342 - - - diff --git a/translations/default/ModulesProductcommentsShop.xlf b/translations/default/ModulesProductcommentsShop.xlf index 43dfe36cbed69..b60bc1300c32e 100644 --- a/translations/default/ModulesProductcommentsShop.xlf +++ b/translations/default/ModulesProductcommentsShop.xlf @@ -189,15 +189,15 @@ Please choose a rating for your review. Line: 28 - - - - Write your review Write your review - Line: 45 + Line: 36 + + + + Read user reviews Read user reviews diff --git a/translations/default/ShopFormsHelp.xlf b/translations/default/ShopFormsHelp.xlf index ac774e8975f11..142693bbbc99b 100644 --- a/translations/default/ShopFormsHelp.xlf +++ b/translations/default/ShopFormsHelp.xlf @@ -45,14 +45,10 @@ Customer password is too weak Line: 103 - - - - Enter a password to transform your guest account into a customer account. Enter a password to transform your guest account into a customer account. - Line: 131 + Line: 91 diff --git a/translations/default/ShopFormsLabels.xlf b/translations/default/ShopFormsLabels.xlf index b3bd9e60d7b71..0229542b4c972 100644 --- a/translations/default/ShopFormsLabels.xlf +++ b/translations/default/ShopFormsLabels.xlf @@ -126,14 +126,19 @@ Comment: Please localize this string with the applicable registration number typ Message Line: 101 + + Email address + Email address + Line: 58 + - + Your email address Your email address - Line: 50 + Line: 42 @@ -203,15 +208,6 @@ Comment: Please localize this string with the applicable registration number typ - - - - Email address - Email address - Line: 53 - - - diff --git a/translations/default/ShopNotificationsError.xlf b/translations/default/ShopNotificationsError.xlf index 08777e0c9b63e..db1afb8295499 100644 --- a/translations/default/ShopNotificationsError.xlf +++ b/translations/default/ShopNotificationsError.xlf @@ -104,12 +104,12 @@ This cart has expired. This cart has expired. - Line: 1323 + Line: 1334 This cart was already used in an order and has expired. This cart was already used in an order and has expired. - Line: 1330 + Line: 1341 @@ -347,6 +347,21 @@ We couldn't find your order with the information provided, please try again Line: 78 + + A customer account has already been created from this guest account. Please sign in. + A customer account has already been created from this guest account. Please sign in. + Line: 112 + + + An unexpected error occurred while creating your account. + An unexpected error occurred while creating your account. + Line: 132 + + + You can't transform your account into a customer account, because a registered customer with the same email already exists. + You can't transform your account into a customer account, because a registered customer with the same email already exists. + Line: 119 + @@ -360,16 +375,6 @@ - - A customer account has already been created from this guest account. Please sign in. - A customer account has already been created from this guest account. Please sign in. - Line: 186 - - - An unexpected error occurred while creating your account. - An unexpected error occurred while creating your account. - Line: 199 - Password must be between %d and %d characters long Password must be between %d and %d characters long @@ -546,12 +551,12 @@ An error occurred during the image upload process. An error occurred during the image upload process. - Line: 949 + Line: 954 Invalid message. Invalid message. - Line: 977 + Line: 982 diff --git a/translations/default/ShopNotificationsSuccess.xlf b/translations/default/ShopNotificationsSuccess.xlf index ec763adca86f2..f93caf0eeaf3d 100644 --- a/translations/default/ShopNotificationsSuccess.xlf +++ b/translations/default/ShopNotificationsSuccess.xlf @@ -19,6 +19,15 @@ + + + + Your guest account has been successfully transformed into a customer account. You can now log in as a registered shopper. + Your guest account has been successfully transformed into a customer account. You can now log in as a registered shopper. + Line: 126 + + + @@ -28,15 +37,6 @@ - - - - Your guest account has been successfully transformed into a customer account. You can now log in as a registered shopper. - Your guest account has been successfully transformed into a customer account. You can now log in as a registered shopper. - Line: 193 - - - diff --git a/translations/default/ShopNotificationsWarning.xlf b/translations/default/ShopNotificationsWarning.xlf index d33a4cbd5cdcc..f13d0e80108d0 100644 --- a/translations/default/ShopNotificationsWarning.xlf +++ b/translations/default/ShopNotificationsWarning.xlf @@ -5,7 +5,7 @@ You cannot place a new order from your country (%s). You cannot place a new order from your country (%s). - Line: 951 + Line: 962 @@ -14,7 +14,7 @@ You cannot return merchandise with a guest account. You cannot return merchandise with a guest account. - Line: 148 + Line: 155 diff --git a/translations/default/ShopPdf.xlf b/translations/default/ShopPdf.xlf index 5f1a208d0b4ba..d588fc04c76e5 100644 --- a/translations/default/ShopPdf.xlf +++ b/translations/default/ShopPdf.xlf @@ -5,7 +5,7 @@ : : - Line: 1223 + Line: 1227 @@ -78,6 +78,35 @@ + + + + Product + Product + Line: 30 + + + %s: + %s: + Line: 84 + + + image(s): + image(s): + Line: 95 + + + Reference + Reference + Line: 29 + + + Qty + Qty + Line: 31 + + + @@ -85,6 +114,16 @@ Carrier Line: 30 + + Order Reference + Order Reference + Line: 27 + + + Order date + Order date + Line: 28 + @@ -94,6 +133,21 @@ An electronic version of this invoice is available in your account. To access it, log in to our website using your e-mail address and password (which you created when placing your first order). Line: 29 + + For more assistance, contact Support: + For more assistance, contact Support: + Line: 35 + + + Tel: %s + Tel: %s + Line: 37 + + + Fax: %s + Fax: %s + Line: 41 + @@ -108,6 +162,16 @@ Billing Address Line: 31 + + Delivery address + Delivery address + Line: 27 + + + Billing address + Billing address + Line: 31 + @@ -130,26 +194,6 @@ - - Product - Product - Line: 34 - - - %s: - %s: - Line: 125 - - - image(s): - image(s): - Line: 134 - - - Reference - Reference - Line: 33 - (Tax excl.) (Tax excl.) @@ -180,16 +224,6 @@ Total Line: 49 - - Qty - Qty - Line: 47 - - - Tax Rate - Tax Rate - Line: 36 - @@ -204,6 +238,11 @@ Invoice Date Line: 28 + + VAT Number + VAT Number + Line: 32 + @@ -286,16 +325,6 @@ Line: 36 - - Delivery address - Delivery address - Line: 28 - - - Billing address - Billing address - Line: 32 - @@ -418,25 +447,6 @@ - - - - Order Reference - Order Reference - Line: 27 - - - Order date - Order date - Line: 28 - - - VAT Number - VAT Number - Line: 30 - - - @@ -476,25 +486,6 @@ - - - - For more assistance, contact Support: - For more assistance, contact Support: - Line: 31 - - - Tel: %s - Tel: %s - Line: 33 - - - Fax: %s - Fax: %s - Line: 37 - - - @@ -532,10 +523,25 @@ Tax rate Line: 38 + + Total TE + Total TE + Line: 37 + + + Total TI + Total TI + Line: 39 + + + Tax Rate + Tax Rate + Line: 31 + No taxes No taxes @@ -560,16 +566,6 @@ - - Total TE - Total TE - Line: 42 - - - Total TI - Total TI - Line: 54 - Summary: Summary: diff --git a/translations/default/ShopThemeActions.xlf b/translations/default/ShopThemeActions.xlf index a5707c13fcd6f..71acb0dc6a3e9 100644 --- a/translations/default/ShopThemeActions.xlf +++ b/translations/default/ShopThemeActions.xlf @@ -55,6 +55,20 @@ + + + + Choose file + Choose file + Line: 92 + + + Send + Send + Line: 131 + + + @@ -82,6 +96,20 @@ + + + + Proceed to checkout + Proceed to checkout + Line: 92 + + + Continue shopping + Continue shopping + Line: 91 + + + @@ -148,11 +176,6 @@ - - Choose file - Choose file - Line: 54 - Remove Image Remove Image @@ -190,6 +213,20 @@ Select Line: 35 + + Choose + Choose + Line: 35 + + + + + + + Download + Download + Line: 207 + @@ -199,28 +236,19 @@ Cancel Line: 42 - - - - - - Delete - Delete - Line: 61 - - - Save - Save - Line: 69 + + Continue + Continue + Line: 39 - + - - Proceed to checkout - Proceed to checkout - Line: 40 + + Edit + Edit + Line: 54 @@ -265,33 +293,6 @@ - - - - Edit - Edit - Line: 39 - - - - - - - Choose - Choose - Line: 43 - - - - - - - Continue - Continue - Line: 111 - - - @@ -301,15 +302,6 @@ - - - - Continue shopping - Continue shopping - Line: 48 - - - @@ -319,30 +311,26 @@ - + - - Update - Update - Line: 38 + + Save + Save + Line: 55 - + - - Download - Download - Line: 162 + + Delete + Delete + Line: 42 - - - - - - Send - Send - Line: 79 + + Update + Update + Line: 38 @@ -392,17 +380,13 @@ - + Back to Login Back to Login - Line: 48 + Line: 97 - - - - Change Password Change Password diff --git a/translations/default/ShopThemeCatalog.xlf b/translations/default/ShopThemeCatalog.xlf index ff9919d42d4e9..85dfd1cf22a59 100644 --- a/translations/default/ShopThemeCatalog.xlf +++ b/translations/default/ShopThemeCatalog.xlf @@ -5,7 +5,7 @@ Unit discount Unit discount - Line: 1643 + Line: 1654 @@ -14,12 +14,12 @@ Items Items - Line: 1218 + Line: 1224 Item Item - Line: 1218 + Line: 1224 @@ -63,6 +63,16 @@ List of all brands Line: 104 + + %number% products + %number% products + Line: 211 + + + %number% product + %number% product + Line: 211 + @@ -85,16 +95,6 @@ - - %number% products - %number% products - Line: 212 - - - %number% product - %number% product - Line: 213 - List of products by supplier %supplier_name% List of products by supplier %supplier_name% @@ -128,6 +128,46 @@ Reference, Z to A Line: 127 + + Sales, highest to lowest + Sales, highest to lowest + Line: 106 + + + Date added, newest to oldest + Date added, newest to oldest + Line: 136 + + + Date added, oldest to newest + Date added, oldest to newest + Line: 133 + + + Name, A to Z + Name, A to Z + Line: 112 + + + Name, Z to A + Name, Z to A + Line: 115 + + + Price, low to high + Price, low to high + Line: 118 + + + Price, high to low + Price, high to low + Line: 121 + + + Relevance + Relevance + Line: 109 + @@ -153,29 +193,6 @@ - - - - Sales, highest to lowest - Sales, highest to lowest - Line: 62 - - - - - - - Date added, newest to oldest - Date added, newest to oldest - Line: 100 - - - Date added, oldest to newest - Date added, oldest to newest - Line: 103 - - - @@ -245,35 +262,6 @@ - - - - Name, A to Z - Name, A to Z - Line: 140 - - - Name, Z to A - Name, Z to A - Line: 143 - - - Price, low to high - Price, low to high - Line: 146 - - - Price, high to low - Price, high to low - Line: 149 - - - Relevance - Relevance - Line: 137 - - - @@ -309,6 +297,11 @@ No brand Line: 42 + + Brands + Brands + Line: 34 + @@ -434,6 +427,11 @@ No supplier Line: 42 + + Suppliers + Suppliers + Line: 34 + @@ -466,6 +464,11 @@ Your customization: Line: 41 + + Product customization + Product customization + Line: 28 + @@ -500,6 +503,11 @@ Condition Line: 85 + + Reference + Reference + Line: 23 + @@ -583,15 +591,6 @@ - - - - Brands - Brands - Line: 31 - - - @@ -667,45 +666,26 @@ - - - - Suppliers - Suppliers - Line: 28 - - - - - - - Product customization - Product customization - Line: 73 - - - - + - - Reference - Reference - Line: 159 - Unit price Unit price - Line: 36 + Line: 32 Total price Total price - Line: 37 + Line: 33 + + + + Product Product - Line: 33 + Line: 39 diff --git a/translations/default/ShopThemeCheckout.xlf b/translations/default/ShopThemeCheckout.xlf index c61a953f5293e..36955080d86b2 100644 --- a/translations/default/ShopThemeCheckout.xlf +++ b/translations/default/ShopThemeCheckout.xlf @@ -54,6 +54,11 @@ %price% tax excl. Line: 110 + + Free + Free + Line: 92 + @@ -89,7 +94,7 @@ Guest order tracking Guest order tracking - Line: 173 + Line: 180 @@ -98,7 +103,7 @@ Order confirmation Order confirmation - Line: 297 + Line: 307 @@ -111,51 +116,42 @@ - + Discount(s) Discount(s) - Line: 349 + Line: 232 Shipping Shipping - Line: 379 + Line: 260 Included taxes Included taxes - Line: 390 + Line: 272 Taxes Taxes - Line: 391 + Line: 273 1 item 1 item - Line: 425 + Line: 314 %count% items %count% items - Line: 426 + Line: 315 A minimum shopping cart total of %amount% (tax excl.) is required to validate your order. Current cart total is %total% (tax excl.). A minimum shopping cart total of %amount% (tax excl.) is required to validate your order. Current cart total is %total% (tax excl.). - Line: 480 - - - - - - - Free - Free - Line: 236 + Line: 443 @@ -356,11 +352,6 @@ Total products Line: 31 - - Quantity - Quantity - Line: 30 - @@ -571,6 +562,11 @@ + + Quantity + Quantity + Line: 72 + Code Code diff --git a/translations/default/ShopThemeCustomeraccount.xlf b/translations/default/ShopThemeCustomeraccount.xlf index 2fb0f54e5a397..78573677c44c3 100644 --- a/translations/default/ShopThemeCustomeraccount.xlf +++ b/translations/default/ShopThemeCustomeraccount.xlf @@ -105,15 +105,6 @@ - - - - You have given permission to receive your order in recycled packaging. - You have given permission to receive your order in recycled packaging. - Line: 90 - - - @@ -126,11 +117,6 @@ Not you? [1]Log out[/1] Line: 26 - - Create an account - Create an account - Line: 63 - @@ -161,13 +147,17 @@ - + Virtual products can't be returned. Virtual products can't be returned. - Line: 55 + Line: 51 + + + + Returned Returned @@ -322,6 +312,11 @@ + + You have given permission to receive your order in recycled packaging. + You have given permission to receive your order in recycled packaging. + Line: 71 + Order details Order details @@ -515,6 +510,11 @@ + + Create an account + Create an account + Line: 28 + Already have an account? Already have an account? diff --git a/translations/default/ShopThemeGlobal.xlf b/translations/default/ShopThemeGlobal.xlf index a3693f9e9708a..c42960d163687 100644 --- a/translations/default/ShopThemeGlobal.xlf +++ b/translations/default/ShopThemeGlobal.xlf @@ -5,32 +5,32 @@ Undefined Undefined - Line: 946 + Line: 957 Straight rows of keys are easy to guess Straight rows of keys are easy to guess - Line: 1824 + Line: 1836 Short keyboard patterns are easy to guess Short keyboard patterns are easy to guess - Line: 1825 + Line: 1837 Use a longer keyboard pattern with more turns Use a longer keyboard pattern with more turns - Line: 1826 + Line: 1838 Repeats like "aaa" are easy to guess Repeats like "aaa" are easy to guess - Line: 1827 + Line: 1839 Repeats like "abcabcabc" are only slightly harder to guess than "abc" Repeats like "abcabcabc" are only slightly harder to guess than "abc" - Line: 1828 + Line: 1840 Sequences like abc or 6543 are easy to guess @@ -40,97 +40,97 @@ Recent years are easy to guess Recent years are easy to guess - Line: 1830 + Line: 1842 Dates are often easy to guess Dates are often easy to guess - Line: 1831 + Line: 1843 This is a top-10 common password This is a top-10 common password - Line: 1832 + Line: 1844 This is a top-100 common password This is a top-100 common password - Line: 1833 + Line: 1845 This is a very common password This is a very common password - Line: 1834 + Line: 1846 This is similar to a commonly used password This is similar to a commonly used password - Line: 1835 + Line: 1847 A word by itself is easy to guess A word by itself is easy to guess - Line: 1836 + Line: 1848 Names and surnames by themselves are easy to guess Names and surnames by themselves are easy to guess - Line: 1837 + Line: 1849 Common names and surnames are easy to guess Common names and surnames are easy to guess - Line: 1838 + Line: 1850 Use a few words, avoid common phrases Use a few words, avoid common phrases - Line: 1839 + Line: 1851 No need for symbols, digits, or uppercase letters No need for symbols, digits, or uppercase letters - Line: 1840 + Line: 1852 Avoid repeated words and characters Avoid repeated words and characters - Line: 1841 + Line: 1853 Avoid sequences Avoid sequences - Line: 1842 + Line: 1854 Avoid recent years Avoid recent years - Line: 1843 + Line: 1855 Avoid years that are associated with you Avoid years that are associated with you - Line: 1844 + Line: 1856 Avoid dates and years that are associated with you Avoid dates and years that are associated with you - Line: 1845 + Line: 1857 Capitalization doesn't help very much Capitalization doesn't help very much - Line: 1846 + Line: 1858 All-uppercase is almost as easy to guess as all-lowercase All-uppercase is almost as easy to guess as all-lowercase - Line: 1847 + Line: 1859 Reversed words aren't much harder to guess Reversed words aren't much harder to guess - Line: 1848 + Line: 1860 Predictable substitutions like '@' instead of 'a' don't help very much @@ -140,17 +140,17 @@ Add another word or two. Uncommon words are better. Add another word or two. Uncommon words are better. - Line: 1850 + Line: 1862 Sequences like "abc" or "6543" are easy to guess Sequences like "abc" or "6543" are easy to guess - Line: 1829 + Line: 1841 Predictable substitutions like "@" instead of "a" don't help very much Predictable substitutions like "@" instead of "a" don't help very much - Line: 1849 + Line: 1861 @@ -202,12 +202,12 @@ - + Merchandise returns Merchandise returns - Line: 138 + Line: 180 @@ -216,7 +216,7 @@ The page you are looking for was not found. The page you are looking for was not found. - Line: 1455 + Line: 1465 @@ -314,12 +314,12 @@ - + Store information Store information - Line: 27 + Line: 63 @@ -362,20 +362,20 @@ (tax excluded) Line: 429 - - - - (tax incl.) (tax incl.) - Line: 419 + Line: 425 (tax excl.) (tax excl.) - Line: 420 + Line: 426 + + + + Tax included Tax included @@ -423,15 +423,15 @@ Fax: Line: 47 - - Email us: - Email us: - Line: 57 - + + Email us: + Email us: + Line: 67 + Fax: [1]%fax%[/1] Fax: [1]%fax%[/1] @@ -453,12 +453,12 @@ - + Get our latest news and special sales Get our latest news and special sales - Line: 28 + Line: 29 @@ -500,6 +500,15 @@ + + + + %label%: + %label%: + Line: 87 + + + @@ -518,15 +527,6 @@ - - - - %label%: - %label%: - Line: 141 - - - @@ -585,6 +585,11 @@ You are not allowed to access this page. Line: 42 + + 403 Forbidden + 403 Forbidden + Line: 41 + @@ -612,11 +617,6 @@ - - 403 Forbidden - 403 Forbidden - Line: 43 - You cannot access this store from your country. We apologize for the inconvenience. You cannot access this store from your country. We apologize for the inconvenience. diff --git a/translations/default/messages.xlf b/translations/default/messages.xlf index d7a5f668f68a6..1afa2dfabdd29 100644 --- a/translations/default/messages.xlf +++ b/translations/default/messages.xlf @@ -243,11 +243,6 @@ Please note that for security reasons, you can only add modules that are being distributed on PrestaShop Addons, the official marketplace. Line: 56 - - Add a new module - Add a new module - Line: 35 - @@ -526,6 +521,11 @@ + + Add a new module + Add a new module + Line: 70 + List of modules List of modules @@ -548,37 +548,37 @@ - + (%s votes) (%s votes) - Line: 35 + Line: 52 (%s vote) (%s vote) - Line: 35 + Line: 52 Description Description - Line: 52 + Line: 64 Merchant benefits Merchant benefits - Line: 59 + Line: 68 Install module Install module - Line: 92 + Line: 99 View on PrestaShop Addons View on PrestaShop Addons - Line: 94 + Line: 101 @@ -720,7 +720,7 @@ - + %limit% for suhosin.post.max_vars. @@ -732,11 +732,10 @@ %limit% for suhosin.request.max_vars. Line: 40 - - %d - %d - Line: 58 - + + + + You must use this syntax in your translations. Here are several examples: You must use this syntax in your translations. Here are several examples: @@ -744,6 +743,15 @@ + + + + %d + %d + Line: 57 + + + @@ -1006,11 +1014,6 @@ Dec Line: 115 - - From - From - Line: 87 - @@ -1154,6 +1157,11 @@ + + From + From + Line: 358 + Please fill at least one field to perform a search in this list. Please fill at least one field to perform a search in this list. @@ -1184,6 +1192,11 @@ To Line: 365 + + and stay + and stay + Line: 206 + @@ -1312,20 +1325,20 @@ Remove file Line: 178 + + + + File size File size - Line: 32 + Line: 39 You have reached the limit (%s) of files to upload, please remove files to continue uploading You have reached the limit (%s) of files to upload, please remove files to continue uploading - Line: 48 + Line: 56 - - - - Download current file Download current file @@ -1371,15 +1384,6 @@ - - - - and stay - and stay - Line: 79 - - - From 629ce95898058c228105521c7ead00fb7a8cbef1 Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Mon, 23 Sep 2024 16:56:33 +0200 Subject: [PATCH 39/47] changelog 8.2 --- CONTRIBUTORS.md | 4 ++++ docs/CHANGELOG.txt | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 2cf51e3566643..9c339d44a4b1a 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -433,6 +433,7 @@ GitHub contributors: - Jónatan Núñez - Jonathan Danse - Jonathan Lelievre +- Jonathan Renard - Jonathan SAHM - Jonathan Vollebregt - jordiweblidera @@ -508,6 +509,7 @@ GitHub contributors: - Lucas CERDAN - Lucas Rolff - LucasC +- Ludovic Cardinale - Ludovic CHEVRAUX - Lunyyx - Luis David de la Fuente @@ -572,6 +574,7 @@ GitHub contributors: - MatthieuB - mauglee - MaX3315 +- Max Azan - Maxence - Maxence de Flotte - Maxim Krizhanovsky @@ -623,6 +626,7 @@ GitHub contributors: - moncef102 - montes - Morgan Pichat +- Mouleeswaran Ganapathi - mplh - mRaigne - mrAKAR diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index d850aa60a75e2..3bd4d512aab9f 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -23,6 +23,52 @@ needs please refer to https://devdocs.prestashop.com/ for more information. Changelog for PrestaShop 8 +#################################### +# v8.2.0 - (2024-09-23) +#################################### +- Back Office: + - Improvement: + - #36171: Remove email "Preview" from BO section "Statutes" (by @ShaiMagal) + - #36386: Fix typo in pack wording that doesn't make sense (by @Hlavtox) + - #36172: Input type "number" is not styled properly (by @ShaiMagal) + - #36714: Order modules on translation page alphabetically (by @Hlavtox) + - #36936: Remove redirection on cms exception (by @Hlavtox) + - Bug fix: + - #36457: Fix: Pass correct language ID to getAttributesName instead of hardcoded 1 (by @mouleeg) + - #36454: Prevent creating duplicate customers in some scenarios (by @Hlavtox) + - #36287: Fix issue with Product Customizations (by @Codencode) + - #36802: Fix: Error occurs when navigating new admin controllers with empty quick access links (by @Codencode) + - #36639: Check override conflicts at module install (by @ludoviccardinale & @matthieu-rolland) + - #36895: Update AdminCartsController.php (by @Codencode) + - #36914: Added management of the 'addedByModule' field in the "CustomizationField" object (by @Codencode) +- Front Office: + - Improvement: + - #36359: Match URLs with a trailing slash (by @Hlavtox) + - #36451: Enhance TemplateVarShop Function with Shop Group ID for Improved Multi-Shop Support (by @ChronoBrake) + - Bug fix: + - #36454: Prevent creating duplicate customers in some scenarios (by @Hlavtox) + - #36521: Handle hook prefix to allow dashboard module to be saved (by @PrestaEdit) + - #36664: Use attribute public name instead of private name in URL anchors (by @maxldn5) + - #36834: Fix: problems with product customizations issue 1 (by @Codencode) + - #36905: Fix: Cart.php class method _deleteCustomization not deleting all image files from same customization but only first (by @Codencode) +- Core: + - Improvement: + - #36398: Updated PrestaShop Packages (by @github-actions) + - #36417: Updated PrestaShop Packages (by @github-actions) + - #36576: Mail - Reply-To can be the same as the To address (spam indicator - negative points) (by @ShaiMagal) + - #36764: Version number 8.2.0 (by @matks) + - #36657: Add hook for assigning general purpose variables before the core does it (by @matthieu-rolland) + - #36575: Migrate lazy array improvements and cart presenter decoupling from develop to 8.2.x (by @matthieu-rolland) + - #36955: Use basename on user given filename in legacy uploadcontroller (by @matthieu-rolland) + - #36972: Update default catalog 8.2.x (by @ps-jarvis) + - Bug fix: + - #36662: Cast OrderProductForViewing - location to string for Memcached (by @ShaiMagal) + - #36840: Use PHP constants for doctrine config (by @matks) + - #36875: Add attr_stringify_fetches to PDO init config to avoid BC Break (by @fox-john) + - #36689: Can't transformToCustomer while password max length is shorter than default 16 length (by @ShaiMagal) + - Refactoring: + - #36882: Comment search process (by @Hlavtox) + #################################### # v8.1.7 - (2024-06-14) #################################### From 55d74e7db1adeed500499c014f238cae5169e173 Mon Sep 17 00:00:00 2001 From: Dominik Shaim Ulrich Date: Tue, 24 Sep 2024 16:15:55 +0200 Subject: [PATCH 40/47] Update Guest.php --- classes/Guest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/Guest.php b/classes/Guest.php index 2ec177c03c241..9dcc6fc70ac27 100644 --- a/classes/Guest.php +++ b/classes/Guest.php @@ -142,7 +142,7 @@ protected function getBrowser($userAgent) FROM `' . _DB_PREFIX_ . 'web_browser` wb WHERE wb.`name` = \'' . pSQL($k) . '\''); - return $result['id_web_browser']; + return $result['id_web_browser'] ?? null; } } @@ -175,7 +175,7 @@ protected function getOs($userAgent) FROM `' . _DB_PREFIX_ . 'operating_system` os WHERE os.`name` = \'' . pSQL($k) . '\''); - return $result['id_operating_system']; + return $result['id_operating_system'] ?? null; } } From 61540282cefce58d7184de4d9c775acb0f1e63d5 Mon Sep 17 00:00:00 2001 From: Codencode Date: Thu, 26 Sep 2024 08:57:38 +0200 Subject: [PATCH 41/47] Update AdminShopGroupController.php --- controllers/admin/AdminShopGroupController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/admin/AdminShopGroupController.php b/controllers/admin/AdminShopGroupController.php index 0970380ddf2c4..710b03fcdbfeb 100644 --- a/controllers/admin/AdminShopGroupController.php +++ b/controllers/admin/AdminShopGroupController.php @@ -308,7 +308,7 @@ public function renderForm() ]; $this->fields_value = [ - 'active' => true, + 'active' => $obj->id ? (bool) $obj->active : true, ]; return parent::renderForm(); From be337e18a5c34fbf59b347bad05c7bdc0605898d Mon Sep 17 00:00:00 2001 From: prestonBot Date: Mon, 14 Oct 2024 23:04:18 +0000 Subject: [PATCH 42/47] Updated PrestaShop Packages --- composer.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.lock b/composer.lock index 05577bf8e6246..0d5d6c3aecd1b 100644 --- a/composer.lock +++ b/composer.lock @@ -6815,16 +6815,16 @@ }, { "name": "prestashop/ps_imageslider", - "version": "v3.1.4", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/PrestaShop/ps_imageslider.git", - "reference": "25c86742d2e0d3e1abc778a82f127b04379fa164" + "reference": "420b175d2f18d0866ece91d4abc3d15c958a7cb3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShop/ps_imageslider/zipball/25c86742d2e0d3e1abc778a82f127b04379fa164", - "reference": "25c86742d2e0d3e1abc778a82f127b04379fa164", + "url": "https://api.github.com/repos/PrestaShop/ps_imageslider/zipball/420b175d2f18d0866ece91d4abc3d15c958a7cb3", + "reference": "420b175d2f18d0866ece91d4abc3d15c958a7cb3", "shasum": "" }, "require": { @@ -6852,9 +6852,9 @@ "description": "PrestaShop - Image slider", "homepage": "https://github.com/PrestaShop/ps_imageslider", "support": { - "source": "https://github.com/PrestaShop/ps_imageslider/tree/v3.1.4" + "source": "https://github.com/PrestaShop/ps_imageslider/tree/v3.2.1" }, - "time": "2024-01-16T08:14:40+00:00" + "time": "2024-09-25T18:27:59+00:00" }, { "name": "prestashop/ps_languageselector", @@ -13604,7 +13604,7 @@ "ext-simplexml": "*", "ext-zip": "*" }, - "platform-dev": [], + "platform-dev": {}, "platform-overrides": { "php": "7.2.5" }, From b839551f4dcc38f0644f813260120c0476cd9db6 Mon Sep 17 00:00:00 2001 From: prestonBot Date: Tue, 15 Oct 2024 23:04:32 +0000 Subject: [PATCH 43/47] Updated PrestaShop Packages --- composer.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index 0d5d6c3aecd1b..e8d26fd5bc869 100644 --- a/composer.lock +++ b/composer.lock @@ -5244,16 +5244,16 @@ }, { "name": "prestashop/blockwishlist", - "version": "v3.0.1", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/PrestaShop/blockwishlist.git", - "reference": "75c39bc12648cba4e09d870479e7857fd06eee79" + "reference": "25fe641134ede5703397ae9a180694db18c8383a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShop/blockwishlist/zipball/75c39bc12648cba4e09d870479e7857fd06eee79", - "reference": "75c39bc12648cba4e09d870479e7857fd06eee79", + "url": "https://api.github.com/repos/PrestaShop/blockwishlist/zipball/25fe641134ede5703397ae9a180694db18c8383a", + "reference": "25fe641134ede5703397ae9a180694db18c8383a", "shasum": "" }, "require-dev": { @@ -5283,9 +5283,9 @@ "description": "PrestaShop module blockwishlist", "homepage": "https://github.com/PrestaShop/blockwishlist", "support": { - "source": "https://github.com/PrestaShop/blockwishlist/tree/v3.0.1" + "source": "https://github.com/PrestaShop/blockwishlist/tree/v3.0.2" }, - "time": "2023-08-11T10:08:33+00:00" + "time": "2024-10-04T14:40:01+00:00" }, { "name": "prestashop/circuit-breaker", From 912f71675ecfec1d0759e34f8a780a9b95412cd6 Mon Sep 17 00:00:00 2001 From: Romain Soulard Date: Fri, 18 Oct 2024 14:02:34 +0200 Subject: [PATCH 44/47] fix specific references --- src/Adapter/Presenter/Product/ProductLazyArray.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Adapter/Presenter/Product/ProductLazyArray.php b/src/Adapter/Presenter/Product/ProductLazyArray.php index d9fb55d63b642..84f0982f8fb04 100644 --- a/src/Adapter/Presenter/Product/ProductLazyArray.php +++ b/src/Adapter/Presenter/Product/ProductLazyArray.php @@ -575,10 +575,6 @@ public function getCombinationSpecificData() */ public function getSpecificReferences() { - if (isset($this->product['cart_quantity'])) { - return null; - } - $specificReferences = null; // Get data of this combination, it contains other stuff, we will extract only what we need From 53995de790856bf7fd40cafb0130922fe3b8069d Mon Sep 17 00:00:00 2001 From: Dominik Shaim Ulrich Date: Wed, 20 Mar 2024 12:18:44 +0100 Subject: [PATCH 45/47] Allow selecting invoice more precisely --- classes/order/OrderInvoice.php | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/classes/order/OrderInvoice.php b/classes/order/OrderInvoice.php index 729b0ff5b8b05..cd15cf4a8acf9 100644 --- a/classes/order/OrderInvoice.php +++ b/classes/order/OrderInvoice.php @@ -138,24 +138,37 @@ public function getProductsDetail() ' . ($this->id && $this->number ? ' AND od.`id_order_invoice` = ' . (int) $this->id : '') . ' ORDER BY od.`product_name`'); } - public static function getInvoiceByNumber($id_invoice) + /** + * Returns OrderInvoice for a specific invoice number and order ID. + * It's highly recommended to also provide an order ID, because you + * may end up with a different invoice than you wanted. + * + * DO NOT CONFUSE the number with id_order_invoice, that's a different, + * unique identifier of the invoice. + * + * @param string|int $invoiceNumber + * @param int $orderId + * + * @return OrderInvoice|false + */ + public static function getInvoiceByNumber($invoiceNumber, $orderId = null) { - if (is_numeric($id_invoice)) { - $id_invoice = (int) $id_invoice; - } elseif (is_string($id_invoice)) { + if (is_numeric($invoiceNumber)) { + $invoiceNumber = (int) $invoiceNumber; + } elseif (is_string($invoiceNumber)) { $matches = []; - if (preg_match('/^(?:' . Configuration::get('PS_INVOICE_PREFIX', Context::getContext()->language->id) . ')\s*([0-9]+)$/i', $id_invoice, $matches)) { - $id_invoice = $matches[1]; + if (preg_match('/^(?:' . Configuration::get('PS_INVOICE_PREFIX', Context::getContext()->language->id) . ')\s*([0-9]+)$/i', $invoiceNumber, $matches)) { + $invoiceNumber = $matches[1]; } } - if (!$id_invoice) { + if (!$invoiceNumber) { return false; } $id_order_invoice = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue( 'SELECT `id_order_invoice` FROM `' . _DB_PREFIX_ . 'order_invoice` - WHERE number = ' . (int) $id_invoice + WHERE `number` = ' . (int) $invoiceNumber . (!empty($orderId) ? ' AND `id_order` = ' . (int) $orderId : '') ); return $id_order_invoice ? new OrderInvoice((int) $id_order_invoice) : false; From 2a2a66b7cb395cb34312de7af5c7cd763ea877ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Hlav=C3=A1=C4=8Dek?= Date: Sun, 27 Oct 2024 11:56:45 +0100 Subject: [PATCH 46/47] Add comment --- .../Translation/Export/TranslationCatalogueExporter.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Core/Translation/Export/TranslationCatalogueExporter.php b/src/Core/Translation/Export/TranslationCatalogueExporter.php index 3a7c262e89af9..ee6f15d016594 100644 --- a/src/Core/Translation/Export/TranslationCatalogueExporter.php +++ b/src/Core/Translation/Export/TranslationCatalogueExporter.php @@ -203,6 +203,14 @@ private function transformCatalogueMapToMessageCatalogue(Catalogue $catalogue, s return $messageCatalogue; } + /** + * After export, our files are named with their domain only, FullDomainName.xlf for example. + * This method will append the locale name to the end of the file, so the result is something like + * FullDomainName.ab-AB.xlf + * + * @param string $locale Locale to append to filenames + * @param string $path Folder to work in + */ protected function renameCatalogues(string $locale, string $path): void { $finder = Finder::create(); From d82f8695fe85ae0821c55a8519e839a4fa28af57 Mon Sep 17 00:00:00 2001 From: idnovate Date: Mon, 28 Oct 2024 10:08:40 +0100 Subject: [PATCH 47/47] [FO] Fix cart value amount --- classes/CartRule.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/CartRule.php b/classes/CartRule.php index 3bf687033a93a..f174ef22f81fe 100644 --- a/classes/CartRule.php +++ b/classes/CartRule.php @@ -1351,9 +1351,9 @@ public function getContextualValue($use_tax, Context $context = null, $filter = if ((in_array($product['id_product'] . '-' . $product['id_product_attribute'], $selected_products) || in_array($product['id_product'] . '-0', $selected_products)) && (($this->reduction_exclude_special && !$product['reduction_applies']) || !$this->reduction_exclude_special)) { - $price = $product['price']; + $price = $product['price_with_reduction_without_tax']; if ($use_tax) { - $price = $product['price_without_reduction']; + $price = $product['price_with_reduction']; } $selected_products_reduction += $price * $product['cart_quantity'];