diff --git a/config/.htaccess b/config/.htaccess
new file mode 100644
index 00000000..3de9e400
--- /dev/null
+++ b/config/.htaccess
@@ -0,0 +1,10 @@
+# Apache 2.2
+
+ Order deny,allow
+ Deny from all
+
+
+# Apache 2.4
+
+ Require all denied
+
diff --git a/config/alias.php b/config/alias.php
new file mode 100644
index 00000000..e64b84ac
--- /dev/null
+++ b/config/alias.php
@@ -0,0 +1,64 @@
+
+ * @copyright Since 2007 PrestaShop SA and Contributors
+ * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
+ */
+
+use Symfony\Component\VarDumper\VarDumper;
+
+if (!function_exists('dump')) {
+ function dump($var)
+ {
+ foreach (func_get_args() as $var) {
+ VarDumper::dump($var);
+ }
+ }
+}
+
+/**
+ * Sanitize data which will be injected into SQL query
+ *
+ * @param string $string SQL data which will be injected into SQL query
+ * @param bool $htmlOK Does data contain HTML code ? (optional)
+ * @return string Sanitized data
+ */
+function pSQL($string, $htmlOK = false)
+{
+ return Db::getInstance()->escape($string, $htmlOK);
+}
+
+function bqSQL($string)
+{
+ return str_replace('`', '\`', pSQL($string));
+}
+
+function displayFatalError()
+{
+ $error = null;
+ if (function_exists('error_get_last')) {
+ $error = error_get_last();
+ }
+ if ($error !== null && in_array($error['type'], array(E_ERROR, E_PARSE, E_COMPILE_ERROR))) {
+ echo '[PrestaShop] Fatal error in module file: '.$error['file'].':'.$error['line'].'
'.$error['message'];
+ }
+}
diff --git a/config/autoload.php b/config/autoload.php
new file mode 100644
index 00000000..96d5dcec
--- /dev/null
+++ b/config/autoload.php
@@ -0,0 +1,32 @@
+
+ * @copyright Since 2007 PrestaShop SA and Contributors
+ * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
+ */
+require_once __DIR__.'/../vendor/autoload.php';
+
+define('_PS_VERSION_', AppKernel::VERSION);
+
+require_once _PS_CONFIG_DIR_.'alias.php';
+require_once _PS_CLASS_DIR_.'PrestaShopAutoload.php';
+spl_autoload_register(array(PrestaShopAutoload::getInstance(), 'load'));
diff --git a/config/config.inc.php b/config/config.inc.php
new file mode 100644
index 00000000..745d8dac
--- /dev/null
+++ b/config/config.inc.php
@@ -0,0 +1,315 @@
+
+ * @copyright Since 2007 PrestaShop SA and Contributors
+ * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
+ */
+
+use PrestaShop\PrestaShop\Core\Session\SessionHandler;
+
+$currentDir = dirname(__FILE__);
+
+/* Custom defines made by users */
+if (is_file($currentDir . '/defines_custom.inc.php')) {
+ include_once $currentDir . '/defines_custom.inc.php';
+}
+
+require_once $currentDir . '/defines.inc.php';
+
+require_once _PS_CONFIG_DIR_ . 'autoload.php';
+
+$start_time = microtime(true);
+
+/* SSL configuration */
+define('_PS_SSL_PORT_', 443);
+
+/* Improve PHP configuration to prevent issues */
+ini_set('default_charset', 'utf-8');
+
+/* in dev mode - check if composer was executed */
+if (is_dir(_PS_ROOT_DIR_ . DIRECTORY_SEPARATOR . 'admin-dev') && (!is_dir(_PS_ROOT_DIR_ . DIRECTORY_SEPARATOR . 'vendor') ||
+ !file_exists(_PS_ROOT_DIR_ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'))) {
+ die('Error : please install composer. Then run "php composer.phar install"');
+}
+
+/* No settings file? goto installer... */
+if (!file_exists(_PS_ROOT_DIR_ . '/app/config/parameters.yml') && !file_exists(_PS_ROOT_DIR_ . '/app/config/parameters.php')) {
+ Tools::redirectToInstall();
+}
+
+require_once $currentDir . DIRECTORY_SEPARATOR . 'bootstrap.php';
+
+/*
+ * Improve PHP configuration on Windows
+ *
+ * @deprecated since 1.7.8.0
+ */
+if ('WIN' === strtoupper(substr(PHP_OS, 0, 3))) {
+ Windows::improveFilesytemPerformances();
+}
+
+if (defined('_PS_CREATION_DATE_')) {
+ $creationDate = _PS_CREATION_DATE_;
+ if (empty($creationDate)) {
+ Tools::redirectToInstall();
+ }
+} else {
+ Tools::redirectToInstall();
+}
+
+/* Custom config made by users */
+if (is_file(_PS_CUSTOM_CONFIG_FILE_)) {
+ include_once _PS_CUSTOM_CONFIG_FILE_;
+}
+
+if (_PS_DEBUG_PROFILING_) {
+ include_once _PS_TOOL_DIR_ . 'profiling/Profiler.php';
+ include_once _PS_TOOL_DIR_ . 'profiling/Controller.php';
+ include_once _PS_TOOL_DIR_ . 'profiling/ObjectModel.php';
+ include_once _PS_TOOL_DIR_ . 'profiling/Db.php';
+ include_once _PS_TOOL_DIR_ . 'profiling/Hook.php';
+ include_once _PS_TOOL_DIR_ . 'profiling/Module.php';
+ include_once _PS_TOOL_DIR_ . 'profiling/Tools.php';
+}
+
+if (Tools::convertBytes(ini_get('upload_max_filesize')) < Tools::convertBytes('100M')) {
+ ini_set('upload_max_filesize', '100M');
+}
+
+if (Tools::isPHPCLI() && isset($argc, $argv)) {
+ Tools::argvToGET($argc, $argv);
+}
+
+/* Redefine REQUEST_URI if empty (on some webservers...) */
+if (!isset($_SERVER['REQUEST_URI']) || empty($_SERVER['REQUEST_URI'])) {
+ if (!isset($_SERVER['SCRIPT_NAME']) && isset($_SERVER['SCRIPT_FILENAME'])) {
+ $_SERVER['SCRIPT_NAME'] = $_SERVER['SCRIPT_FILENAME'];
+ }
+ if (isset($_SERVER['SCRIPT_NAME'])) {
+ if (basename($_SERVER['SCRIPT_NAME']) == 'index.php' && empty($_SERVER['QUERY_STRING'])) {
+ $_SERVER['REQUEST_URI'] = dirname($_SERVER['SCRIPT_NAME']) . '/';
+ } else {
+ $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'];
+ if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) {
+ $_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
+ }
+ }
+ }
+}
+
+/* Trying to redefine HTTP_HOST if empty (on some webservers...) */
+if (!isset($_SERVER['HTTP_HOST']) || empty($_SERVER['HTTP_HOST'])) {
+ $_SERVER['HTTP_HOST'] = @getenv('HTTP_HOST');
+}
+
+$context = Context::getContext();
+
+/* Initialize the current Shop */
+try {
+ $context->shop = Shop::initialize();
+} catch (PrestaShopException $e) {
+ $e->displayMessage();
+}
+define('_THEME_NAME_', $context->shop->theme->getName());
+define('_PARENT_THEME_NAME_', $context->shop->theme->get('parent') ?: '');
+
+define('__PS_BASE_URI__', $context->shop->getBaseURI());
+
+/* Include all defines related to base uri and theme name */
+require_once $currentDir . '/defines_uri.inc.php';
+
+global $_MODULES;
+$_MODULES = array();
+
+/**
+ * @deprecated since 1.7.7
+ */
+define('_PS_PRICE_DISPLAY_PRECISION_', 2);
+
+/**
+ * @deprecated since 1.7.7
+ */
+define('_PS_PRICE_COMPUTE_PRECISION_', 2);
+
+/* Load all languages */
+Language::loadLanguages();
+
+/* Loading default country */
+$default_country = new Country(Configuration::get('PS_COUNTRY_DEFAULT'), Configuration::get('PS_LANG_DEFAULT'));
+$context->country = $default_country;
+
+/* It is not safe to rely on the system's timezone settings, and this would generate a PHP Strict Standards notice. */
+@date_default_timezone_set(Configuration::get('PS_TIMEZONE'));
+
+/* Set locales */
+$locale = strtolower(Configuration::get('PS_LOCALE_LANGUAGE')) . '_' . strtoupper(Configuration::get('PS_LOCALE_COUNTRY'));
+/* Please do not use LC_ALL here http://www.php.net/manual/fr/function.setlocale.php#25041 */
+setlocale(LC_COLLATE, $locale . '.UTF-8', $locale . '.utf8');
+setlocale(LC_CTYPE, $locale . '.UTF-8', $locale . '.utf8');
+setlocale(LC_TIME, $locale . '.UTF-8', $locale . '.utf8');
+setlocale(LC_NUMERIC, 'en_US.UTF-8', 'en_US.utf8');
+
+/* Instantiate cookie */
+$cookie_lifetime = defined('_PS_ADMIN_DIR_') ? (int) Configuration::get('PS_COOKIE_LIFETIME_BO') : (int) Configuration::get('PS_COOKIE_LIFETIME_FO');
+if ($cookie_lifetime > 0) {
+ $cookie_lifetime = time() + (max($cookie_lifetime, 1) * 3600);
+}
+
+$force_ssl = Configuration::get('PS_SSL_ENABLED') && Configuration::get('PS_SSL_ENABLED_EVERYWHERE');
+if (defined('_PS_ADMIN_DIR_')) {
+ $cookie = new Cookie('psAdmin', '', $cookie_lifetime, null, false, $force_ssl);
+} else {
+ $domains = null;
+ if ($context->shop->getGroup()->share_order) {
+ $cookie = new Cookie('ps-sg' . $context->shop->getGroup()->id, '', $cookie_lifetime, $context->shop->getUrlsSharedCart(), false, $force_ssl);
+ } else {
+ if ($context->shop->domain != $context->shop->domain_ssl) {
+ $domains = array($context->shop->domain_ssl, $context->shop->domain);
+ }
+
+ $cookie = new Cookie('ps-s' . $context->shop->id, '', $cookie_lifetime, $domains, false, $force_ssl);
+ }
+}
+
+if (PHP_SAPI !== 'cli') {
+ $sessionHandler = new SessionHandler(
+ $cookie_lifetime,
+ $force_ssl,
+ Configuration::get('PS_COOKIE_SAMESITE'),
+ Context::getContext()->shop->physical_uri
+ );
+ $sessionHandler->init();
+
+ $context->session = $sessionHandler->getSession();
+}
+
+$context->cookie = $cookie;
+
+/* Create employee if in BO, customer else */
+if (defined('_PS_ADMIN_DIR_')) {
+ $employee = new Employee($cookie->id_employee);
+ $context->employee = $employee;
+
+ /* Auth on shops are recached after employee assignation */
+ if ($employee->id_profile != _PS_ADMIN_PROFILE_) {
+ Shop::cacheShops(true);
+ }
+
+ $cookie->id_lang = (int) $employee->id_lang;
+}
+
+/* if the language stored in the cookie is not available language, use default language */
+if (isset($cookie->id_lang) && $cookie->id_lang) {
+ $language = new Language($cookie->id_lang);
+}
+
+$isNotValidLanguage = !isset($language) || !Validate::isLoadedObject($language);
+// `true` if language is defined from multishop or backoffice (`$employee` variable defined) session
+$isLanguageDefinedFromSession = (isset($language) && $language->isAssociatedToShop()) || defined('_PS_ADMIN_DIR_');
+
+$useDefaultLanguage = $isNotValidLanguage || !$isLanguageDefinedFromSession;
+if ($useDefaultLanguage) {
+
+ // Default value for most cases
+ $language = new Language(Configuration::get('PS_LANG_DEFAULT'));
+
+ // if `PS_LANG_DEFAULT` not a valid language for current shop then
+ // use first valid language of the shop as default language.
+ if($language->isMultishop() && !$language->isAssociatedToShop()) {
+ $shopLanguages = $language->getLanguages(true, Context::getContext()->shop->id, false);
+
+ if(isset($shopLanguages[0]['id_lang'])) {
+ $shopDefaultLanguage = new Language($shopLanguages[0]['id_lang']);
+
+ if(Validate::isLoadedObject($language)) {
+ $language = $shopDefaultLanguage;
+ }
+ }
+ }
+}
+
+$context->language = $language;
+
+/* Get smarty */
+require_once $currentDir . '/smarty.config.inc.php';
+$context->smarty = $smarty;
+
+if (!defined('_PS_ADMIN_DIR_')) {
+ if (isset($cookie->id_customer) && (int) $cookie->id_customer) {
+ $customer = new Customer($cookie->id_customer);
+ if (!Validate::isLoadedObject($customer)) {
+ $context->cookie->logout();
+ } else {
+ $customer->logged = true;
+ if ($customer->id_lang != $context->language->id) {
+ $customer->id_lang = $context->language->id;
+ $customer->update();
+ }
+ }
+ }
+
+ if (!isset($customer) || !Validate::isLoadedObject($customer)) {
+ $customer = new Customer();
+
+ /* Change the default group */
+ if (Group::isFeatureActive()) {
+ $customer->id_default_group = (int) Configuration::get('PS_UNIDENTIFIED_GROUP');
+ }
+ }
+ $customer->id_guest = $cookie->id_guest;
+ $context->customer = $customer;
+}
+
+/* Link should also be initialized in the context here for retrocompatibility */
+$https_link = (Tools::usingSecureMode() && Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://';
+$context->link = new Link($https_link, $https_link);
+
+/*
+ * @deprecated
+ * USE : Configuration::get() method in order to getting the id of order status
+ */
+
+define('_PS_OS_CHEQUE_', Configuration::get('PS_OS_CHEQUE'));
+define('_PS_OS_PAYMENT_', Configuration::get('PS_OS_PAYMENT'));
+define('_PS_OS_PREPARATION_', Configuration::get('PS_OS_PREPARATION'));
+define('_PS_OS_SHIPPING_', Configuration::get('PS_OS_SHIPPING'));
+define('_PS_OS_DELIVERED_', Configuration::get('PS_OS_DELIVERED'));
+define('_PS_OS_CANCELED_', Configuration::get('PS_OS_CANCELED'));
+define('_PS_OS_REFUND_', Configuration::get('PS_OS_REFUND'));
+define('_PS_OS_ERROR_', Configuration::get('PS_OS_ERROR'));
+define('_PS_OS_OUTOFSTOCK_', Configuration::get('PS_OS_OUTOFSTOCK'));
+define('_PS_OS_OUTOFSTOCK_PAID_', Configuration::get('PS_OS_OUTOFSTOCK_PAID'));
+define('_PS_OS_OUTOFSTOCK_UNPAID_', Configuration::get('PS_OS_OUTOFSTOCK_UNPAID'));
+define('_PS_OS_BANKWIRE_', Configuration::get('PS_OS_BANKWIRE'));
+define('_PS_OS_PAYPAL_', Configuration::get('PS_OS_PAYPAL'));
+define('_PS_OS_WS_PAYMENT_', Configuration::get('PS_OS_WS_PAYMENT'));
+define('_PS_OS_COD_VALIDATION_', Configuration::get('PS_OS_COD_VALIDATION'));
+
+if (!defined('_MEDIA_SERVER_1_')) {
+ define('_MEDIA_SERVER_1_', Configuration::get('PS_MEDIA_SERVER_1'));
+}
+if (!defined('_MEDIA_SERVER_2_')) {
+ define('_MEDIA_SERVER_2_', Configuration::get('PS_MEDIA_SERVER_2'));
+}
+if (!defined('_MEDIA_SERVER_3_')) {
+ define('_MEDIA_SERVER_3_', Configuration::get('PS_MEDIA_SERVER_3'));
+}
diff --git a/config/db_slave_server.inc.php b/config/db_slave_server.inc.php
new file mode 100644
index 00000000..6b350772
--- /dev/null
+++ b/config/db_slave_server.inc.php
@@ -0,0 +1,34 @@
+
+ * @copyright Since 2007 PrestaShop SA and Contributors
+ * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
+ */
+
+/*
+return array(
+ array('server' => '192.168.0.15', 'user' => 'rep', 'password' => '123456', 'database' => 'rep'),
+ array('server' => '192.168.0.3', 'user' => 'myuser', 'password' => 'mypassword', 'database' => 'mydatabase'),
+ );
+*/
+
+return array();
diff --git a/config/defines_uri.inc.php b/config/defines_uri.inc.php
new file mode 100644
index 00000000..49f4b177
--- /dev/null
+++ b/config/defines_uri.inc.php
@@ -0,0 +1,76 @@
+
+ * @copyright Since 2007 PrestaShop SA and Contributors
+ * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
+ */
+
+/* Theme URLs */
+define('_PS_DEFAULT_THEME_NAME_', 'classic');
+define('_PS_THEME_DIR_', _PS_ROOT_DIR_.'/themes/'._THEME_NAME_.'/');
+define('_PS_THEME_URI_', __PS_BASE_URI__.'themes/'._THEME_NAME_.'/');
+
+if (defined('_PARENT_THEME_NAME_') && _PARENT_THEME_NAME_) {
+ define('_PS_PARENT_THEME_DIR_', _PS_ROOT_DIR_.'/themes/'._PARENT_THEME_NAME_.'/');
+ define('_PS_PARENT_THEME_URI_', __PS_BASE_URI__.'themes/'._PARENT_THEME_NAME_.'/');
+} else {
+ define('_PS_PARENT_THEME_DIR_', '');
+ define('_PS_PARENT_THEME_URI_', '');
+}
+define('_THEMES_DIR_', __PS_BASE_URI__.'themes/');
+define('_THEME_DIR_', _THEMES_DIR_._THEME_NAME_.'/');
+define('_THEME_IMG_DIR_', _THEME_DIR_.'assets/img/');
+define('_THEME_CSS_DIR_', _THEME_DIR_.'assets/css/');
+define('_THEME_JS_DIR_', _THEME_DIR_.'assets/js/');
+
+/* Image URLs */
+define('_PS_IMG_', __PS_BASE_URI__.'img/');
+define('_PS_ADMIN_IMG_', _PS_IMG_.'admin/');
+define('_PS_TMP_IMG_', _PS_IMG_.'tmp/');
+define('_THEME_CAT_DIR_', _PS_IMG_.'c/');
+define('_THEME_EMPLOYEE_DIR_', _PS_IMG_.'e/');
+define('_THEME_PROD_DIR_', _PS_IMG_.'p/');
+define('_THEME_PROFILE_DIR_', _PS_IMG_.'pr/');
+define('_THEME_MANU_DIR_', _PS_IMG_.'m/');
+define('_THEME_SUP_DIR_', _PS_IMG_.'su/');
+define('_THEME_SHIP_DIR_', _PS_IMG_.'s/');
+define('_THEME_STORE_DIR_', _PS_IMG_.'st/');
+define('_THEME_LANG_DIR_', _PS_IMG_.'l/');
+define('_THEME_COL_DIR_', _PS_IMG_.'co/');
+define('_THEME_GENDERS_DIR_', _PS_IMG_.'genders/');
+define('_PS_PROD_IMG_', _PS_IMG_.'p/');
+
+/* Other URLs */
+define('_PS_JS_DIR_', __PS_BASE_URI__.'js/');
+define('_PS_CSS_DIR_', __PS_BASE_URI__.'css/');
+define('_THEME_PROD_PIC_DIR_', __PS_BASE_URI__.'upload/');
+define('_MAIL_DIR_', __PS_BASE_URI__.'mails/');
+define('_MODULE_DIR_', __PS_BASE_URI__.'modules/');
+
+/* Define API URLs if not defined before */
+Tools::safeDefine('_PS_API_DOMAIN_', 'api.prestashop.com');
+Tools::safeDefine('_PS_API_URL_', 'http://'._PS_API_DOMAIN_);
+/** @deprecated Since 1.7.7 */
+Tools::safeDefine('_PS_TAB_MODULE_LIST_URL_', '');
+/** @deprecated Since 1.7.7 */
+Tools::safeDefine('_PS_API_MODULES_LIST_16_', '');
+Tools::safeDefine('_PS_CURRENCY_FEED_URL_', _PS_API_URL_.'/xml/currencies.xml');
diff --git a/config/index.php b/config/index.php
new file mode 100644
index 00000000..76cd9dd3
--- /dev/null
+++ b/config/index.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)
+ */
+
+header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
+
+header("Cache-Control: no-store, no-cache, must-revalidate");
+header("Cache-Control: post-check=0, pre-check=0", false);
+header("Pragma: no-cache");
+
+header("Location: ../");
+exit;
diff --git a/config/services/admin/services_dev.yml b/config/services/admin/services_dev.yml
new file mode 100644
index 00000000..8a28a7d1
--- /dev/null
+++ b/config/services/admin/services_dev.yml
@@ -0,0 +1,2 @@
+imports:
+ - { resource: services_prod.yml }
diff --git a/config/services/admin/services_prod.yml b/config/services/admin/services_prod.yml
new file mode 100644
index 00000000..3e5e052c
--- /dev/null
+++ b/config/services/admin/services_prod.yml
@@ -0,0 +1,31 @@
+imports:
+ - { resource: ../common.yml }
+ - { resource: ../../../src/PrestaShopBundle/Resources/config/services/adapter/news.yml }
+
+services:
+ filesystem:
+ class: Symfony\Component\Filesystem\Filesystem
+
+ finder:
+ class: Symfony\Component\Finder\Finder
+
+ hook_provider:
+ class: PrestaShop\PrestaShop\Adapter\Hook\HookInformationProvider
+
+ hook_repository:
+ class: PrestaShop\PrestaShop\Core\Module\HookRepository
+ arguments: ["@hook_provider", "@shop", "@db"]
+
+ hook_configurator:
+ class: PrestaShop\PrestaShop\Core\Module\HookConfigurator
+ arguments: ["@hook_repository"]
+
+ theme_validator:
+ class: PrestaShop\PrestaShop\Core\Addon\Theme\ThemeValidator
+
+ theme_manager:
+ class: PrestaShop\PrestaShop\Core\Addon\Theme\ThemeManager
+ arguments: ["@shop", "@configuration", "@theme_validator", "@employee", "@filesystem", "@finder", "@hook_configurator"]
+
+ context.static:
+ class: Context
diff --git a/config/services/admin/services_test.yml b/config/services/admin/services_test.yml
new file mode 100644
index 00000000..8ad75e7f
--- /dev/null
+++ b/config/services/admin/services_test.yml
@@ -0,0 +1,2 @@
+imports:
+ - { resource: services_dev.yml }
diff --git a/config/services/common.yml b/config/services/common.yml
new file mode 100644
index 00000000..d79fd35e
--- /dev/null
+++ b/config/services/common.yml
@@ -0,0 +1,24 @@
+parameters:
+ mail_themes_uri: "/mails/themes"
+
+imports:
+ - { resource: ../../src/PrestaShopBundle/Resources/config/services/core/cldr.yml }
+ - { resource: ../../src/PrestaShopBundle/Resources/config/services/core/string.yml }
+ - { resource: ../../src/PrestaShopBundle/Resources/config/services/adapter/data_provider_common.yml }
+ - { resource: ../../src/PrestaShopBundle/Resources/config/services/adapter/common.yml }
+ - { resource: ../../src/PrestaShopBundle/Resources/config/services/core/common.yml }
+
+services:
+ hashing:
+ class: PrestaShop\PrestaShop\Core\Crypto\Hashing
+
+ prestashop.database.naming_strategy:
+ class: PrestaShopBundle\Service\Database\DoctrineNamingStrategy
+ arguments: ['%database_prefix%']
+
+ annotation_reader:
+ class: Doctrine\Common\Annotations\AnnotationReader
+
+ PrestaShopBundle\DependencyInjection\RuntimeConstEnvVarProcessor:
+ public: false
+ tags: ['container.env_var_processor']
diff --git a/config/services/front/services_dev.yml b/config/services/front/services_dev.yml
new file mode 100644
index 00000000..8a28a7d1
--- /dev/null
+++ b/config/services/front/services_dev.yml
@@ -0,0 +1,2 @@
+imports:
+ - { resource: services_prod.yml }
diff --git a/config/services/front/services_prod.yml b/config/services/front/services_prod.yml
new file mode 100644
index 00000000..f446122d
--- /dev/null
+++ b/config/services/front/services_prod.yml
@@ -0,0 +1,53 @@
+imports:
+ - { resource: ../common.yml }
+
+services:
+ prestashop.core.filter.front_end_object.main:
+ class: PrestaShop\PrestaShop\Core\Filter\FrontEndObject\MainFilter
+ arguments:
+ - cart: '@prestashop.core.filter.front_end_object.cart'
+ customer: '@prestashop.core.filter.front_end_object.customer'
+ shop: '@prestashop.core.filter.front_end_object.shop'
+ configuration: '@prestashop.core.filter.front_end_object.configuration'
+
+ prestashop.core.filter.front_end_object.product:
+ class: PrestaShop\PrestaShop\Core\Filter\FrontEndObject\ProductFilter
+
+ prestashop.core.filter.front_end_object.cart:
+ class: PrestaShop\PrestaShop\Core\Filter\FrontEndObject\CartFilter
+ arguments:
+ - '@prestashop.core.filter.front_end_object.product_collection'
+
+ prestashop.core.filter.front_end_object.search_result_product:
+ class: PrestaShop\PrestaShop\Core\Filter\FrontEndObject\SearchResultProductFilter
+
+ prestashop.core.filter.front_end_object.customer:
+ class: PrestaShop\PrestaShop\Core\Filter\FrontEndObject\CustomerFilter
+
+ prestashop.core.filter.front_end_object.shop:
+ class: PrestaShop\PrestaShop\Core\Filter\FrontEndObject\ShopFilter
+
+ prestashop.core.filter.front_end_object.configuration:
+ class: PrestaShop\PrestaShop\Core\Filter\FrontEndObject\ConfigurationFilter
+
+ prestashop.core.filter.front_end_object.product_collection:
+ class: PrestaShop\PrestaShop\Core\Filter\CollectionFilter
+ calls:
+ - method: queue
+ arguments:
+ - ['@prestashop.core.filter.front_end_object.product']
+
+ prestashop.core.filter.front_end_object.search_result_product_collection:
+ class: PrestaShop\PrestaShop\Core\Filter\CollectionFilter
+ calls:
+ - method: queue
+ arguments:
+ - ['@prestashop.core.filter.front_end_object.search_result_product']
+
+ prestashop.adapter.module.repository.module_repository:
+ class: 'PrestaShop\PrestaShop\Adapter\Module\Repository\ModuleRepository'
+
+ prestashop.translation.translator_language_loader:
+ class: PrestaShopBundle\Translation\TranslatorLanguageLoader
+ arguments:
+ - '@prestashop.adapter.module.repository.module_repository'
diff --git a/config/services/front/services_test.yml b/config/services/front/services_test.yml
new file mode 100644
index 00000000..8ad75e7f
--- /dev/null
+++ b/config/services/front/services_test.yml
@@ -0,0 +1,2 @@
+imports:
+ - { resource: services_dev.yml }
diff --git a/config/services/webservice/services_dev.yml b/config/services/webservice/services_dev.yml
new file mode 100644
index 00000000..8a28a7d1
--- /dev/null
+++ b/config/services/webservice/services_dev.yml
@@ -0,0 +1,2 @@
+imports:
+ - { resource: services_prod.yml }
diff --git a/config/services/webservice/services_prod.yml b/config/services/webservice/services_prod.yml
new file mode 100644
index 00000000..2eed898e
--- /dev/null
+++ b/config/services/webservice/services_prod.yml
@@ -0,0 +1,2 @@
+imports:
+ - { resource: ../common.yml }
diff --git a/config/services/webservice/services_test.yml b/config/services/webservice/services_test.yml
new file mode 100644
index 00000000..8ad75e7f
--- /dev/null
+++ b/config/services/webservice/services_test.yml
@@ -0,0 +1,2 @@
+imports:
+ - { resource: services_dev.yml }
diff --git a/config/settings.inc.php b/config/settings.inc.php
new file mode 100644
index 00000000..56ea0306
--- /dev/null
+++ b/config/settings.inc.php
@@ -0,0 +1,2 @@
+
+ * @copyright Since 2007 PrestaShop SA and Contributors
+ * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
+ */
+global $smarty;
+$smarty->debugging = false;
+$smarty->debugging_ctrl = 'NONE';
+
+// Let user choose to force compilation
+$smarty->force_compile = (Configuration::get('PS_SMARTY_FORCE_COMPILE') == _PS_SMARTY_FORCE_COMPILE_) ? true : false;
+// But force compile_check since the performance impact is small and it is better for debugging
+$smarty->compile_check = true;
+
+smartyRegisterFunction($smarty, 'function', 'toolsConvertPrice', 'toolsConvertPrice');
+smartyRegisterFunction($smarty, 'function', 'convertPrice', array('Product', 'convertPrice'));
+smartyRegisterFunction($smarty, 'function', 'convertPriceWithCurrency', array('Product', 'convertPriceWithCurrency'));
+smartyRegisterFunction($smarty, 'function', 'displayWtPrice', array('Product', 'displayWtPrice'));
+smartyRegisterFunction($smarty, 'function', 'displayWtPriceWithCurrency', array('Product', 'displayWtPriceWithCurrency'));
+smartyRegisterFunction($smarty, 'function', 'displayPrice', array('Tools', 'displayPriceSmarty'));
+smartyRegisterFunction($smarty, 'modifier', 'convertAndFormatPrice', array('Product', 'convertAndFormatPrice')); // used twice
+smartyRegisterFunction($smarty, 'function', 'getAdminToken', array('Tools', 'getAdminTokenLiteSmarty'));
+smartyRegisterFunction($smarty, 'function', 'displayAddressDetail', array('AddressFormat', 'generateAddressSmarty'));
+smartyRegisterFunction($smarty, 'function', 'getWidthSize', array('Image', 'getWidth'));
+smartyRegisterFunction($smarty, 'function', 'getHeightSize', array('Image', 'getHeight'));
+smartyRegisterFunction($smarty, 'function', 'addJsDef', array('Media', 'addJsDef'));
+smartyRegisterFunction($smarty, 'block', 'addJsDefL', array('Media', 'addJsDefL'));
+smartyRegisterFunction($smarty, 'modifier', 'secureReferrer', array('Tools', 'secureReferrer'));
+
+$module_resources['modules'] = _PS_MODULE_DIR_;
+$smarty->registerResource('module', new SmartyResourceModule($module_resources, $isAdmin = true));
+
+function toolsConvertPrice($params, &$smarty)
+{
+ return Tools::convertPrice($params['price'], Context::getContext()->currency);
+}
+
+function smartyTranslate($params, $smarty)
+{
+ $translator = Context::getContext()->getTranslator();
+
+ $htmlEntities = !isset($params['html']) && !isset($params['js']);
+ $addSlashes = (isset($params['slashes']) || isset($params['js']));
+ $isInPDF = isset($params['pdf']);
+ $isInModule = !empty($params['mod']);
+ $sprintf = array();
+
+ if (isset($params['sprintf']) && !is_array($params['sprintf'])) {
+ $sprintf = array($params['sprintf']);
+ } elseif (isset($params['sprintf'])) {
+ $sprintf = $params['sprintf'];
+ }
+
+ if (($htmlEntities || $addSlashes)) {
+ $sprintf['legacy'] = $htmlEntities ? 'htmlspecialchars': 'addslashes';
+ }
+
+ if (!empty($params['d'])) {
+ if (isset($params['tags'])) {
+ $backTrace = debug_backtrace();
+
+ $errorMessage = sprintf(
+ 'Unable to translate "%s" in %s. tags() is not supported anymore, please use sprintf().',
+ $params['s'],
+ $backTrace[0]['args'][1]->template_resource
+ );
+
+ if (_PS_MODE_DEV_) {
+ throw new Exception($errorMessage);
+ } else {
+ PrestaShopLogger::addLog($errorMessage);
+ }
+ }
+
+ if (!is_array($sprintf)) {
+ $backTrace = debug_backtrace();
+
+ $errorMessage = sprintf(
+ 'Unable to translate "%s" in %s. sprintf() parameter should be an array.',
+ $params['s'],
+ $backTrace[0]['args'][1]->template_resource
+ );
+
+ if (_PS_MODE_DEV_) {
+ throw new Exception($errorMessage);
+ } else {
+ PrestaShopLogger::addLog($errorMessage);
+
+ return $params['s'];
+ }
+ }
+
+ return $translator->trans($params['s'], $sprintf, $params['d']);
+ }
+
+ if ($isInPDF) {
+ return Translate::smartyPostProcessTranslation(
+ Translate::getPdfTranslation(
+ $params['s'],
+ $sprintf
+ ),
+ $params
+ );
+ }
+
+ // If the template is part of a module
+ if ($isInModule) {
+ return Translate::smartyPostProcessTranslation(
+ Translate::getModuleTranslation(
+ $params['mod'],
+ $params['s'],
+ basename($smarty->source->name, '.tpl'),
+ $sprintf,
+ isset($params['js'])
+ ),
+ $params
+ );
+ }
+
+ $translatedValue = $translator->trans($params['s'], $sprintf, null);
+
+ if ($htmlEntities) {
+ $translatedValue = htmlspecialchars($translatedValue, ENT_COMPAT, 'UTF-8');
+ }
+
+ if ($addSlashes) {
+ $translatedValue = addslashes($translatedValue);
+ }
+
+ return $translatedValue;
+}
diff --git a/config/smartyfront.config.inc.php b/config/smartyfront.config.inc.php
new file mode 100644
index 00000000..70374bb0
--- /dev/null
+++ b/config/smartyfront.config.inc.php
@@ -0,0 +1,273 @@
+
+ * @copyright Since 2007 PrestaShop SA and Contributors
+ * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
+ */
+global $smarty;
+
+use PrestaShop\TranslationToolsBundle\Translation\Helper\DomainHelper;
+
+$template_dirs = array(_PS_THEME_DIR_.'templates');
+$plugin_dirs = array(_PS_THEME_DIR_.'plugins');
+if (_PS_PARENT_THEME_DIR_) {
+ $template_dirs[] = _PS_PARENT_THEME_DIR_.'templates';
+ $plugin_dirs[] = _PS_PARENT_THEME_DIR_.'plugins';
+}
+
+$smarty->setTemplateDir($template_dirs);
+$smarty->addPluginsDir($plugin_dirs);
+
+$module_resources = array('theme' => _PS_THEME_DIR_.'modules/');
+if (_PS_PARENT_THEME_DIR_) {
+ $module_resources['parent'] = _PS_PARENT_THEME_DIR_.'modules/';
+}
+$module_resources['modules'] = _PS_MODULE_DIR_;
+$smarty->registerResource('module', new SmartyResourceModule($module_resources));
+
+$parent_resources = array();
+if (_PS_PARENT_THEME_DIR_) {
+ $parent_resources['parent'] = _PS_PARENT_THEME_DIR_.'templates/';
+}
+$smarty->registerResource('parent', new SmartyResourceParent($parent_resources));
+
+$smarty->escape_html = true;
+
+smartyRegisterFunction($smarty, 'function', 'widget', 'smartyWidget');
+smartyRegisterFunction($smarty, 'function', 'render', 'smartyRender');
+smartyRegisterFunction($smarty, 'function', 'form_field', 'smartyFormField');
+smartyRegisterFunction($smarty, 'block', 'widget_block', 'smartyWidgetBlock');
+
+function withWidget($params, callable $cb)
+{
+ if (!isset($params['name'])) {
+ throw new Exception('Smarty helper `render_widget` expects at least the `name` parameter.');
+ }
+
+ $moduleName = $params['name'];
+ unset($params['name']);
+
+ $moduleInstance = Module::getInstanceByName($moduleName);
+
+ if (!$moduleInstance instanceof PrestaShop\PrestaShop\Core\Module\WidgetInterface) {
+ throw new Exception(sprintf(
+ 'Module `%1$s` is not a WidgetInterface.',
+ $moduleName
+ ));
+ }
+
+ return $cb($moduleInstance, $params);
+}
+
+function smartyWidget($params, &$smarty)
+{
+ return withWidget($params, function ($widget, $params) {
+ return Hook::coreRenderWidget(
+ $widget,
+ isset($params['hook']) ? $params['hook'] : null,
+ $params
+ );
+ });
+}
+
+function smartyRender($params, &$smarty)
+{
+ $ui = $params['ui'];
+
+ if (array_key_exists('file', $params)) {
+ $ui->setTemplate($params['file']);
+ }
+
+ return $ui->render($params);
+}
+
+function smartyFormField($params, $smarty)
+{
+ $scope = $smarty->createData(
+ $smarty
+ );
+
+ $scope->assign($params);
+
+ $file = '_partials/form-fields.tpl';
+
+ if (isset($params['file'])) {
+ $file = $params['file'];
+ }
+
+ $tpl = $smarty->createTemplate($file, $scope);
+
+ return $tpl->fetch();
+}
+
+function smartyWidgetBlock($params, $content, $smarty)
+{
+ static $backedUpVariablesStack = array();
+
+ if (null === $content) {
+ // Function is called twice: at the opening of the block
+ // and when it is closed.
+ // This is the first call.
+ withWidget($params, function ($widget, $params) use (&$smarty, &$backedUpVariablesStack) {
+ // Assign widget variables and backup all the variables they override
+ $currentVariables = $smarty->getTemplateVars();
+ $scopedVariables = $widget->getWidgetVariables(isset($params['hook']) ? $params['hook'] : null, $params);
+ $backedUpVariables = array();
+ foreach ($scopedVariables as $key => $value) {
+ if (array_key_exists($key, $currentVariables)) {
+ $backedUpVariables[$key] = $currentVariables[$key];
+ }
+ $smarty->assign($key, $value);
+ }
+ $backedUpVariablesStack[] = $backedUpVariables;
+ });
+ // We don't display anything since the template is not rendered yet.
+ return '';
+ } else {
+ // Function gets called for the closing tag of the block.
+ // We restore the backed up variables in order not to override
+ // template variables.
+ if (!empty($backedUpVariablesStack)) {
+ $backedUpVariables = array_pop($backedUpVariablesStack);
+ foreach ($backedUpVariables as $key => $value) {
+ $smarty->assign($key, $value);
+ }
+ }
+ // This time content is filled with rendered template, so return it.
+ return $content;
+ }
+}
+
+function smartyTranslate($params, $smarty)
+{
+ global $_LANG;
+
+ if (!isset($params['js'])) {
+ $params['js'] = false;
+ }
+ if (!isset($params['pdf'])) {
+ $params['pdf'] = false;
+ }
+ if (!isset($params['mod'])) {
+ $params['mod'] = false;
+ }
+ if (!isset($params['sprintf'])) {
+ $params['sprintf'] = array();
+ }
+
+ // fix inheritance template filename in case of includes from different cross sources between theme, modules, ...
+ $filename = $smarty->template_resource;
+ if (!isset($smarty->inheritance->sourceStack[0]) || $filename === $smarty->inheritance->sourceStack[0]->resource) {
+ $filename = $smarty->source->name;
+ }
+ $basename = basename($filename, '.tpl');
+
+ if (!isset($params['d'])) {
+ $params['d'] = null;
+ }
+
+ if (!empty($params['d'])) {
+ if (isset($params['tags'])) {
+ $backTrace = debug_backtrace();
+
+ $errorMessage = sprintf(
+ 'Unable to translate "%s" in %s. tags() is not supported anymore, please use sprintf().',
+ $params['s'],
+ $backTrace[0]['args'][1]->template_resource
+ );
+
+ if (_PS_MODE_DEV_) {
+ throw new Exception($errorMessage);
+ } else {
+ PrestaShopLogger::addLog($errorMessage);
+ }
+ }
+
+ if (!is_array($params['sprintf'])) {
+ $backTrace = debug_backtrace();
+
+ $errorMessage = sprintf(
+ 'Unable to translate "%s" in %s. sprintf() parameter should be an array.',
+ $params['s'],
+ $backTrace[0]['args'][1]->template_resource
+ );
+
+ if (_PS_MODE_DEV_) {
+ throw new Exception($errorMessage);
+ } else {
+ PrestaShopLogger::addLog($errorMessage);
+
+ return $params['s'];
+ }
+ }
+
+ return Context::getContext()->getTranslator()->trans($params['s'], $params['sprintf'], $params['d']);
+ }
+
+ $string = str_replace('\'', '\\\'', $params['s']);
+ $key = $basename.'_'.md5($string);
+
+ if (isset($smarty->source) && (strpos($smarty->source->filepath, DIRECTORY_SEPARATOR.'override'.DIRECTORY_SEPARATOR) !== false)) {
+ $key = 'override_'.$key;
+ }
+
+ if ($params['mod']) {
+ return Translate::smartyPostProcessTranslation(
+ Translate::getModuleTranslation(
+ $params['mod'],
+ $params['s'],
+ $basename,
+ $params['sprintf'],
+ $params['js']
+ ),
+ $params
+ );
+ } elseif ($params['pdf']) {
+ return Translate::smartyPostProcessTranslation(
+ Translate::getPdfTranslation(
+ $params['s'],
+ $params['sprintf']
+ ),
+ $params
+ );
+ }
+
+ if ($_LANG != null && isset($_LANG[$key])) {
+ $msg = $_LANG[$key];
+ } elseif ($_LANG != null && isset($_LANG[Tools::strtolower($key)])) {
+ $msg = $_LANG[Tools::strtolower($key)];
+ } else {
+ $msg = $params['s'];
+ }
+
+ if ($msg != $params['s'] && !$params['js']) {
+ $msg = stripslashes($msg);
+ } elseif ($params['js']) {
+ $msg = addslashes($msg);
+ }
+
+ if ($params['sprintf'] !== null) {
+ $msg = Translate::checkAndReplaceArgs($msg, $params['sprintf']);
+ }
+
+ return Translate::smartyPostProcessTranslation($params['js'] ? $msg : Tools::safeOutput($msg), $params);
+}
diff --git a/config/smartyfront.config.inc.php.before_pagecache_widget_block b/config/smartyfront.config.inc.php.before_pagecache_widget_block
new file mode 100644
index 00000000..b0cbc672
--- /dev/null
+++ b/config/smartyfront.config.inc.php.before_pagecache_widget_block
@@ -0,0 +1,267 @@
+
+ * @copyright 2007-2018 PrestaShop SA
+ * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
+ * International Registered Trademark & Property of PrestaShop SA
+ */
+global $smarty;
+
+$template_dirs = array(_PS_THEME_DIR_.'templates');
+$plugin_dirs = array(_PS_THEME_DIR_.'plugins');
+if (_PS_PARENT_THEME_DIR_) {
+ $template_dirs[] = _PS_PARENT_THEME_DIR_.'templates';
+ $plugin_dirs[] = _PS_PARENT_THEME_DIR_.'plugins';
+}
+
+$smarty->setTemplateDir($template_dirs);
+$smarty->addPluginsDir($plugin_dirs);
+
+$module_resources = array('theme' => _PS_THEME_DIR_.'modules/');
+if (_PS_PARENT_THEME_DIR_) {
+ $module_resources['parent'] = _PS_PARENT_THEME_DIR_.'modules/';
+}
+$module_resources['modules'] = _PS_MODULE_DIR_;
+$smarty->registerResource('module', new SmartyResourceModule($module_resources));
+
+$parent_resources = array();
+if (_PS_PARENT_THEME_DIR_) {
+ $parent_resources['parent'] = _PS_PARENT_THEME_DIR_.'templates/';
+}
+$smarty->registerResource('parent', new SmartyResourceParent($parent_resources));
+
+$smarty->escape_html = true;
+
+smartyRegisterFunction($smarty, 'function', 'widget', 'smartyWidget');
+smartyRegisterFunction($smarty, 'function', 'render', 'smartyRender');
+smartyRegisterFunction($smarty, 'function', 'form_field', 'smartyFormField');
+smartyRegisterFunction($smarty, 'block', 'widget_block', 'smartyWidgetBlock');
+
+function withWidget($params, callable $cb)
+{
+ if (!isset($params['name'])) {
+ throw new Exception('Smarty helper `render_widget` expects at least the `name` parameter.');
+ }
+
+ $moduleName = $params['name'];
+ unset($params['name']);
+
+ $moduleInstance = Module::getInstanceByName($moduleName);
+
+ if (!$moduleInstance instanceof PrestaShop\PrestaShop\Core\Module\WidgetInterface) {
+ throw new Exception(sprintf(
+ 'Module `%1$s` is not a WidgetInterface.',
+ $moduleName
+ ));
+ }
+
+ return $cb($moduleInstance, $params);
+}
+
+function smartyWidget($params, &$smarty)
+{
+ return withWidget($params, function ($widget, $params) {
+ return Hook::coreRenderWidget(
+ $widget,
+ isset($params['hook']) ? $params['hook'] : null,
+ $params
+ );
+ });
+}
+
+function smartyRender($params, &$smarty)
+{
+ $ui = $params['ui'];
+
+ if (array_key_exists('file', $params)) {
+ $ui->setTemplate($params['file']);
+ }
+
+ return $ui->render($params);
+}
+
+function smartyFormField($params, $smarty)
+{
+ $scope = $smarty->createData(
+ $smarty
+ );
+
+ $scope->assign($params);
+
+ $file = '_partials/form-fields.tpl';
+
+ if (isset($params['file'])) {
+ $file = $params['file'];
+ }
+
+ $tpl = $smarty->createTemplate($file, $scope);
+
+ return $tpl->fetch();
+}
+
+function smartyWidgetBlock($params, $content, $smarty)
+{
+ static $backedUpVariablesStack = array();
+
+ if (null === $content) {
+ // Function is called twice: at the opening of the block
+ // and when it is closed.
+ // This is the first call.
+ withWidget($params, function ($widget, $params) use (&$smarty, &$backedUpVariablesStack) {
+ // Assign widget variables and backup all the variables they override
+ $currentVariables = $smarty->getTemplateVars();
+ $scopedVariables = $widget->getWidgetVariables(isset($params['hook']) ? $params['hook'] : null, $params);
+ $backedUpVariables = array();
+ foreach ($scopedVariables as $key => $value) {
+ if (array_key_exists($key, $currentVariables)) {
+ $backedUpVariables[$key] = $currentVariables[$key];
+ }
+ $smarty->assign($key, $value);
+ }
+ $backedUpVariablesStack[] = $backedUpVariables;
+ });
+ // We don't display anything since the template is not rendered yet.
+ return '';
+ } else {
+ // Function gets called for the closing tag of the block.
+ // We restore the backed up variables in order not to override
+ // template variables.
+ if (!empty($backedUpVariablesStack)) {
+ $backedUpVariables = array_pop($backedUpVariablesStack);
+ foreach ($backedUpVariables as $key => $value) {
+ $smarty->assign($key, $value);
+ }
+ }
+ // This time content is filled with rendered template, so return it.
+ return $content;
+ }
+}
+
+function smartyTranslate($params, $smarty)
+{
+ global $_LANG;
+
+ if (!isset($params['js'])) {
+ $params['js'] = false;
+ }
+ if (!isset($params['pdf'])) {
+ $params['pdf'] = false;
+ }
+ if (!isset($params['mod'])) {
+ $params['mod'] = false;
+ }
+ if (!isset($params['sprintf'])) {
+ $params['sprintf'] = array();
+ }
+ if (!isset($params['d'])) {
+ $params['d'] = null;
+ }
+
+ if (!is_null($params['d'])) {
+ if (isset($params['tags'])) {
+ $backTrace = debug_backtrace();
+
+ $errorMessage = sprintf(
+ 'Unable to translate "%s" in %s. tags() is not supported anymore, please use sprintf().',
+ $params['s'],
+ $backTrace[0]['args'][1]->template_resource
+ );
+
+ if (_PS_MODE_DEV_) {
+ throw new Exception($errorMessage);
+ } else {
+ PrestaShopLogger::addLog($errorMessage);
+ }
+ }
+
+ if (!is_array($params['sprintf'])) {
+ $backTrace = debug_backtrace();
+
+ $errorMessage = sprintf(
+ 'Unable to translate "%s" in %s. sprintf() parameter should be an array.',
+ $params['s'],
+ $backTrace[0]['args'][1]->template_resource
+ );
+
+ if (_PS_MODE_DEV_) {
+ throw new Exception($errorMessage);
+ } else {
+ PrestaShopLogger::addLog($errorMessage);
+
+ return $params['s'];
+ }
+ }
+ }
+
+ if (($translation = Context::getContext()->getTranslator()->trans($params['s'], $params['sprintf'], $params['d'])) !== $params['s']
+ && $params['mod'] === false) {
+ return $translation;
+ }
+
+ $string = str_replace('\'', '\\\'', $params['s']);
+ $basename = basename($smarty->source->name, '.tpl');
+ $key = $basename.'_'.md5($string);
+
+ if (isset($smarty->source) && (strpos($smarty->source->filepath, DIRECTORY_SEPARATOR.'override'.DIRECTORY_SEPARATOR) !== false)) {
+ $key = 'override_'.$key;
+ }
+
+ if ($params['mod']) {
+ return Translate::smartyPostProcessTranslation(
+ Translate::getModuleTranslation(
+ $params['mod'],
+ $params['s'],
+ $basename,
+ $params['sprintf'],
+ $params['js']
+ ),
+ $params
+ );
+ } elseif ($params['pdf']) {
+ return Translate::smartyPostProcessTranslation(
+ Translate::getPdfTranslation(
+ $params['s'],
+ $params['sprintf']
+ ),
+ $params
+ );
+ }
+
+ if ($_LANG != null && isset($_LANG[$key])) {
+ $msg = $_LANG[$key];
+ } elseif ($_LANG != null && isset($_LANG[Tools::strtolower($key)])) {
+ $msg = $_LANG[Tools::strtolower($key)];
+ } else {
+ $msg = $params['s'];
+ }
+
+ if ($msg != $params['s'] && !$params['js']) {
+ $msg = stripslashes($msg);
+ } elseif ($params['js']) {
+ $msg = addslashes($msg);
+ }
+
+ if ($params['sprintf'] !== null) {
+ $msg = Translate::checkAndReplaceArgs($msg, $params['sprintf']);
+ }
+
+ return Translate::smartyPostProcessTranslation($params['js'] ? $msg : Tools::safeOutput($msg), $params);
+}
diff --git a/config/themes/classic-backup/shop1.json b/config/themes/classic-backup/shop1.json
new file mode 100644
index 00000000..da6ba2e7
--- /dev/null
+++ b/config/themes/classic-backup/shop1.json
@@ -0,0 +1 @@
+{"name":"classic","display_name":"Classic","version":"1.0.0","author":{"name":"PrestaShop Team","email":"pub@prestashop.com","url":"http:\/\/www.prestashop.com"},"meta":{"compatibility":{"from":"1.7.0.0","to":null},"available_layouts":{"layout-full-width":{"name":"Full Width","description":"No side columns, ideal for distraction-free pages such as product pages."},"layout-both-columns":{"name":"Three Columns","description":"One large central column and 2 side columns."},"layout-left-column":{"name":"Two Columns, small left column","description":"Two columns with a small left column"},"layout-right-column":{"name":"Two Columns, small right column","description":"Two columns with a small right column"}}},"assets":null,"global_settings":{"configuration":{"PS_IMAGE_QUALITY":"png"},"modules":{"to_enable":["ps_linklist"]},"hooks":{"modules_to_hook":{"displayNav1":["ps_contactinfo"],"displayNav2":["ps_languageselector","ps_currencyselector","ps_customersignin","ps_shoppingcart"],"displayTop":["ps_mainmenu","ps_searchbar"],"displayHome":["ps_imageslider","ps_featuredproducts","ps_banner","ps_customtext"],"displayFooterBefore":["ps_emailsubscription","ps_socialfollow"],"displayFooter":["ps_linklist","ps_customeraccountlinks","ps_contactinfo"],"displayLeftColumn":["ps_categorytree","ps_facetedsearch"],"displaySearch":["ps_searchbar"],"displayProductAdditionalInfo":["ps_sharebuttons"],"displayReassurance":["blockreassurance"],"displayOrderConfirmation2":["ps_featuredproducts"],"displayCrossSellingShoppingCart":["ps_featuredproducts"]}},"image_types":{"cart_default":{"width":125,"height":125,"scope":["products"]},"small_default":{"width":98,"height":98,"scope":["products","categories","manufacturers","suppliers"]},"medium_default":{"width":452,"height":452,"scope":["products","manufacturers","suppliers"]},"home_default":{"width":250,"height":250,"scope":["products"]},"large_default":{"width":800,"height":800,"scope":["products","manufacturers","suppliers"]},"category_default":{"width":141,"height":180,"scope":["categories"]},"stores_default":{"width":170,"height":115,"scope":["stores"]}}},"theme_settings":{"default_layout":"layout-full-width","layouts":{"category":"layout-left-column","best-sales":"layout-left-column","new-products":"layout-left-column","prices-drop":"layout-left-column","contact":"layout-left-column"}}}
\ No newline at end of file
diff --git a/config/themes/classic-backup/shop2.json b/config/themes/classic-backup/shop2.json
new file mode 100644
index 00000000..da6ba2e7
--- /dev/null
+++ b/config/themes/classic-backup/shop2.json
@@ -0,0 +1 @@
+{"name":"classic","display_name":"Classic","version":"1.0.0","author":{"name":"PrestaShop Team","email":"pub@prestashop.com","url":"http:\/\/www.prestashop.com"},"meta":{"compatibility":{"from":"1.7.0.0","to":null},"available_layouts":{"layout-full-width":{"name":"Full Width","description":"No side columns, ideal for distraction-free pages such as product pages."},"layout-both-columns":{"name":"Three Columns","description":"One large central column and 2 side columns."},"layout-left-column":{"name":"Two Columns, small left column","description":"Two columns with a small left column"},"layout-right-column":{"name":"Two Columns, small right column","description":"Two columns with a small right column"}}},"assets":null,"global_settings":{"configuration":{"PS_IMAGE_QUALITY":"png"},"modules":{"to_enable":["ps_linklist"]},"hooks":{"modules_to_hook":{"displayNav1":["ps_contactinfo"],"displayNav2":["ps_languageselector","ps_currencyselector","ps_customersignin","ps_shoppingcart"],"displayTop":["ps_mainmenu","ps_searchbar"],"displayHome":["ps_imageslider","ps_featuredproducts","ps_banner","ps_customtext"],"displayFooterBefore":["ps_emailsubscription","ps_socialfollow"],"displayFooter":["ps_linklist","ps_customeraccountlinks","ps_contactinfo"],"displayLeftColumn":["ps_categorytree","ps_facetedsearch"],"displaySearch":["ps_searchbar"],"displayProductAdditionalInfo":["ps_sharebuttons"],"displayReassurance":["blockreassurance"],"displayOrderConfirmation2":["ps_featuredproducts"],"displayCrossSellingShoppingCart":["ps_featuredproducts"]}},"image_types":{"cart_default":{"width":125,"height":125,"scope":["products"]},"small_default":{"width":98,"height":98,"scope":["products","categories","manufacturers","suppliers"]},"medium_default":{"width":452,"height":452,"scope":["products","manufacturers","suppliers"]},"home_default":{"width":250,"height":250,"scope":["products"]},"large_default":{"width":800,"height":800,"scope":["products","manufacturers","suppliers"]},"category_default":{"width":141,"height":180,"scope":["categories"]},"stores_default":{"width":170,"height":115,"scope":["stores"]}}},"theme_settings":{"default_layout":"layout-full-width","layouts":{"category":"layout-left-column","best-sales":"layout-left-column","new-products":"layout-left-column","prices-drop":"layout-left-column","contact":"layout-left-column"}}}
\ No newline at end of file
diff --git a/config/themes/classic/shop1.json b/config/themes/classic/shop1.json
new file mode 100644
index 00000000..da6ba2e7
--- /dev/null
+++ b/config/themes/classic/shop1.json
@@ -0,0 +1 @@
+{"name":"classic","display_name":"Classic","version":"1.0.0","author":{"name":"PrestaShop Team","email":"pub@prestashop.com","url":"http:\/\/www.prestashop.com"},"meta":{"compatibility":{"from":"1.7.0.0","to":null},"available_layouts":{"layout-full-width":{"name":"Full Width","description":"No side columns, ideal for distraction-free pages such as product pages."},"layout-both-columns":{"name":"Three Columns","description":"One large central column and 2 side columns."},"layout-left-column":{"name":"Two Columns, small left column","description":"Two columns with a small left column"},"layout-right-column":{"name":"Two Columns, small right column","description":"Two columns with a small right column"}}},"assets":null,"global_settings":{"configuration":{"PS_IMAGE_QUALITY":"png"},"modules":{"to_enable":["ps_linklist"]},"hooks":{"modules_to_hook":{"displayNav1":["ps_contactinfo"],"displayNav2":["ps_languageselector","ps_currencyselector","ps_customersignin","ps_shoppingcart"],"displayTop":["ps_mainmenu","ps_searchbar"],"displayHome":["ps_imageslider","ps_featuredproducts","ps_banner","ps_customtext"],"displayFooterBefore":["ps_emailsubscription","ps_socialfollow"],"displayFooter":["ps_linklist","ps_customeraccountlinks","ps_contactinfo"],"displayLeftColumn":["ps_categorytree","ps_facetedsearch"],"displaySearch":["ps_searchbar"],"displayProductAdditionalInfo":["ps_sharebuttons"],"displayReassurance":["blockreassurance"],"displayOrderConfirmation2":["ps_featuredproducts"],"displayCrossSellingShoppingCart":["ps_featuredproducts"]}},"image_types":{"cart_default":{"width":125,"height":125,"scope":["products"]},"small_default":{"width":98,"height":98,"scope":["products","categories","manufacturers","suppliers"]},"medium_default":{"width":452,"height":452,"scope":["products","manufacturers","suppliers"]},"home_default":{"width":250,"height":250,"scope":["products"]},"large_default":{"width":800,"height":800,"scope":["products","manufacturers","suppliers"]},"category_default":{"width":141,"height":180,"scope":["categories"]},"stores_default":{"width":170,"height":115,"scope":["stores"]}}},"theme_settings":{"default_layout":"layout-full-width","layouts":{"category":"layout-left-column","best-sales":"layout-left-column","new-products":"layout-left-column","prices-drop":"layout-left-column","contact":"layout-left-column"}}}
\ No newline at end of file
diff --git a/config/themes/classic/shop2.json b/config/themes/classic/shop2.json
new file mode 100644
index 00000000..da6ba2e7
--- /dev/null
+++ b/config/themes/classic/shop2.json
@@ -0,0 +1 @@
+{"name":"classic","display_name":"Classic","version":"1.0.0","author":{"name":"PrestaShop Team","email":"pub@prestashop.com","url":"http:\/\/www.prestashop.com"},"meta":{"compatibility":{"from":"1.7.0.0","to":null},"available_layouts":{"layout-full-width":{"name":"Full Width","description":"No side columns, ideal for distraction-free pages such as product pages."},"layout-both-columns":{"name":"Three Columns","description":"One large central column and 2 side columns."},"layout-left-column":{"name":"Two Columns, small left column","description":"Two columns with a small left column"},"layout-right-column":{"name":"Two Columns, small right column","description":"Two columns with a small right column"}}},"assets":null,"global_settings":{"configuration":{"PS_IMAGE_QUALITY":"png"},"modules":{"to_enable":["ps_linklist"]},"hooks":{"modules_to_hook":{"displayNav1":["ps_contactinfo"],"displayNav2":["ps_languageselector","ps_currencyselector","ps_customersignin","ps_shoppingcart"],"displayTop":["ps_mainmenu","ps_searchbar"],"displayHome":["ps_imageslider","ps_featuredproducts","ps_banner","ps_customtext"],"displayFooterBefore":["ps_emailsubscription","ps_socialfollow"],"displayFooter":["ps_linklist","ps_customeraccountlinks","ps_contactinfo"],"displayLeftColumn":["ps_categorytree","ps_facetedsearch"],"displaySearch":["ps_searchbar"],"displayProductAdditionalInfo":["ps_sharebuttons"],"displayReassurance":["blockreassurance"],"displayOrderConfirmation2":["ps_featuredproducts"],"displayCrossSellingShoppingCart":["ps_featuredproducts"]}},"image_types":{"cart_default":{"width":125,"height":125,"scope":["products"]},"small_default":{"width":98,"height":98,"scope":["products","categories","manufacturers","suppliers"]},"medium_default":{"width":452,"height":452,"scope":["products","manufacturers","suppliers"]},"home_default":{"width":250,"height":250,"scope":["products"]},"large_default":{"width":800,"height":800,"scope":["products","manufacturers","suppliers"]},"category_default":{"width":141,"height":180,"scope":["categories"]},"stores_default":{"width":170,"height":115,"scope":["stores"]}}},"theme_settings":{"default_layout":"layout-full-width","layouts":{"category":"layout-left-column","best-sales":"layout-left-column","new-products":"layout-left-column","prices-drop":"layout-left-column","contact":"layout-left-column"}}}
\ No newline at end of file
diff --git a/config/themes/leo_gstore/shop1.json b/config/themes/leo_gstore/shop1.json
new file mode 100644
index 00000000..4207410c
--- /dev/null
+++ b/config/themes/leo_gstore/shop1.json
@@ -0,0 +1 @@
+{"name":"leo_gstore","display_name":"Leo Gstore","version":"2.0.1","author":{"name":"Leotheme Team","email":"leotheme@gmail.com","url":"http:\/\/www.leotheme.com"},"meta":{"compatibility":{"from":"1.7.0.0","to":null},"available_layouts":{"layout-full-width":{"name":"Full Width","description":"No side columns, ideal for distraction-free pages such as product pages."},"layout-both-columns":{"name":"Three Columns","description":"One large central column and 2 side columns."},"layout-left-column":{"name":"Two Columns, small left column","description":"Two columns with a small left column"},"layout-right-column":{"name":"Two Columns, small right column","description":"Two columns with a small right column"}}},"assets":null,"dependencies":{"modules":["appagebuilder","leobootstrapmenu","leoslideshow","leoblog","leoproductsearch","leofeature","leoquicklogin"]},"global_settings":{"configuration":{"PS_IMAGE_QUALITY":"png"},"modules":{"to_disable":["ps_contactinfo","ps_mainmenu","ps_imageslider","ps_featuredproducts","ps_banner","ps_customtext"]},"hooks":{"modules_to_hook":{"displayNav1":["appagebuilder"],"displayNav2":["appagebuilder"],"displayTop":["appagebuilder"],"displayHome":["leoblog"],"displayFooterBefore":["appagebuilder"],"displayFooter":["appagebuilder"],"displayLeftColumn":["ps_categorytree","ps_facetedsearch"],"displaySearch":["ps_searchbar"],"displayProductAdditionalInfo":["ps_sharebuttons"],"displayReassurance":["blockreassurance"],"displayOrderConfirmation2":["ps_featuredproducts"],"displayCrossSellingShoppingCart":["ps_featuredproducts"],"displayCartTotalPriceLabel":["ps_legalcompliance"],"displayCheckoutSubtotalDetails":["ps_legalcompliance"],"displayCheckoutSummaryTop":["ps_legalcompliance"],"displayCMSDisputeInformation":["ps_legalcompliance"],"displayCMSPrintButton":["ps_legalcompliance"],"displayOverrideTemplate":["ps_legalcompliance"],"displayProductPriceBlock":["ps_legalcompliance"],"actionAdminBefore":["appagebuilder","leobootstrapmenu","leoslideshow","leoblog","leoproductsearch","leofeature","leoquicklogin"]}},"image_types":{"cart_default":{"width":125,"height":125,"scope":["products"]},"small_default":{"width":98,"height":98,"scope":["products","categories","manufacturers","suppliers"]},"medium_default":{"width":452,"height":452,"scope":["products","manufacturers","suppliers"]},"home_default":{"width":250,"height":250,"scope":["products"]},"large_default":{"width":800,"height":800,"scope":["products","manufacturers","suppliers"]},"category_default":{"width":870,"height":217,"scope":["categories"]},"stores_default":{"width":170,"height":115,"scope":["stores"]}}},"theme_settings":{"default_layout":"layout-full-width","layouts":{"category":"layout-left-column","best-sales":"layout-left-column","new-products":"layout-left-column","prices-drop":"layout-left-column","contact":"layout-left-column","manufacturer":"layout-left-column","supplier":"layout-left-column","module-pm_advancedsearch4-advancedsearch4":"layout-left-column","module-pm_advancedsearch4-seo":"layout-left-column","module-pm_advancedsearch4-searchresults":"layout-left-column"}},"directory":"C:\\wamp64\\www\\dr_materac\/themes\/leo_gstore\/","preview":"themes\/leo_gstore\/preview.png"}
\ No newline at end of file
diff --git a/config/themes/leo_gstore/shop2.json b/config/themes/leo_gstore/shop2.json
new file mode 100644
index 00000000..65527194
--- /dev/null
+++ b/config/themes/leo_gstore/shop2.json
@@ -0,0 +1 @@
+{"name":"leo_gstore","display_name":"Leo Gstore","version":"2.0.1","author":{"name":"Leotheme Team","email":"leotheme@gmail.com","url":"http:\/\/www.leotheme.com"},"meta":{"compatibility":{"from":"1.7.0.0","to":null},"available_layouts":{"layout-full-width":{"name":"Full Width","description":"No side columns, ideal for distraction-free pages such as product pages."},"layout-both-columns":{"name":"Three Columns","description":"One large central column and 2 side columns."},"layout-left-column":{"name":"Two Columns, small left column","description":"Two columns with a small left column"},"layout-right-column":{"name":"Two Columns, small right column","description":"Two columns with a small right column"}}},"assets":null,"dependencies":{"modules":["appagebuilder","leobootstrapmenu","leoslideshow","leoblog","leoproductsearch","leofeature","leoquicklogin"]},"global_settings":{"configuration":{"PS_IMAGE_QUALITY":"png"},"modules":{"to_disable":["ps_contactinfo","ps_mainmenu","ps_imageslider","ps_featuredproducts","ps_banner","ps_customtext"]},"hooks":{"modules_to_hook":{"displayNav1":["appagebuilder"],"displayNav2":["appagebuilder"],"displayTop":["appagebuilder"],"displayHome":["leoblog"],"displayFooterBefore":["appagebuilder"],"displayFooter":["appagebuilder"],"displayLeftColumn":["ps_categorytree","ps_facetedsearch"],"displaySearch":["ps_searchbar"],"displayProductAdditionalInfo":["ps_sharebuttons"],"displayReassurance":["blockreassurance"],"displayOrderConfirmation2":["ps_featuredproducts"],"displayCrossSellingShoppingCart":["ps_featuredproducts"],"displayCartTotalPriceLabel":["ps_legalcompliance"],"displayCheckoutSubtotalDetails":["ps_legalcompliance"],"displayCheckoutSummaryTop":["ps_legalcompliance"],"displayCMSDisputeInformation":["ps_legalcompliance"],"displayCMSPrintButton":["ps_legalcompliance"],"displayOverrideTemplate":["ps_legalcompliance"],"displayProductPriceBlock":["ps_legalcompliance"],"actionAdminBefore":["appagebuilder","leobootstrapmenu","leoslideshow","leoblog","leoproductsearch","leofeature","leoquicklogin"]}},"image_types":{"cart_default":{"width":125,"height":125,"scope":["products"]},"small_default":{"width":98,"height":98,"scope":["products","categories","manufacturers","suppliers"]},"medium_default":{"width":452,"height":452,"scope":["products","manufacturers","suppliers"]},"home_default":{"width":250,"height":250,"scope":["products"]},"large_default":{"width":800,"height":800,"scope":["products","manufacturers","suppliers"]},"category_default":{"width":870,"height":217,"scope":["categories"]},"stores_default":{"width":170,"height":115,"scope":["stores"]}}},"theme_settings":{"default_layout":"layout-full-width","layouts":{"category":"layout-left-column","best-sales":"layout-left-column","new-products":"layout-left-column","prices-drop":"layout-left-column","contact":"layout-left-column","manufacturer":"layout-left-column","supplier":"layout-left-column","module-pm_advancedsearch4-advancedsearch4":"layout-left-column","module-pm_advancedsearch4-seo":"layout-left-column","module-pm_advancedsearch4-searchresults":"layout-left-column"}},"directory":"\/themes\/leo_gstore\/","preview":"themes\/leo_gstore\/preview.png"}
\ No newline at end of file
diff --git a/config/themes/leo_lulandia/shop1.json b/config/themes/leo_lulandia/shop1.json
new file mode 100644
index 00000000..1195e09d
--- /dev/null
+++ b/config/themes/leo_lulandia/shop1.json
@@ -0,0 +1 @@
+{"name":"leo_lulandia","display_name":"Leo Lulandia","version":"2.1.0","author":{"name":"Leotheme Team","email":"leotheme@gmail.com","url":"http:\/\/www.leotheme.com"},"meta":{"compatibility":{"from":"1.7.0.0","to":null},"available_layouts":{"layout-full-width":{"name":"Full Width","description":"No side columns, ideal for distraction-free pages such as product pages."},"layout-both-columns":{"name":"Three Columns","description":"One large central column and 2 side columns."},"layout-left-column":{"name":"Two Columns, small left column","description":"Two columns with a small left column"},"layout-right-column":{"name":"Two Columns, small right column","description":"Two columns with a small right column"}}},"assets":null,"dependencies":{"modules":["appagebuilder","leobootstrapmenu","leoslideshow","leoblog","leoproductsearch","leofeature","leoquicklogin"]},"global_settings":{"configuration":{"PS_IMAGE_QUALITY":"png"},"modules":{"to_disable":["ps_contactinfo","ps_mainmenu","ps_imageslider","ps_featuredproducts","ps_banner","ps_customtext"]},"hooks":{"modules_to_hook":{"displayNav1":["appagebuilder"],"displayNav2":["appagebuilder"],"displayTop":["appagebuilder"],"displayHome":["leoblog"],"displayFooterBefore":["appagebuilder"],"displayFooter":["appagebuilder"],"displayLeftColumn":["ps_categorytree","ps_facetedsearch"],"displaySearch":["ps_searchbar"],"displayProductAdditionalInfo":["ps_sharebuttons"],"displayReassurance":["blockreassurance"],"displayOrderConfirmation2":["ps_featuredproducts"],"displayCrossSellingShoppingCart":["ps_featuredproducts"],"displayCartTotalPriceLabel":["ps_legalcompliance"],"displayCheckoutSubtotalDetails":["ps_legalcompliance"],"displayCheckoutSummaryTop":["ps_legalcompliance"],"displayCMSDisputeInformation":["ps_legalcompliance"],"displayCMSPrintButton":["ps_legalcompliance"],"displayOverrideTemplate":["ps_legalcompliance"],"displayProductPriceBlock":["ps_legalcompliance"],"actionAdminBefore":["appagebuilder","leobootstrapmenu","leoslideshow","leoblog","leoproductsearch","leofeature","leoquicklogin"]}},"image_types":{"cart_default":{"width":125,"height":125,"scope":["products"]},"small_default":{"width":98,"height":98,"scope":["products","categories","manufacturers","suppliers"]},"medium_default":{"width":452,"height":452,"scope":["products","manufacturers","suppliers"]},"home_default":{"width":250,"height":250,"scope":["products"]},"large_default":{"width":800,"height":800,"scope":["products","manufacturers","suppliers"]},"category_default":{"width":870,"height":217,"scope":["categories"]},"stores_default":{"width":170,"height":115,"scope":["stores"]}}},"theme_settings":{"default_layout":"layout-full-width","layouts":{"category":"layout-left-column","best-sales":"layout-left-column","new-products":"layout-left-column","prices-drop":"layout-left-column","contact":"layout-left-column","manufacturer":"layout-left-column","supplier":"layout-left-column"}}}
\ No newline at end of file
diff --git a/config/themes/leo_lulandia/shop2.json b/config/themes/leo_lulandia/shop2.json
new file mode 100644
index 00000000..90e79d57
--- /dev/null
+++ b/config/themes/leo_lulandia/shop2.json
@@ -0,0 +1 @@
+{"name":"leo_lulandia","display_name":"Leo Lulandia","version":"1.0.0","author":{"name":"Lulandia Team","email":"biuro@lulandia.pl","url":"http:\/\/lulandia.pl"},"meta":{"compatibility":{"from":"1.7.0.0","to":null},"available_layouts":{"layout-full-width":{"name":"Full Width","description":"No side columns, ideal for distraction-free pages such as product pages."},"layout-both-columns":{"name":"Three Columns","description":"One large central column and 2 side columns."},"layout-left-column":{"name":"Two Columns, small left column","description":"Two columns with a small left column"},"layout-right-column":{"name":"Two Columns, small right column","description":"Two columns with a small right column"}}},"assets":null,"dependencies":{"modules":["appagebuilder","leobootstrapmenu","leoslideshow","leoblog","leoproductsearch","leofeature","leoquicklogin"]},"global_settings":{"configuration":{"PS_IMAGE_QUALITY":"png"},"modules":{"to_disable":["ps_contactinfo","ps_mainmenu","ps_imageslider","ps_featuredproducts","ps_banner","ps_customtext"]},"hooks":{"modules_to_hook":{"displayNav1":["appagebuilder"],"displayNav2":["appagebuilder"],"displayTop":["appagebuilder"],"displayHome":["leoblog"],"displayFooterBefore":["appagebuilder"],"displayFooter":["appagebuilder"],"displayLeftColumn":["ps_categorytree","ps_facetedsearch"],"displaySearch":["ps_searchbar"],"displayProductAdditionalInfo":["ps_sharebuttons"],"displayReassurance":["blockreassurance"],"displayOrderConfirmation2":["ps_featuredproducts"],"displayCrossSellingShoppingCart":["ps_featuredproducts"],"displayCartTotalPriceLabel":["ps_legalcompliance"],"displayCheckoutSubtotalDetails":["ps_legalcompliance"],"displayCheckoutSummaryTop":["ps_legalcompliance"],"displayCMSDisputeInformation":["ps_legalcompliance"],"displayCMSPrintButton":["ps_legalcompliance"],"displayOverrideTemplate":["ps_legalcompliance"],"displayProductPriceBlock":["ps_legalcompliance"],"actionAdminBefore":["appagebuilder","leobootstrapmenu","leoslideshow","leoblog","leoproductsearch","leofeature","leoquicklogin"]}},"image_types":{"cart_default":{"width":125,"height":125,"scope":["products"]},"small_default":{"width":98,"height":98,"scope":["products","categories","manufacturers","suppliers"]},"medium_default":{"width":452,"height":452,"scope":["products","manufacturers","suppliers"]},"home_default":{"width":250,"height":250,"scope":["products"]},"large_default":{"width":800,"height":800,"scope":["products","manufacturers","suppliers"]},"category_default":{"width":870,"height":217,"scope":["categories"]},"stores_default":{"width":170,"height":115,"scope":["stores"]}}},"theme_settings":{"default_layout":"layout-full-width","layouts":{"category":"layout-left-column","best-sales":"layout-left-column","new-products":"layout-left-column","prices-drop":"layout-left-column","contact":"layout-left-column","manufacturer":"layout-left-column","supplier":"layout-left-column","module-pm_advancedsearch4-advancedsearch4":"layout-left-column","module-pm_advancedsearch4-seo":"layout-left-column","module-pm_advancedsearch4-searchresults":"layout-left-column"}},"directory":"\/themes\/leo_lulandia\/","preview":"themes\/leo_lulandia\/preview.png"}
\ No newline at end of file
diff --git a/config/themes/probusiness/shop2.json b/config/themes/probusiness/shop2.json
new file mode 100644
index 00000000..2eac93e5
--- /dev/null
+++ b/config/themes/probusiness/shop2.json
@@ -0,0 +1 @@
+{"name":"probusiness","display_name":"probusiness","version":"1.0.8","author":{"name":"YBC-Theme","email":"pub@prestashop.com","url":"http:\/\/www.prestashop.com"},"meta":{"compatibility":{"from":"1.7.0.0","to":null},"available_layouts":{"layout-full-width":{"name":"Full Width","description":"No side columns, ideal for distraction-free pages such as product pages."},"layout-both-columns":{"name":"Three Columns","description":"One large central column and 2 side columns."},"layout-left-column":{"name":"Two Columns, small left column","description":"Two columns with a small left column"},"layout-right-column":{"name":"Two Columns, small right column","description":"Two columns with a small right column"}}},"assets":null,"global_settings":{"configuration":{"PS_IMAGE_QUALITY":"png"},"modules":{"to_enable":["ps_linklist"],"to_reset":["ets_megamenu","ets_multilayerslider","ybc_themeconfig","ybc_widget","ybc_themeconfig","ybc_specificprices","ybc_productimagehover"]},"hooks":{"modules_to_hook":{"blogCategoriesBlock":["ybc_blog_free"],"blogFeaturedPostsBlock":["ybc_blog_free"],"blogGalleryBlock":["ybc_blog_free"],"blogNewsBlock":["ybc_blog_free"],"blogPopularPostsBlock":["ybc_blog_free"],"blogSearchBlock":["ybc_blog_free"],"blogSidebar":["ybc_blog_free"],"blogSlidersBlock":["ybc_blog_free"],"blogTagsBlock":["ybc_blog_free"],"displayBackOfficeFooter":["ybc_themeconfig",null],"displayBackOfficeHeader":["welcome","ets_multilayerslider","ybc_widget","ets_megamenu","ybc_blog_free","ybc_themeconfig",null],"displayBlock":["ets_megamenu"],"displayCrossSellingShoppingCart":["ps_featuredproducts"],"displayCustomDiscount":["ybc_specificprices"],"displayCustomerAccount":["blockwishlist"],"displayFooter":["ps_contactinfo","ps_customeraccountlinks","ps_linklist","ps_emailsubscription","ybc_widget","ybc_blog_free","ybc_specificprices","ybc_themeconfig"],"displayFooterBefore":["ps_socialfollow"],"displayFooterProduct":["ps_categoryproducts"],"displayHome":["ets_multilayerslider","ps_featuredproducts","ybc_widget","ps_bestsellers","ps_specials","ps_newproducts","ybc_blog_free"],"displayLeftColumn":["ps_categorytree","ps_facetedsearch","ybc_widget","ybc_blog_free"],"displayMegaMenu":["ets_megamenu"],"displayMLS":["ets_multilayerslider"],"displayMLSConfigs":["ets_multilayerslider"],"displayMLSLayer":["ets_multilayerslider"],"displayMLSLayerSort":["ets_multilayerslider"],"displayMLSSlide":["ets_multilayerslider"],"displayMLSSlideInner":["ets_multilayerslider"],"displayMLSSlider":["ets_multilayerslider"],"displayMMItemBlock":["ets_megamenu"],"displayMMItemColumn":["ets_megamenu"],"displayMMItemMenu":["ets_megamenu"],"displayMultiLayerSlide":["ets_multilayerslider"],"displayMyAccountBlock":["blockwishlist"],"displayNav":["ybc_widget"],"displayNav1":["ps_contactinfo"],"displayNav2":["ps_languageselector","ps_currencyselector"],"displayOrderConfirmation2":["ps_featuredproducts"],"displayPaymentReturn":["ps_checkpayment","ps_wirepayment","ps_cashondelivery"],"displayProductAdditionalInfo":["ps_sharebuttons","blockwishlist"],"displayProductActions":["blockwishlist"],"displayProductListFunctionalButtons":["blockwishlist"],"displayReassurance":["blockreassurance"],"displayRightColumn":["ybc_widget","blockwishlist"],"displaySearch":["ps_searchbar"],"displayTop":["ps_searchbar","ybc_widget","ets_megamenu","ps_shoppingcart","blockwishlist"],"displayTopColumn":["ets_multilayerslider","ybc_widget"],"displayYbcProductReview":["ybc_themeconfig"],"paymentOptions":["ps_checkpayment","ps_wirepayment","ps_cashondelivery"],"productcustom":["blockwishlist"],"productImageHover":["ybc_productimagehover"],"productSearchProvider":["ps_facetedsearch"],"search":["statssearch"],"ybcBlockSocial":["ybc_themeconfig"],"ybcCopyright":["ybc_themeconfig"],"ybcCustom1":["ybc_widget"],"ybcCustom2":["ybc_widget"],"ybcCustom3":["ybc_widget"],"ybcCustom4":["ybc_widget"],"ybcCustom5":["ybc_widget"],"ybcCustom6":["ybc_widget"],"ybcLayoutUpdate":["ybc_themeconfig"]}},"image_types":{"cart_default":{"width":125,"height":125,"scope":["products"]},"small_default":{"width":98,"height":98,"scope":["products","categories","manufacturers","suppliers"]},"medium_default":{"width":452,"height":452,"scope":["products","manufacturers","suppliers"]},"home_default":{"width":250,"height":250,"scope":["products"]},"large_default":{"width":800,"height":800,"scope":["products","manufacturers","suppliers"]},"category_default":{"width":141,"height":180,"scope":["categories"]},"stores_default":{"width":170,"height":115,"scope":["stores"]}}},"theme_settings":{"default_layout":"layout-full-width","layouts":{"category":"layout-left-column","best-sales":"layout-left-column","new-products":"layout-left-column","prices-drop":"layout-left-column","contact":"layout-full-width"}},"dependencies":{"modules":["blockwishlist","productcomments","ets_megamenu","ets_multilayerslider","ybc_blog_free","ybc_themeconfig","ybc_widget","ybc_themeconfig","ybc_specificprices","ybc_productimagehover","ps_bestsellers","ps_specials","ps_newproducts"]}}
\ No newline at end of file
diff --git a/config/xml/.htaccess b/config/xml/.htaccess
new file mode 100644
index 00000000..3de9e400
--- /dev/null
+++ b/config/xml/.htaccess
@@ -0,0 +1,10 @@
+# Apache 2.2
+
+ Order deny,allow
+ Deny from all
+
+
+# Apache 2.4
+
+ Require all denied
+
diff --git a/config/xml/index.php b/config/xml/index.php
new file mode 100644
index 00000000..76cd9dd3
--- /dev/null
+++ b/config/xml/index.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)
+ */
+
+header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
+
+header("Cache-Control: no-store, no-cache, must-revalidate");
+header("Cache-Control: post-check=0, pre-check=0", false);
+header("Pragma: no-cache");
+
+header("Location: ../");
+exit;
diff --git a/config/xml/themes/default.xml b/config/xml/themes/default.xml
new file mode 100644
index 00000000..b775004e
--- /dev/null
+++ b/config/xml/themes/default.xml
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/xml/themes/index.php b/config/xml/themes/index.php
new file mode 100644
index 00000000..76cd9dd3
--- /dev/null
+++ b/config/xml/themes/index.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)
+ */
+
+header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
+
+header("Cache-Control: no-store, no-cache, must-revalidate");
+header("Cache-Control: post-check=0, pre-check=0", false);
+header("Pragma: no-cache");
+
+header("Location: ../");
+exit;
diff --git a/config/xml/trusted_modules_list.xml b/config/xml/trusted_modules_list.xml
new file mode 100644
index 00000000..df016a54
--- /dev/null
+++ b/config/xml/trusted_modules_list.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/config/xml/untrusted_modules_list.xml b/config/xml/untrusted_modules_list.xml
new file mode 100644
index 00000000..0a0ef55d
--- /dev/null
+++ b/config/xml/untrusted_modules_list.xml
@@ -0,0 +1,2 @@
+
+