diff --git a/.gitignore b/.gitignore index e7f91a9e..25617dca 100755 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ config_fr.xml **/.DS_Store config/marketplaces.json tools/vars.sh +.php_cs.cache +.php-cs-fixer.cache +.php-cs-fixer.dist.php diff --git a/README.md b/README.md index 3942e768..cbb4541c 100755 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Lengow for PrestaShop -- **Requires at least:** 1.7 -- **Tested up to:** 8.1.2 +- **Requires at least:** 1.7.7 +- **Tested up to:** 8.1.7 - **Requires PHP:** 7.4 -- **Stable tag:** 3.5.3 +- **Stable tag:** 3.5.4 - **License:** Apache-2.0 - **License URI:** http://www.apache.org/licenses/LICENSE-2.0 diff --git a/classes/controllers/LengowFeedController.php b/classes/controllers/LengowFeedController.php index f42a9654..1cd46baf 100755 --- a/classes/controllers/LengowFeedController.php +++ b/classes/controllers/LengowFeedController.php @@ -236,6 +236,50 @@ public function postProcess() } echo json_encode($data); break; + case 'update_fields': + $fields = Tools::getValue('fields'); + $exportFeatures = Tools::getValue('LENGOW_EXPORT_PRODUCT_FEATURE_ENABLED'); + if ($exportFeatures === 'on') { + LengowConfiguration::updateValue( + LengowConfiguration::EXPORT_PRODUCT_FEATURE_ENABLED, + 1 + ); + } else { + LengowConfiguration::updateValue( + LengowConfiguration::EXPORT_PRODUCT_FEATURE_ENABLED, + 0 + ); + } + if (is_array($fields)) { + foreach ($fields as $key => $field) { + if (in_array($field['prestashop_value'], ['id', 'category', 'name', 'price_incl_tax', 'language'])) { + $field['exported'] = '1'; + } + $defaultKey = $key; + $prestashopValue = isset($field['prestashop_value']) ? pSQL($field['prestashop_value']) : ''; + $lengowField = isset($field['lengow_field']) ? pSQL($field['lengow_field']) : ''; + $exported = isset($field['exported']) ? (int) $field['exported'] : 0; + + $sql = 'SELECT COUNT(*) FROM ' . _DB_PREFIX_ . 'lengow_exported_fields WHERE default_key = "' . $defaultKey . '"'; + $exists = Db::getInstance()->getValue($sql); + + if ($exists) { + $sql = 'UPDATE ' . _DB_PREFIX_ . 'lengow_exported_fields + SET prestashop_value = "' . $prestashopValue . '", + lengow_field = "' . $lengowField . '", + exported = "' . $exported . '" + WHERE default_key = "' . $defaultKey . '"'; + } else { + $sql = 'INSERT INTO ' . _DB_PREFIX_ . 'lengow_exported_fields (default_key, prestashop_value, lengow_field, exported) + VALUES ("' . $defaultKey . '", "' . $prestashopValue . '", "' . $lengowField . '", "' . $exported . '")'; + } + + Db::getInstance()->execute($sql); + } + + return Tools::redirectAdmin($this->lengowLink->getAbsoluteAdminLink('AdminLengowFeed')); + } + break; } exit; } @@ -246,6 +290,10 @@ public function postProcess() */ public function display() { + $lengowExport = new LengowExport(); + $fields = $lengowExport->getConfigFields(); + $form = new LengowConfigurationForm(['fields' => LengowConfiguration::getKeys()]); + $exportFeatures = $form->buildInputs([LengowConfiguration::EXPORT_PRODUCT_FEATURE_ENABLED]); $shopCollection = []; if ($currentShop = Shop::getContextShopID()) { $results = [['id_shop' => $currentShop]]; @@ -292,7 +340,13 @@ public function display() 'list' => $this->buildTable($shop->id), ]; } + + $productsData = $lengowExport->getProductsListData(); + $this->context->smarty->assign('shopCollection', $shopCollection); + $this->context->smarty->assign('fields', $fields); + $this->context->smarty->assign('json_products', $productsData); + $this->context->smarty->assign('export_features', $exportFeatures); parent::display(); } @@ -531,9 +585,9 @@ class="lgw-btn lengow_add_to_export"> $html .= ''; $html .= ''; diff --git a/classes/controllers/LengowOrderSettingController.php b/classes/controllers/LengowOrderSettingController.php index fa7d1316..c0f21f23 100755 --- a/classes/controllers/LengowOrderSettingController.php +++ b/classes/controllers/LengowOrderSettingController.php @@ -42,6 +42,7 @@ public function display() LengowConfiguration::SHIPPED_ORDER_ID, LengowConfiguration::CANCELED_ORDER_ID, LengowConfiguration::SHIPPED_BY_MARKETPLACE_ORDER_ID, + LengowConfiguration::SEND_EMAIL_DISABLED ] ); $importParams = $form->buildInputs( @@ -184,3 +185,4 @@ public function postProcess() } } } + diff --git a/classes/models/LengowConfiguration.php b/classes/models/LengowConfiguration.php index b870c780..89668630 100755 --- a/classes/models/LengowConfiguration.php +++ b/classes/models/LengowConfiguration.php @@ -85,6 +85,8 @@ class LengowConfiguration extends Configuration public const LAST_UPDATE_PLUGIN_DATA = 'LENGOW_PLUGIN_DATA_UPDATE'; public const LAST_UPDATE_AUTHORIZATION_TOKEN = 'LENGOW_LAST_AUTH_TOKEN_UPDATE'; public const LAST_UPDATE_PLUGIN_MODAL = 'LENGOW_LAST_PLUGIN_MODAL'; + public const SEND_EMAIL_DISABLED = 'LENGOW_SEND_EMAIL_DISABLED'; + public const EXPORT_PRODUCT_FEATURE_ENABLED = 'LENGOW_EXPORT_PRODUCT_FEATURE_ENABLED'; /* Configuration parameters */ public const PARAM_COLLECTION = 'collection'; @@ -107,6 +109,7 @@ class LengowConfiguration extends Configuration public const RETURN_TYPE_INTEGER = 'integer'; public const RETURN_TYPE_ARRAY = 'array'; public const RETURN_TYPE_STRING = 'string'; + public const RETURN_TYPE_FLOAT = 'float'; /** * @var array params correspondence keys for toolbox @@ -168,6 +171,8 @@ class LengowConfiguration extends Configuration self::LAST_UPDATE_PLUGIN_DATA => 'last_update_plugin_data', self::LAST_UPDATE_AUTHORIZATION_TOKEN => 'last_update_authorization_token', self::LAST_UPDATE_PLUGIN_MODAL => 'last_update_plugin_modal', + self::SEND_EMAIL_DISABLED => 'send_email_disabled', + self::EXPORT_PRODUCT_FEATURE_ENABLED => 'export_product_feature_enabled', ]; /** @@ -436,7 +441,7 @@ public static function getKeys($key = null) self::PARAM_LABEL => $locale->t('lengow_setting.lengow_import_days_title'), self::PARAM_DEFAULT_VALUE => 3, self::PARAM_UPDATE => true, - self::PARAM_RETURN => self::RETURN_TYPE_INTEGER, + self::PARAM_RETURN => self::RETURN_TYPE_FLOAT, ], self::ANONYMIZE_EMAIL => [ self::PARAM_TYPE => LengowConfigurationForm::TYPE_CHECKBOX, @@ -575,6 +580,19 @@ public static function getKeys($key = null) self::PARAM_GLOBAL => true, self::PARAM_RETURN => self::RETURN_TYPE_INTEGER, ], + self::SEND_EMAIL_DISABLED => [ + self::PARAM_TYPE => LengowConfigurationForm::TYPE_CHECKBOX, + self::PARAM_GLOBAL => true, + self::PARAM_RETURN => self::RETURN_TYPE_BOOLEAN, + self::PARAM_LABEL => $locale->t('lengow_setting.lengow_disable_send_email_title'), + self::PARAM_LEGEND => $locale->t('lengow_setting.lengow_disable_send_email_legend'), + ], + self::EXPORT_PRODUCT_FEATURE_ENABLED => [ + self::PARAM_TYPE => LengowConfigurationForm::TYPE_CHECKBOX, + self::PARAM_GLOBAL => true, + self::PARAM_RETURN => self::RETURN_TYPE_BOOLEAN, + self::PARAM_LABEL => "Export product feature", + ], ]; } @@ -1000,6 +1018,16 @@ public static function isProductionMode() return self::getPluginEnvironment() === 'prod'; } + /** + * Will return the global the typed global value + * @return mixed + */ + public static function getTypedGlobalValue($key) + { + $value = self::get($key); + return self::getValueWithCorrectType($key, $value); + } + /** * Get configuration value in correct type * @@ -1023,9 +1051,12 @@ private static function getValueWithCorrectType($key, $value = null) : []; case self::RETURN_TYPE_STRING: return (string) $value; + case self::RETURN_TYPE_FLOAT: + return (float) $value; } } return $value; } } + diff --git a/classes/models/LengowExport.php b/classes/models/LengowExport.php index c66acdc2..97967caf 100755 --- a/classes/models/LengowExport.php +++ b/classes/models/LengowExport.php @@ -85,66 +85,6 @@ class LengowExport self::PARAM_GET_PARAMS, ]; - /** - * @var array new fields for v3 - */ - protected $newFields = [ - 'id' => 'id', - 'sku' => 'sku', - 'sku_supplier' => 'sku_supplier', - 'ean' => 'ean', - 'upc' => 'upc', - 'isbn' => 'isbn', - 'name' => 'name', - 'quantity' => 'quantity', - 'minimal_quantity' => 'minimal_quantity', - 'availability' => 'availability', - 'is_virtual' => 'is_virtual', - 'condition' => 'condition', - 'category' => 'category', - 'status' => 'status', - 'url' => 'url', - 'url_rewrite' => 'url_rewrite', - 'price_excl_tax' => 'price_excl_tax', - 'price_incl_tax' => 'price_incl_tax', - 'price_before_discount_excl_tax' => 'price_before_discount_excl_tax', - 'price_before_discount_incl_tax' => 'price_before_discount_incl_tax', - 'price_wholesale' => 'price_wholesale', - 'discount_percent' => 'discount_percent', - 'discount_start_date' => 'discount_start_date', - 'discount_end_date' => 'discount_end_date', - 'ecotax' => 'ecotax', - 'shipping_cost' => 'shipping_cost', - 'shipping_delay' => 'shipping_delay', - 'currency' => 'currency', - 'image_url_1' => 'image_1', - 'image_url_2' => 'image_2', - 'image_url_3' => 'image_3', - 'image_url_4' => 'image_4', - 'image_url_5' => 'image_5', - 'image_url_6' => 'image_6', - 'image_url_7' => 'image_7', - 'image_url_8' => 'image_8', - 'image_url_9' => 'image_9', - 'image_url_10' => 'image_10', - 'type' => 'type', - 'parent_id' => 'parent_id', - 'variation' => 'variation', - 'language' => 'language', - 'description' => 'description', - 'description_html' => 'description_html', - 'description_short' => 'short_description', - 'description_short_html' => 'short_description_html', - 'tags' => 'tags', - 'meta_title' => 'meta_title', - 'meta_keyword' => 'meta_keywords', - 'meta_description' => 'meta_description', - 'manufacturer' => 'manufacturer', - 'supplier' => 'supplier', - 'weight' => 'weight', - 'weight_unit' => 'weight_unit', - ]; - /** * @var array legacy fields for export */ @@ -290,7 +230,7 @@ class LengowExport /** * @var array cache combination */ - protected $cacheCombination; + public $cacheCombination; /** * @var array excluded products for export @@ -323,7 +263,7 @@ public function __construct($params = []) $this->stream = isset($params[self::PARAM_STREAM]) ? $params[self::PARAM_STREAM] : false; $this->limit = isset($params[self::PARAM_LIMIT]) ? (int) $params[self::PARAM_LIMIT] : false; $this->idShop = (int) ( - isset($params[self::PARAM_SHOP_ID]) + isset($params[self::PARAM_SHOP_ID]) ? $params[self::PARAM_SHOP_ID] : Context::getContext()->shop->id ); @@ -506,9 +446,57 @@ public function setLegacyFields() $this->legacy = false; } } - self::$defaultFields = $this->legacy ? $this->legacyFields : $this->newFields; + self::$defaultFields = $this->legacy ? $this->legacyFields : $this->getNewFields(); + } + + /** + * Retrieves new fields from the lengow_exported_fields table + * + * @return array Array of fields and valuies + */ + public function getNewFields() + { + $sql = 'SELECT prestashop_value, lengow_field, exported FROM ' . _DB_PREFIX_ . 'lengow_exported_fields'; + $result = Db::getInstance()->executeS($sql); + + + $newFields = []; + if ($result) { + foreach ($result as $row) { + if ($row['exported'] === '1') { + $newFields[$row['lengow_field']] = $row['prestashop_value']; + } + } + } + + return $newFields; } + /** + * Retrieves fields config from the lengow_exported_fields table + * + * @return array Array of fields with their values + */ + public function getConfigFields() + { + $sql = 'SELECT default_key, prestashop_value, lengow_field, exported FROM ' . _DB_PREFIX_ . 'lengow_exported_fields'; + $result = Db::getInstance()->executeS($sql); + + $newFields = []; + if ($result) { + foreach ($result as $row) { + $newFields[$row['default_key']] = [ + 'prestashop_value' => $row['prestashop_value'], + 'lengow_field' => $row['lengow_field'], + 'exported' => $row['exported'], + ]; + } + } + + return $newFields; + } + + /** * Export products * @@ -831,31 +819,34 @@ protected function getFields() $fields[] = $key; $formattedFields[] = LengowFeed::formatFields($key, $this->format, $this->legacy); } - // get product Features - $features = Feature::getFeatures($this->language->id); - foreach ($features as $feature) { - $formattedFeature = LengowFeed::formatFields($feature['name'], $this->format, $this->legacy); - if (!in_array($formattedFeature, $formattedFields, true)) { - $fields[] = $feature['name']; - $formattedFields[] = $formattedFeature; - } else { - if ($this->legacy) { - $fields[] = $feature['name'] . '_1'; + if ((bool)LengowConfiguration::get(LengowConfiguration::EXPORT_PRODUCT_FEATURE_ENABLED)) { + // product Features + $features = Feature::getFeatures($this->language->id); + foreach ($features as $feature) { + $formattedFeature = LengowFeed::formatFields($feature['name'], $this->format, $this->legacy); + if (!in_array($formattedFeature, $formattedFields, true)) { + $fields[] = $feature['name']; + $formattedFields[] = $formattedFeature; + } else { + if ($this->legacy) { + $fields[] = $feature['name'] . '_1'; + } } } - } - // if export product variations -> get variations attributes - if ($this->variation) { - $attributes = AttributeGroup::getAttributesGroups($this->language->id); - foreach ($attributes as $attribute) { - // don't export empty attributes - if ($attribute['name'] === '') { - continue; - } - $formattedAttribute = LengowFeed::formatFields($attribute['name'], $this->format, $this->legacy); - if (!in_array($formattedAttribute, $formattedFields, true)) { - $fields[] = $attribute['name']; - $formattedFields[] = $formattedAttribute; + + // if export product variations -> get variations attributes + if ($this->variation) { + $attributes = AttributeGroup::getAttributesGroups($this->language->id); + foreach ($attributes as $attribute) { + // don't export empty attributes + if ($attribute['name'] === '') { + continue; + } + $formattedAttribute = LengowFeed::formatFields($attribute['name'], $this->format, $this->legacy); + if (!in_array($formattedAttribute, $formattedFields, true)) { + $fields[] = $attribute['name']; + $formattedFields[] = $formattedAttribute; + } } } } @@ -989,4 +980,58 @@ public static function setAdditionalFieldsValues($product, $idProductAttribute = return $arrayProduct; } + + public function getProductsListData() { + $lengowProduct = new LengowProduct(); + $productsData = []; + try { + $exportFields = $this->getNewFields(); + $products = $lengowProduct->getIdProductWithMostData(); + + foreach ($products as $p) { + $idProduct = (int)$p['id_product']; + $idProductAttribute = (int)$p['id_product_attribute']; + + if (in_array($idProduct, $this->excludedProducts, true)) { + continue; + } + + $productData = []; + $product = new LengowProduct($idProduct, $this->language->id, [ + 'carrier' => $this->carrier, + 'image_size' => LengowProduct::getMaxImageType(), + 'language' => $this->language, + ]); + + if ($idProduct) { + foreach ($exportFields as $field) { + $data = $product->getData($field, $idProductAttribute); + // Ensure data is properly encoded + $productData[$field] = $data; + } + + $productsData[] = $productData; + } + } + } catch (Exception $e) { + LengowMain::log(LengowLog::CODE_EXPORT, LengowMain::setLogMessage('log.export.error', ['message' => $e->getMessage()]), $this->logOutput); + } + + $lengowFeed = new LengowFeed(1, 'json', false); + $allProductsArray = []; + + foreach ($productsData as $product) { + $productJson = $lengowFeed->getBody($product, true, 0); + if ($productJson !== false) { + $productArray = json_decode($productJson, true); // Decode the JSON string to an associative array + if (json_last_error() === JSON_ERROR_NONE) { + $allProductsArray[] = $productArray; + } + } + } + + return json_encode($allProductsArray); + } + + } diff --git a/classes/models/LengowFeed.php b/classes/models/LengowFeed.php index 17b35d1c..a8bf96c0 100755 --- a/classes/models/LengowFeed.php +++ b/classes/models/LengowFeed.php @@ -191,7 +191,7 @@ protected function getHeader($data) return rtrim($header, self::CSV_SEPARATOR) . self::EOL; case self::FORMAT_XML: return '' . self::EOL - . '' . self::EOL; + . '' . self::EOL; case self::FORMAT_JSON: return '{"catalog":['; case self::FORMAT_YAML: @@ -208,7 +208,7 @@ protected function getHeader($data) * * @return string */ - protected function getBody($data, $isFirst, $maxCharacter) + public function getBody($data, $isFirst, $maxCharacter) { switch ($this->format) { case self::FORMAT_CSV: @@ -387,23 +387,19 @@ public static function formatFields($str, $format, $legacy = false) } return Tools::substr( - Tools::strtolower( - preg_replace( - '/[^a-zA-Z0-9_]+/', - '', - str_replace([' ', '\''], '_', LengowMain::replaceAccentedChars($str)) - ) + preg_replace( + '/[^a-zA-Z0-9_]+/', + '', + str_replace([' ', '\''], '_', LengowMain::replaceAccentedChars($str)) ), 0, 58 ); default: - return Tools::strtolower( - preg_replace( - '/[^a-zA-Z0-9_]+/', - '', - str_replace([' ', '\''], '_', LengowMain::replaceAccentedChars($str)) - ) + return preg_replace( + '/[^a-zA-Z0-9_]+/', + '', + str_replace([' ', '\''], '_', LengowMain::replaceAccentedChars($str)) ); } } diff --git a/classes/models/LengowHook.php b/classes/models/LengowHook.php index d4562ba5..5cc21d80 100755 --- a/classes/models/LengowHook.php +++ b/classes/models/LengowHook.php @@ -117,7 +117,7 @@ public function registerHooks() 'displayBackOfficeHeader' => '1.6', ]; foreach ($lengowHooks as $hook => $version) { - if ($version <= Tools::substr(_PS_VERSION_, 0, 3)) { + if ((float) $version <= (float) Tools::substr(_PS_VERSION_, 0, 3)) { if ($this->module->isRegisteredInHook($hook)) { continue; } @@ -178,9 +178,14 @@ public function hookFooter() * Hook on order confirmation page to init order's product list * * @param array $args arguments of hook + * + * @return mixed null|void */ public function hookOrderConfirmation($args) { + if (!isset($args['objOrder']) && !isset($args['order'])) { + return; + } $i = 0; $productsCart = []; $order = isset($args['objOrder']) ? $args['objOrder'] : $args['order']; @@ -234,6 +239,9 @@ public function hookOrderConfirmation($args) */ public function hookAdminOrder($args) { + if (!isset($args['id_order'])) { + return; + } if (LengowOrder::isFromLengow($args['id_order'])) { $lengowLink = new LengowLink(); $locale = new LengowTranslation(); @@ -301,9 +309,17 @@ public function hookAdminOrder($args) * Hook before an status' update to synchronize status with lengow * * @param array $args arguments of hook + * + * @return mixed null|void */ public function hookUpdateOrderStatus($args) { + if (!isset($args['id_order'])) { + return; + } + if (!(bool) LengowConfiguration::get(LengowConfiguration::SEND_EMAIL_DISABLED)) { + return; + } $lengowOrder = new LengowOrder($args['id_order']); // not send state if we are on lengow import module if (LengowImport::$currentOrder !== $lengowOrder->lengowMarketplaceSku @@ -317,9 +333,14 @@ public function hookUpdateOrderStatus($args) * Hook after an status' update to synchronize status with lengow * * @param array $args arguments of hook + * + * @return mixed null|void */ public function hookPostUpdateOrderStatus($args) { + if (!isset($args['id_order'])) { + return; + } $lengowOrder = new LengowOrder($args['id_order']); // do nothing if order is not from Lengow or is being imported if (LengowImport::$currentOrder !== $lengowOrder->lengowMarketplaceSku @@ -344,9 +365,17 @@ public function hookPostUpdateOrderStatus($args) * Update, if isset tracking number * * @param array $args arguments of hook + * + * @return mixed null|void */ public function hookActionObjectUpdateAfter($args) { + if (!isset($args['object']->id)) { + return; + } + if (! $args['object'] instanceof Order) { + return; + } if (($args['object'] instanceof Order) && LengowOrder::isFromLengow($args['object']->id)) { $lengowOrder = new LengowOrder($args['object']->id); @@ -366,3 +395,4 @@ public function hookActionObjectUpdateAfter($args) } } } + diff --git a/classes/models/LengowImport.php b/classes/models/LengowImport.php index c86b73ac..8b2ae66d 100755 --- a/classes/models/LengowImport.php +++ b/classes/models/LengowImport.php @@ -280,7 +280,7 @@ class LengowImport * integer delivery_address_id Lengow delivery address id to synchronize * integer id_order_lengow Lengow order id in PrestaShop * integer shop_id Shop id for current synchronization - * integer days Synchronization interval time + * float days Synchronization interval time * integer limit Maximum number of new orders created * boolean log_output Display log messages * boolean debug_mode Activate debug mode @@ -322,7 +322,7 @@ public function __construct($params = []) $this->marketplaceSku = null; // set the time interval $this->setIntervalTime( - isset($params[self::PARAM_DAYS]) ? (int) $params[self::PARAM_DAYS] : null, + isset($params[self::PARAM_DAYS]) ? (float) $params[self::PARAM_DAYS] : null, isset($params[self::PARAM_CREATED_FROM]) ? $params[self::PARAM_CREATED_FROM] : null, isset($params[self::PARAM_CREATED_TO]) ? $params[self::PARAM_CREATED_TO] : null ); @@ -459,7 +459,7 @@ public static function restTimeToImport() /** * Set interval time for order synchronisation * - * @param int|null $days Import period + * @param float|null $days Import period * @param string|null $createdFrom Import of orders since * @param string|null $createdTo Import of orders until */ @@ -468,7 +468,12 @@ private function setIntervalTime($days = null, $createdFrom = null, $createdTo = if ($createdFrom && $createdTo) { // retrieval of orders created from ... until ... $this->createdFrom = strtotime($createdFrom); - $createdToTimestamp = strtotime($createdTo) + 86399; + if ($createdFrom === $createdTo) { + $createdToTimestamp = strtotime($createdTo) + self::MIN_INTERVAL_TIME - 1; + } else { + $createdToTimestamp = strtotime($createdTo); + } + $intervalTime = $createdToTimestamp - $this->createdFrom; $this->createdTo = $intervalTime > self::MAX_INTERVAL_TIME ? $this->createdFrom + self::MAX_INTERVAL_TIME @@ -477,20 +482,20 @@ private function setIntervalTime($days = null, $createdFrom = null, $createdTo = return; } if ($days) { - $intervalTime = $days * 86400; + $intervalTime = floor($days * self::MIN_INTERVAL_TIME); $intervalTime = $intervalTime > self::MAX_INTERVAL_TIME ? self::MAX_INTERVAL_TIME : $intervalTime; } else { // order recovery updated since ... days - $importDays = (int) LengowConfiguration::getGlobalValue( + $importDays = LengowConfiguration::getTypedGlobalValue( LengowConfiguration::SYNCHRONIZATION_DAY_INTERVAL ); - $intervalTime = $importDays * 86400; + $intervalTime = floor($importDays * self::MIN_INTERVAL_TIME); // add security for older versions of the plugin $intervalTime = $intervalTime < self::MIN_INTERVAL_TIME ? self::MIN_INTERVAL_TIME : $intervalTime; $intervalTime = $intervalTime > self::MAX_INTERVAL_TIME ? self::MAX_INTERVAL_TIME : $intervalTime; // get dynamic interval time for cron synchronisation $lastImport = LengowMain::getLastImport(); - $lastSettingUpdate = (int) LengowConfiguration::getGlobalValue( + $lastSettingUpdate = LengowConfiguration::getTypedGlobalValue( LengowConfiguration::LAST_UPDATE_SETTING ); if ($this->typeImport === self::TYPE_CRON diff --git a/classes/models/LengowImportOrder.php b/classes/models/LengowImportOrder.php index d2d8dadf..e76f9ff7 100755 --- a/classes/models/LengowImportOrder.php +++ b/classes/models/LengowImportOrder.php @@ -1011,6 +1011,7 @@ private function createOrder() $this->checkCarrierCompatibility($order); if (LengowConfiguration::getGlobalValue(LengowConfiguration::ACTIVE_NEW_ORDER_HOOK)) { // launch validateOrder hook for other plugin + $this->launchValidateOrderHook($order); } } @@ -1219,11 +1220,11 @@ private function getCartData() // generation of fictitious email $billingData['email'] = $this->getCustomerEmail(); - if ((bool) LengowConfiguration::getGlobalValue(LengowConfiguration::ANONYMIZE_EMAIL)) { + if (LengowConfiguration::getTypedGlobalValue(LengowConfiguration::ANONYMIZE_EMAIL)) { $domain = !LengowMain::getHost() ? 'prestashop.shop' : LengowMain::getHost(); - if ((int) LengowConfiguration::getGlobalValue(LengowConfiguration::TYPE_ANONYMIZE_EMAIL) === 0) { + if (LengowConfiguration::getTypedGlobalValue(LengowConfiguration::TYPE_ANONYMIZE_EMAIL) === 0) { $billingData['email'] = md5($this->marketplaceSku . '-' . $this->marketplace->name) . '@' . strtolower($domain); - } elseif ((int) LengowConfiguration::getGlobalValue(LengowConfiguration::TYPE_ANONYMIZE_EMAIL) === 1) { + } elseif (LengowConfiguration::getTypedGlobalValue(LengowConfiguration::TYPE_ANONYMIZE_EMAIL) === 1) { $billingData['email'] = $this->marketplaceSku . '-' . $this->marketplace->name . '@' . $domain; } } diff --git a/classes/models/LengowInstall.php b/classes/models/LengowInstall.php index 0d5323ec..419d117d 100755 --- a/classes/models/LengowInstall.php +++ b/classes/models/LengowInstall.php @@ -43,6 +43,7 @@ class LengowInstall LengowMethod::TABLE_METHOD_MARKETPLACE, LengowMethod::TABLE_MARKETPLACE_METHOD_MARKETPLACE, LengowMethod::TABLE_MARKETPLACE_METHOD_COUNTRY, + 'lengow_exported_fields', ]; /** @@ -385,7 +386,7 @@ public static function dropTable() $column = LengowAction::ARG_RETURN_TRACKING_NUMBER; if (self::checkTableExists($name) && self::checkFieldExists($name, $column)) { $sql = 'ALTER TABLE ' . _DB_PREFIX_ . 'order_carrier ' - . 'DROP COLUMN `' . Db::getInstance()->_escape($column) . '`;'; + . 'DROP COLUMN `' . Db::getInstance()->_escape($column) . '`;'; Db::getInstance()->execute($sql); LengowMain::log( LengowLog::CODE_UNINSTALL, @@ -395,7 +396,7 @@ public static function dropTable() $column = LengowAction::ARG_RETURN_CARRIER; if (self::checkTableExists($name) && self::checkFieldExists($name, $column)) { $sql = 'ALTER TABLE ' . _DB_PREFIX_ . 'order_carrier ' - . 'DROP COLUMN `' . Db::getInstance()->_escape($column) . '`;'; + . 'DROP COLUMN `' . Db::getInstance()->_escape($column) . '`;'; Db::getInstance()->execute($sql); LengowMain::log( LengowLog::CODE_UNINSTALL, @@ -851,7 +852,7 @@ private function createLengowTables() $column = LengowAction::ARG_RETURN_TRACKING_NUMBER; if (self::checkTableExists($name) && !self::checkFieldExists($name, $column)) { $sql = 'ALTER TABLE ' . _DB_PREFIX_ . 'order_carrier ' - . 'ADD COLUMN `' . $column . '` VARCHAR(64);'; + . 'ADD COLUMN `' . $column . '` VARCHAR(64);'; Db::getInstance()->execute($sql); LengowMain::log( LengowLog::CODE_INSTALL, @@ -866,7 +867,7 @@ private function createLengowTables() $column = LengowAction::ARG_RETURN_CARRIER; if (self::checkTableExists($name) && !self::checkFieldExists($name, $column)) { $sql = 'ALTER TABLE ' . _DB_PREFIX_ . 'order_carrier ' - . 'ADD COLUMN `' . $column . '` VARCHAR(64);'; + . 'ADD COLUMN `' . $column . '` VARCHAR(64);'; Db::getInstance()->execute($sql); LengowMain::log( LengowLog::CODE_INSTALL, diff --git a/classes/models/LengowProduct.php b/classes/models/LengowProduct.php index 105eef22..931abd28 100755 --- a/classes/models/LengowProduct.php +++ b/classes/models/LengowProduct.php @@ -628,7 +628,7 @@ protected function getShippingCost($idProductAttribute = null) * * @return string */ - protected function getImageLink($name, $idProductAttribute = null) + public function getImageLink($name, $idProductAttribute = null) { $index = explode('_', $name); $idImage = $index[1] - 1; @@ -1064,4 +1064,120 @@ public static function getMaxImageType() } throw new LengowException(LengowMain::setLogMessage('log.export.error_cant_find_image_size')); } + + public function getTopProductsWithScores($langId, $limit = 10) + { + $query = new DbQuery(); + + $query->select('p.id_product'); + $query->select('pl.name AS product_name'); + $query->select('pa.id_product_attribute'); + $query->select('(LENGTH(pl.description) > 0) AS description_score'); + $query->select('(LENGTH(pl.description_short) > 0) AS short_description_score'); + $query->select('(SELECT COUNT(img.id_image) FROM ' . _DB_PREFIX_ . 'image img WHERE img.id_product = p.id_product) AS image_score'); + $query->select('(SELECT COUNT(pa_inner.id_product_attribute) FROM ' . _DB_PREFIX_ . 'product_attribute pa_inner WHERE pa_inner.id_product = p.id_product) AS attribute_score'); + $query->select('(SELECT COUNT(pf.id_feature) FROM ' . _DB_PREFIX_ . 'feature_product pf WHERE pf.id_product = p.id_product) AS feature_score'); + $query->select('(SELECT COUNT(pt.id_tag) FROM ' . _DB_PREFIX_ . 'product_tag pt WHERE pt.id_product = p.id_product) AS tag_score'); + $query->select('((LENGTH(pl.description) > 0) + + (LENGTH(pl.description_short) > 0) + + (SELECT COUNT(img.id_image) FROM ' . _DB_PREFIX_ . 'image img WHERE img.id_product = p.id_product) + + (SELECT COUNT(pa_inner.id_product_attribute) FROM ' . _DB_PREFIX_ . 'product_attribute pa_inner WHERE pa_inner.id_product = p.id_product) + + (SELECT COUNT(pf.id_feature) FROM ' . _DB_PREFIX_ . 'feature_product pf WHERE pf.id_product = p.id_product) + + (SELECT COUNT(pt.id_tag) FROM ' . _DB_PREFIX_ . 'product_tag pt WHERE pt.id_product = p.id_product)) AS total_score'); + + $query->from('product', 'p'); + $query->innerJoin('product_lang', 'pl', 'p.id_product = pl.id_product'); + $query->leftJoin('product_attribute', 'pa', 'p.id_product = pa.id_product'); + + $query->where('pl.id_lang = ' . (int)$langId); + + // Trier par score total et limiter les résultats + $query->orderBy('total_score DESC'); + $query->limit((int)$limit); + + return Db::getInstance()->executeS($query); + } + + public function getProductsWithMostImages() + { + $query = new DbQuery(); + $query->select('p.id_product'); + $query->select('pl.name AS product_name'); + $query->select('COUNT(img.id_image) AS image_count'); + $query->from('product', 'p'); + $query->innerJoin('product_lang', 'pl', 'p.id_product = pl.id_product'); + $query->leftJoin('image', 'img', 'p.id_product = img.id_product'); + $query->where('pl.id_lang = ' . (int)Context::getContext()->language->id); + $query->groupBy('p.id_product'); + $query->orderBy('image_count DESC'); + $query->limit(5); + + return Db::getInstance()->executeS($query); + } + + public function getProductsWithoutAttributesWithMostCompletedData() + { + $query = new DbQuery(); + + $query->select('p.id_product'); + $query->select('pl.name AS product_name'); + $query->select('(LENGTH(pl.description) > 0) AS description_score'); + $query->select('(LENGTH(pl.description_short) > 0) AS short_description_score'); + $query->select('(SELECT COUNT(img.id_image) FROM ' . _DB_PREFIX_ . 'image img WHERE img.id_product = p.id_product) AS image_score'); + $query->select('(SELECT COUNT(pf.id_feature) FROM ' . _DB_PREFIX_ . 'feature_product pf WHERE pf.id_product = p.id_product) AS feature_score'); + $query->select('(SELECT COUNT(pt.id_tag) FROM ' . _DB_PREFIX_ . 'product_tag pt WHERE pt.id_product = p.id_product) AS tag_score'); + + $query->select('((LENGTH(pl.description) > 0) + + (LENGTH(pl.description_short) > 0) + + (SELECT COUNT(img.id_image) FROM ' . _DB_PREFIX_ . 'image img WHERE img.id_product = p.id_product) + + (SELECT COUNT(pf.id_feature) FROM ' . _DB_PREFIX_ . 'feature_product pf WHERE pf.id_product = p.id_product) + + (SELECT COUNT(pt.id_tag) FROM ' . _DB_PREFIX_ . 'product_tag pt WHERE pt.id_product = p.id_product)) AS total_score'); + + $query->from('product', 'p'); + $query->innerJoin('product_lang', 'pl', 'p.id_product = pl.id_product'); + $query->where('pl.id_lang = ' . (int)Context::getContext()->language->id); + $query->where('p.id_product NOT IN ( + SELECT pa.id_product + FROM ' . _DB_PREFIX_ . 'product_attribute pa )'); + $query->orderBy('total_score DESC'); + $query->limit(5); + + return Db::getInstance()->executeS($query); + } + + public function getIdProductWithMostData() + { + $fullestProducts = $this->getTopProductsWithScores(Context::getContext()->language->id); + $productsWithMostImages = $this->getProductsWithMostImages(); + $productsWithoutDeclinaison = $this->getProductsWithoutAttributesWithMostCompletedData(); + + $mergedProducts = array(); + + foreach ($fullestProducts as $product) { + $mergedProducts[] = array( + 'id_product' => $product['id_product'], + 'id_product_attribute' => isset($product['id_product_attribute']) ? $product['id_product_attribute'] : null + ); + } + + foreach ($productsWithMostImages as $product) { + $mergedProducts[] = array( + 'id_product' => $product['id_product'], + 'id_product_attribute' => isset($product['id_product_attribute']) ? $product['id_product_attribute'] : null + ); + } + + foreach ($productsWithoutDeclinaison as $product) { + $mergedProducts[] = array( + 'id_product' => $product['id_product'], + 'id_product_attribute' => isset($product['id_product_attribute']) ? $product['id_product_attribute'] : null + ); + } + + $uniqueProducts = array_unique($mergedProducts, SORT_REGULAR); + + return $uniqueProducts; + } + + } diff --git a/config/checkmd5.csv b/config/checkmd5.csv index bb56db00..9c7aeabd 100644 --- a/config/checkmd5.csv +++ b/config/checkmd5.csv @@ -2,502 +2,507 @@ /fr.php|0688c5e6237bf1c4ebf4d8f7a622a794 /index.php|be8b25f88c14bddd7711e4585ebae316 /it.php|14e76520f64429f3436543e904e13015 -/lengow.php|3f27e5572b83ccc642bbca8356d98c94 +/lengow.php|0501065a2845c43b50f412bd96a383df /loader.php|b3d94d65d0a074088758bc1e50736a01 /config/index.php|be8b25f88c14bddd7711e4585ebae316 -/translations/en.csv|2969fbe9e927c5b2d912d3fb22fdb611 -/translations/es.csv|6d3e1f545996f2b879b1ec49a8082a91 -/translations/fr.csv|3d2f8a49921f213d77f30fd691db7588 +/translations/en.csv|c1fa909d896e79110157a196e4798356 +/translations/es.csv|b35c3fe5f77311edfe98c62a83cffe5d +/translations/fr.csv|e1ab94fd478304addee79007a99d8809 /translations/index.php|be8b25f88c14bddd7711e4585ebae316 -/translations/it.csv|296a4fe57f67b1d61c805bd80cd39f9e -/classes/controllers/LengowHomeController.php|124a1bb77383394555206b022b67a1ad -/classes/controllers/LengowOrderSettingController.php|0e1cccfc4ea3c56e00d9ddece9e9f58d -/classes/controllers/LengowDashboardController.php|60b83659efdecee33637ec4c0999aae3 -/classes/controllers/LengowMainSettingController.php|302aaed85a09d49dd92da005146f4165 -/classes/controllers/LengowOrderController.php|5e9145ead32502c3e2212b8746b0e5f8 -/classes/controllers/LengowToolboxController.php|48c875b7c202a21c9b5ee07e9ddbd4ae -/classes/controllers/LengowLegalsController.php|14effece7503b9524c83f628d255d146 -/classes/controllers/LengowController.php|79069614553337166806e6d95a49a875 -/classes/controllers/LengowHelpController.php|e0b813a636dcf6a6910e8a2c7199931c -/classes/controllers/index.php|a90243841e2e64a4ee2965d4dfa12491 -/classes/controllers/LengowFeedController.php|b9a4e1bfe6836ad7a648de8a2a79bf77 -/classes/models/LengowBackup.php|0b4ad4d2a965e7df0df4639dc3230423 -/classes/models/LengowExport.php|4b80f5d76bc1612177829c8325a06057 -/classes/models/LengowConfigurationForm.php|ba4ba2a08431bf6521c5b48c4a863ef5 -/classes/models/LengowCustomer.php|dfb59e7d5a8cb8c47fae3015c66607af -/classes/models/LengowSync.php|cf6877bf01e2794b9d9c29989894ae14 -/classes/models/LengowConnector.php|93f0eacbf405a0d504d8685eabf794b2 -/classes/models/LengowLink.php|d658ea39cfbae6deefe2069fd92ad4fa -/classes/models/LengowInstall.php|8850827d3b933feadc8d05329cfc0717 +/translations/it.csv|d7de44f7b342cdda5f0b6ae43fe5f26e +/classes/index.php|a90243841e2e64a4ee2965d4dfa12491 +/classes/models/LengowInstall.php|23d6701683d5c10bd29945d1f2a4c318 +/classes/models/LengowMarketplace.php|a21f95bc5e68dbfe49d5db53c5b04625 +/classes/models/LengowProduct.php|b7952d0f3d20ce2b70eb88538cf0a51e +/classes/models/LengowHook.php|e597634ab8cf408a91705f02de7bac5e +/classes/models/LengowOrderError.php|a6764f224b3b42fdd5b5c765cef9aaaf +/classes/models/LengowOrderCarrier.php|593f0e1ff6bc9611739de14b8f3d192a +/classes/models/LengowFile.php|5a58b3cf03a99bfeb305abe048799206 +/classes/models/LengowList.php|31030820ccfc2ed94bfc5249c72d94f6 +/classes/models/index.php|a90243841e2e64a4ee2965d4dfa12491 +/classes/models/LengowShop.php|9f2898b82329096caedba902a30a0a6a +/classes/models/LengowCatalog.php|48fb568b8823482ef6b1e7bc48122300 /classes/models/LengowException.php|8beecbf00b5c1c047ee19af552903439 -/classes/models/LengowConfiguration.php|d90bab53b02bfe8c599b41ee607660c0 -/classes/models/LengowLog.php|5ca3e0b79356d72945bb5fe721f4f246 -/classes/models/LengowHook.php|69e641ad00b04efa23b988c9183d2185 -/classes/models/LengowGender.php|be904df135ff78f17a55ea60ab1413d5 /classes/models/LengowToolbox.php|16c719778050e0492cbed92d2adf75e1 +/classes/models/LengowGender.php|be904df135ff78f17a55ea60ab1413d5 +/classes/models/LengowFeed.php|7dd97977afed7c00a6a5d3663e77b038 /classes/models/LengowCarrier.php|ec7de4fba34adbbb30cbde3ef9bb59c8 -/classes/models/LengowOrderError.php|a6764f224b3b42fdd5b5c765cef9aaaf -/classes/models/LengowImportOrder.php|8104a5e8ea344a65f20b389f910d9291 -/classes/models/LengowOrderLine.php|749e718219adf697b559f88e998860df -/classes/models/LengowTranslation.php|a3cf23bc8af338976a392f9d0bb146ca +/classes/models/LengowLink.php|d658ea39cfbae6deefe2069fd92ad4fa /classes/models/LengowCountry.php|3f0559f5ec914a4cec1ca7848204553b -/classes/models/LengowPaymentModule.php|7b3d642f1ea4d80eb20571f6fbdfddb7 -/classes/models/LengowMethod.php|269ff651d60ba3e2604e3f4ee98ac883 -/classes/models/LengowOrderDetail.php|c0ea8445020fc1c49b3d9e7099650d7a -/classes/models/LengowMarketplace.php|a21f95bc5e68dbfe49d5db53c5b04625 -/classes/models/LengowProduct.php|b7952d0f3d20ce2b70eb88538cf0a51e -/classes/models/LengowCart.php|dd2dc66b0c046a3ef8461807d4432280 /classes/models/LengowMain.php|68ff3498a94537a51bc5e6b61bd854df -/classes/models/LengowList.php|31030820ccfc2ed94bfc5249c72d94f6 -/classes/models/LengowOrderCarrier.php|593f0e1ff6bc9611739de14b8f3d192a -/classes/models/LengowCatalog.php|48fb568b8823482ef6b1e7bc48122300 -/classes/models/LengowNameParser.php|24faacd2e9367fc4652784090b20d0d5 -/classes/models/LengowShop.php|9f2898b82329096caedba902a30a0a6a /classes/models/LengowAddress.php|b6f361b8c5f658c41adb5b437166c5e3 -/classes/models/LengowFeed.php|0b1cac677bebaff745d54e60d20ef84e -/classes/models/index.php|a90243841e2e64a4ee2965d4dfa12491 +/classes/models/LengowCart.php|dd2dc66b0c046a3ef8461807d4432280 +/classes/models/LengowPaymentModule.php|7b3d642f1ea4d80eb20571f6fbdfddb7 +/classes/models/LengowOrderDetail.php|c0ea8445020fc1c49b3d9e7099650d7a /classes/models/LengowToolboxElement.php|20dbd4958f8914acd3d9654b9cde026a -/classes/models/LengowImport.php|86292645321d62c92729ae482b8a503a +/classes/models/LengowImport.php|27c9684c21cd1d34894df9bb3a968ec7 /classes/models/LengowAction.php|c697eb825f2d69baca255d94e0fa79d5 +/classes/models/LengowOrderLine.php|749e718219adf697b559f88e998860df +/classes/models/LengowImportOrder.php|dac707f6938181c58deb518b0bd7f80b +/classes/models/LengowTranslation.php|a3cf23bc8af338976a392f9d0bb146ca /classes/models/LengowOrder.php|2ab9808c9ae021b403a94aa8f58a4b9f -/classes/models/LengowFile.php|5a58b3cf03a99bfeb305abe048799206 -/classes/index.php|a90243841e2e64a4ee2965d4dfa12491 -/controllers/admin/AdminLengowMainSettingController.php|cb8b24a5405860c955a6e56faba62d08 -/controllers/admin/AdminLengowOrderController.php|3f287ca4f413ed8256694d45f873980f -/controllers/admin/AdminLengowHelpController.php|d17ee58a9f6d2ebd84d55e76e4fd6055 -/controllers/admin/AdminLengowFeedController.php|4e7db60977fb58dc257a8be90245b637 -/controllers/admin/AdminLengowLegalsController.php|c61e9ab8da13e272606369772448b0c7 +/classes/models/LengowMethod.php|269ff651d60ba3e2604e3f4ee98ac883 +/classes/models/LengowConfigurationForm.php|ba4ba2a08431bf6521c5b48c4a863ef5 +/classes/models/LengowConnector.php|93f0eacbf405a0d504d8685eabf794b2 +/classes/models/LengowCustomer.php|dfb59e7d5a8cb8c47fae3015c66607af +/classes/models/LengowBackup.php|0b4ad4d2a965e7df0df4639dc3230423 +/classes/models/LengowSync.php|cf6877bf01e2794b9d9c29989894ae14 +/classes/models/LengowLog.php|5ca3e0b79356d72945bb5fe721f4f246 +/classes/models/LengowConfiguration.php|1e89893aa7f1146e06d5d9fa635d061b +/classes/models/LengowExport.php|a53265e0fcbf075ec91e761d21b3505a +/classes/models/LengowNameParser.php|24faacd2e9367fc4652784090b20d0d5 +/classes/controllers/index.php|a90243841e2e64a4ee2965d4dfa12491 +/classes/controllers/LengowHelpController.php|e0b813a636dcf6a6910e8a2c7199931c +/classes/controllers/LengowOrderSettingController.php|37302b5543075b99f68e986f641cbafc +/classes/controllers/LengowController.php|79069614553337166806e6d95a49a875 +/classes/controllers/LengowFeedController.php|c2da3e52a7737e9a55ae3f8c7bb81a8f +/classes/controllers/LengowDashboardController.php|60b83659efdecee33637ec4c0999aae3 +/classes/controllers/LengowMainSettingController.php|302aaed85a09d49dd92da005146f4165 +/classes/controllers/LengowToolboxController.php|48c875b7c202a21c9b5ee07e9ddbd4ae +/classes/controllers/LengowOrderController.php|5e9145ead32502c3e2212b8746b0e5f8 +/classes/controllers/LengowHomeController.php|124a1bb77383394555206b022b67a1ad +/classes/controllers/LengowLegalsController.php|14effece7503b9524c83f628d255d146 +/controllers/index.php|be8b25f88c14bddd7711e4585ebae316 +/controllers/admin/index.php|be8b25f88c14bddd7711e4585ebae316 /controllers/admin/AdminLengowHomeController.php|01a450088f055ac12f56201534732f19 +/controllers/admin/AdminLengowFeedController.php|4e7db60977fb58dc257a8be90245b637 /controllers/admin/AdminLengowDashboardController.php|e996a37046ab4b400a942c20c0310a7d +/controllers/admin/AdminLengowOrderController.php|3f287ca4f413ed8256694d45f873980f +/controllers/admin/AdminLengowMainSettingController.php|cb8b24a5405860c955a6e56faba62d08 +/controllers/admin/AdminLengowLegalsController.php|c61e9ab8da13e272606369772448b0c7 /controllers/admin/AdminLengowToolboxController.php|f40e82431eb689c849552a37cdf3da5a /controllers/admin/AdminLengowOrderSettingController.php|1b8c3ea8b3797fd1d4b7fe2afeb375a9 -/controllers/admin/index.php|be8b25f88c14bddd7711e4585ebae316 -/controllers/index.php|be8b25f88c14bddd7711e4585ebae316 -/mails/gb/report.txt|de4160ab037db7fa1806b1dabe546a60 -/mails/gb/report.html|aa21eced7789f09a68ca474b04cc431e -/mails/gb/index.php|be8b25f88c14bddd7711e4585ebae316 -/mails/it/report.txt|de4160ab037db7fa1806b1dabe546a60 -/mails/it/report.html|aa21eced7789f09a68ca474b04cc431e -/mails/it/index.php|be8b25f88c14bddd7711e4585ebae316 +/controllers/admin/AdminLengowHelpController.php|d17ee58a9f6d2ebd84d55e76e4fd6055 +/mails/sv/index.php|be8b25f88c14bddd7711e4585ebae316 /mails/sv/report.txt|de4160ab037db7fa1806b1dabe546a60 /mails/sv/report.html|aa21eced7789f09a68ca474b04cc431e -/mails/sv/index.php|be8b25f88c14bddd7711e4585ebae316 -/mails/fr/report.txt|de4160ab037db7fa1806b1dabe546a60 -/mails/fr/report.html|aa21eced7789f09a68ca474b04cc431e -/mails/fr/index.php|be8b25f88c14bddd7711e4585ebae316 -/mails/nl/report.txt|de4160ab037db7fa1806b1dabe546a60 -/mails/nl/report.html|aa21eced7789f09a68ca474b04cc431e -/mails/nl/index.php|be8b25f88c14bddd7711e4585ebae316 -/mails/en/report.txt|de4160ab037db7fa1806b1dabe546a60 -/mails/en/report.html|aa21eced7789f09a68ca474b04cc431e -/mails/en/index.php|be8b25f88c14bddd7711e4585ebae316 -/mails/es/report.txt|de4160ab037db7fa1806b1dabe546a60 -/mails/es/report.html|aa21eced7789f09a68ca474b04cc431e -/mails/es/index.php|be8b25f88c14bddd7711e4585ebae316 /mails/index.php|be8b25f88c14bddd7711e4585ebae316 +/mails/it/index.php|be8b25f88c14bddd7711e4585ebae316 +/mails/it/report.txt|de4160ab037db7fa1806b1dabe546a60 +/mails/it/report.html|aa21eced7789f09a68ca474b04cc431e +/mails/pt/index.php|be8b25f88c14bddd7711e4585ebae316 /mails/pt/report.txt|de4160ab037db7fa1806b1dabe546a60 /mails/pt/report.html|aa21eced7789f09a68ca474b04cc431e -/mails/pt/index.php|be8b25f88c14bddd7711e4585ebae316 +/mails/gb/index.php|be8b25f88c14bddd7711e4585ebae316 +/mails/gb/report.txt|de4160ab037db7fa1806b1dabe546a60 +/mails/gb/report.html|aa21eced7789f09a68ca474b04cc431e +/mails/nl/index.php|be8b25f88c14bddd7711e4585ebae316 +/mails/nl/report.txt|de4160ab037db7fa1806b1dabe546a60 +/mails/nl/report.html|aa21eced7789f09a68ca474b04cc431e +/mails/de/index.php|be8b25f88c14bddd7711e4585ebae316 /mails/de/report.txt|de4160ab037db7fa1806b1dabe546a60 /mails/de/report.html|aa21eced7789f09a68ca474b04cc431e -/mails/de/index.php|be8b25f88c14bddd7711e4585ebae316 +/mails/fr/index.php|be8b25f88c14bddd7711e4585ebae316 +/mails/fr/report.txt|de4160ab037db7fa1806b1dabe546a60 +/mails/fr/report.html|aa21eced7789f09a68ca474b04cc431e +/mails/es/index.php|be8b25f88c14bddd7711e4585ebae316 +/mails/es/report.txt|de4160ab037db7fa1806b1dabe546a60 +/mails/es/report.html|aa21eced7789f09a68ca474b04cc431e +/mails/en/index.php|be8b25f88c14bddd7711e4585ebae316 +/mails/en/report.txt|de4160ab037db7fa1806b1dabe546a60 +/mails/en/report.html|aa21eced7789f09a68ca474b04cc431e +/upgrade/update_3.5.4.php|ec694dd56a2ff2bf86b08702c458994c +/upgrade/index.php|a90243841e2e64a4ee2965d4dfa12491 /upgrade/update_3.0.2.php|ee99924a6b556bd82ee52f7966f45bac -/upgrade/update_3.2.2.php|192eb7b032dead89666ffe41b1ba8646 -/upgrade/update_3.2.3.php|7c168fc6b974f17dea3f4879acee71d6 /upgrade/update_3.0.1.php|715cedb6c2f1d9651e84ea2a6b54939d -/upgrade/index.php|a90243841e2e64a4ee2965d4dfa12491 +/upgrade/update_3.2.3.php|7c168fc6b974f17dea3f4879acee71d6 +/upgrade/update_3.2.2.php|192eb7b032dead89666ffe41b1ba8646 /upgrade/update_3.0.0.php|f1f09d1725b39114b4fa4e51583668c3 -/views/js/select2.js|2565df263f3a062418fb9ef1202d7e4e +/views/.DS_Store|1f5ad4a4cb09949ac2d21d5ea1407e34 +/views/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/css/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/css/select2.css|8969ac4614d64a13dfc32e1eb4e731f7 +/views/css/font-awesome.css|bf4b58c946c9234e4a6b9f7a70d38006 +/views/css/lengow-pages.css|ca4b43a727cf775482ff5c53a4c80164 +/views/css/bootstrap-datepicker.css|d5260247b97663d887f4efe8ec894353 +/views/css/lengow-components.css|917e753f22a48aa28f4ccfbf1184e8a0 +/views/css/lengow-tab.css|5b6066640ae15dce94cd2225d84cec50 +/views/css/lengow-layout.css|4138aa929a5dcd6a44ca640cbd81894e +/views/js/bootstrap-datepicker.js|5e12aafeadd2893b88641fa55e102dd7 +/views/js/index.php|be8b25f88c14bddd7711e4585ebae316 /views/js/clipboard.js|55db0ff82a3b6b247844ae0d07d85fc6 /views/js/bootstrap.min.js|3584d6a859bebce245bae0a6e0606e2f -/views/js/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/js/jquery.1.12.0.min.js|e63f1452800f328881a789956054aca3 +/views/js/select2.js|2565df263f3a062418fb9ef1202d7e4e /views/js/lengow/order.js|53696be1ee061487de8230f8312ad4b4 -/views/js/lengow/admin.js|62eeab452a15d83278e4d0c6dcdc50a1 -/views/js/lengow/main_setting.js|1bfae4b8bf1c6ba01def0ef3a36d462c -/views/js/lengow/feed.js|a7a0ea439567693a141121bda090f611 +/views/js/lengow/feed.js|386d0d7c79724ba6c157656144688f4d +/views/js/lengow/index.php|be8b25f88c14bddd7711e4585ebae316 /views/js/lengow/toolbox.js|72db7b5a4e5b19702770ad899b5f3e9a /views/js/lengow/home.js|1f2e8c28ae870b3476483d3759f76964 /views/js/lengow/order_setting.js|7f4ef586c987fbddf686945149fe18a9 -/views/js/lengow/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/js/bootstrap-datepicker.js|5e12aafeadd2893b88641fa55e102dd7 -/views/img/bag.png|d812d529e1b5404cf7b92d4f36ab7abd -/views/img/connection-module.png|edb3364c8b46d07cbaa7192944f01475 -/views/img/carret-down.png|f54e84c999caf3849f56fcf6537141bc -/views/img/search.png|7f9b41e3ae4871543c2962369b9de277 -/views/img/plug-grey.png|4231ef1a002a23decaa0e3e292a417fc -/views/img/arrow-right.png|e56e5bb1dd1c9e23161dd7f0aa4293d2 -/views/img/modal-close.png|32cadb3a7cfff33ff4d79b53b817f8e2 -/views/img/home-orders.png|db05b21ec6b166d844b42c0e807cb265 +/views/js/lengow/admin.js|62eeab452a15d83278e4d0c6dcdc50a1 +/views/js/lengow/main_setting.js|1bfae4b8bf1c6ba01def0ef3a36d462c +/views/js/jquery.1.12.0.min.js|e63f1452800f328881a789956054aca3 /views/img/plugin-update.png|a350fb0045bd61298a90268d0026e022 -/views/img/lengow-blue.png|fae0834ea05ab923912a47bbcb3af59b -/views/img/unplugged.png|55b5eeee08952d538185a659abbbb932 -/views/img/plane.png|7d27896af3e0f3cf6e353cccef8f8267 -/views/img/clock.png|499ea8d7905f77624cb64b1af3f955b5 -/views/img/lengow-white.png|0324647d065652cd15282d7fac4ef8ff -/views/img/connected-prestashop.png|190c1dd936024ad8bb95d42491e7fe1e -/views/img/flag/XK.png|6d8d386104193e251f4c3077e5bf5d3b -/views/img/flag/PE.png|2213daa82fbd4344c53ed14272064ed3 -/views/img/flag/PY.png|47ba6b57d21f58b4e206251230b19ac8 -/views/img/flag/MO.png|9e22cff886b227b7c66a7299cee60c4a -/views/img/flag/VI.png|e69dce8e3db81cbc4e43f41b41eb5de7 -/views/img/flag/GN.png|37244e09a030931a398207bbed599818 -/views/img/flag/BH.png|4c735715f2b57bf14008bc277ba43c51 -/views/img/flag/PA.png|9407681f91e287935c4a7f987da34c63 -/views/img/flag/RU.png|784a2a8638e99ff3e7d229be90b4f420 -/views/img/flag/EG.png|22e30f3af14155502c2f4a4819bcf799 -/views/img/flag/JO.png|30a9129bf6502226ba7fd9da08e4b35c -/views/img/flag/SI.png|87f0819a7674137b062db99f7b888af7 -/views/img/flag/LA.png|73e8e91f8cec75bc2cb582effb937212 -/views/img/flag/CF.png|5f181e4dc309c220174c64376759a89a -/views/img/flag/SD.png|fa421effd81aa5f626083d0b2474853b -/views/img/flag/DJ.png|5ddb0d34fd83107a3d83e18880fa0305 -/views/img/flag/BE.png|a538d77b0d0e599095ca6db2ada1c2f3 +/views/img/carret-down.png|f54e84c999caf3849f56fcf6537141bc +/views/img/flag/TG.png|e2cf3a5f662ba166b85bf7a224d9ded9 /views/img/flag/ME.png|b9d7ebeaa14eaf5c2132098e57ac3b3a -/views/img/flag/GM.png|d5273ab5a2bb48c0678db55894849363 -/views/img/flag/IL.png|ca066a0cb246da38676b6a4930b29971 -/views/img/flag/AU.png|ab3991ad7489bf384fb5446222bb48c6 -/views/img/flag/GQ.png|a3535b533b2af91719ba770f308ceb67 -/views/img/flag/BV.png|2f9326738982ae4876fc7f0f0960c77e -/views/img/flag/IR.png|304c0bf838a4fbc343b85f2a0c252d1b -/views/img/flag/ST.png|c879c939fdce2c819a2f80f1680580d2 -/views/img/flag/VC.png|04d50353949376995d0ca8827fd35241 -/views/img/flag/BN.png|54fbed23e5e0467e10530f00e5a53d8a -/views/img/flag/AR.png|2c0793e851675c4178e6c623bedada68 -/views/img/flag/VG.png|cd80422040f3569cdee8fe37c9ac233b -/views/img/flag/DK.png|4c8c04806671345cacfabbd0781aaa64 -/views/img/flag/CM.png|7944de5a7885828172fe267c5f0bd666 -/views/img/flag/IE.png|6882a56174318552db95a58dc4bc295c -/views/img/flag/ES.png|6db63d7e4bee7add3ead8eb95c9668e8 -/views/img/flag/CC.png|7fecb4864f239d8d672d4dd0c780797c -/views/img/flag/CO.png|e9239e0e2019b75b50908273696037a5 +/views/img/flag/LA.png|73e8e91f8cec75bc2cb582effb937212 /views/img/flag/MR.png|88251c8ae9701c1c130b51c206462216 -/views/img/flag/LS.png|424c47d3ce5111e4f646abcfafc652be -/views/img/flag/MX.png|4585eaa23399ff97b0edddebc9548733 -/views/img/flag/MW.png|eaadfcd54efd99816aa1e98cde55b48a -/views/img/flag/SY.png|5f25bd15bf8a63c5f55b36a63ad029b5 -/views/img/flag/TD.png|c09a11652d7215dbbb86b9f2e08e1eaa -/views/img/flag/NL.png|f9da0a905e9fec2ff6a12d52b0bae61c -/views/img/flag/KM.png|130b19dbbed58a2896335af73c1a7ff2 -/views/img/flag/NU.png|d89e7c94b030bb809a10231c0ee38e8e -/views/img/flag/CR.png|fb27f4596f9ac16b951e0f017dbeaa2b -/views/img/flag/LY.png|cc1fe9b7e51a1ffa91c5f79d26043a25 -/views/img/flag/PR.png|587404b281120855ff304375851e3793 -/views/img/flag/VE.png|60739b59a02254e88e103f154f434087 -/views/img/flag/BZ.png|9481ccc9362b14353caa982b525793a8 -/views/img/flag/TV.png|87b460b75260e3da93f06e56840a95b9 -/views/img/flag/CL.png|6e05e10bbad0945a6a0ac4f72de351bd -/views/img/flag/LI.png|ba8539c6542d4d7e443a10f91bea414c -/views/img/flag/HT.png|3dd1a60ae95e7348b00fa8c1bffd0258 -/views/img/flag/HK.png|9e22cff886b227b7c66a7299cee60c4a +/views/img/flag/NI.png|7f337fe073caff1ecb41acae6a9d1e3d +/views/img/flag/LV.png|48efa49e2a85e9c077be41542ad17a1a +/views/img/flag/OM.png|03760a212630cc7c0e5471df8281355e +/views/img/flag/AF.png|49d77e12111afc3d4194ade2664d286f +/views/img/flag/CY.png|eb2365a3603d60aff08f3c50cc87f249 +/views/img/flag/BJ.png|e0db6fe266bf66ddebe037bc574a930d +/views/img/flag/AQ.png|7b496e199605b532dba8319044097d7e +/views/img/flag/CN.png|9e22cff886b227b7c66a7299cee60c4a +/views/img/flag/CO.png|e9239e0e2019b75b50908273696037a5 +/views/img/flag/CX.png|3f3aba1069496a40934637cf4b4f766c +/views/img/flag/AG.png|3e96767508f891bee4e18b0879197059 +/views/img/flag/MS.png|ecfd4b85afd85b8bf8c531f8e6255cae +/views/img/flag/MD.png|2b7d7b14d52f8fe8d800c000f2ddd0a9 +/views/img/flag/ZM.png|90feb476b1cf845ec389074f32585c34 +/views/img/flag/ZZ.png|737e91fb2b9da9e69ab2495a49cce79d /views/img/flag/VN.png|8c03bf96d845425cda900ed4cf965193 -/views/img/flag/TC.png|1988184525b5d9410d8bbc07fca834c0 +/views/img/flag/TF.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/TD.png|c09a11652d7215dbbb86b9f2e08e1eaa +/views/img/flag/YT.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/LB.png|a40045be63d6f413ff91c9b5867aa880 +/views/img/flag/MF.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/LU.png|b30b097b3f764af26f3fc551e10b62fa /views/img/flag/MQ.png|cc1fc719aa70170cf59aa97989f32fca -/views/img/flag/ER.png|098530d2dfadf464e46eeb7b67f88391 -/views/img/flag/SV.png|7f337fe073caff1ecb41acae6a9d1e3d -/views/img/flag/GI.png|ecfd4b85afd85b8bf8c531f8e6255cae -/views/img/flag/SN.png|1a524290e23411b9f33e2e4426cb2d40 -/views/img/flag/NF.png|380b2fedcc87649ed83992a0e8fcfcc8 +/views/img/flag/CZ.png|c29892cb415d8489c5e4024a867fe8b6 +/views/img/flag/AE.png|ea9875d8e8afafed9f07e63e7fae0b3d +/views/img/flag/CM.png|7944de5a7885828172fe267c5f0bd666 +/views/img/flag/BI.png|2bc04f56f098abfd22ec8dc9b4d25c6f +/views/img/flag/AR.png|2c0793e851675c4178e6c623bedada68 /views/img/flag/AS.png|6e81163a35de2f77ef3feb9ff4c36819 -/views/img/flag/GD.png|2f520ce09043643b7252eb0ce75a3d0c -/views/img/flag/PM.png|cc1fc719aa70170cf59aa97989f32fca -/views/img/flag/EH.png|64c0643f5f65257b22dd3bb070d3acf5 -/views/img/flag/NR.png|0d5e83ccb1ccd3a8f02fc61acaa6e47b -/views/img/flag/MU.png|026a9a35bf226c5466e85912d37c80ec -/views/img/flag/DM.png|863a58ff3765e2285d6b2f519620640e -/views/img/flag/PK.png|bb24b773e81e7daebc3ba3e263e67c20 -/views/img/flag/FJ.png|dabe04af951004527f0b1094cfd218d1 -/views/img/flag/CD.png|1a91773608e0dc37943f2e3b64e2fd74 -/views/img/flag/ET.png|a8ccdaec951da596214f55351e1ce618 +/views/img/flag/BH.png|4c735715f2b57bf14008bc277ba43c51 +/views/img/flag/CL.png|6e05e10bbad0945a6a0ac4f72de351bd +/views/img/flag/AD.png|ca92647387865e00fd0128eea3c0b3f0 +/views/img/flag/MP.png|6c26816f5aaeae7d369b60fce14da9db +/views/img/flag/LT.png|6a8428cf97967d9726f9a78277fec777 +/views/img/flag/MG.png|1d31e4ce165056179bbe39248a7170cc +/views/img/flag/LC.png|92badafa246492aed1cffb0bb913a21b /views/img/flag/TR.png|ae9e141ce534888b8b298f3a63d36e38 -/views/img/flag/KZ.png|1944b754503564c281ce18e5902229e9 -/views/img/flag/UY.png|bb2ddc17d73acbc625c0ec8ab5ff51c4 -/views/img/flag/GP.png|cc1fc719aa70170cf59aa97989f32fca -/views/img/flag/BG.png|aad68b8269f4c43558b53089c6e42d71 -/views/img/flag/UM.png|6c26816f5aaeae7d369b60fce14da9db -/views/img/flag/FR.png|cc1fc719aa70170cf59aa97989f32fca -/views/img/flag/LV.png|48efa49e2a85e9c077be41542ad17a1a -/views/img/flag/JP.png|e6f8733f45d9c7ac9dcf834aba625cbb -/views/img/flag/GU.png|49c3a9df1fe4d853a0a5fc76e3270b20 -/views/img/flag/DE.png|d8cd6c8e3fa88c3a5d71aade7691711d -/views/img/flag/ZZ.png|737e91fb2b9da9e69ab2495a49cce79d -/views/img/flag/SR.png|0a74189d8580fae462170f51fdfd5b9b -/views/img/flag/TN.png|fb43183a6891caf1600763cb51cde4a5 -/views/img/flag/GL.png|4c8c04806671345cacfabbd0781aaa64 -/views/img/flag/TK.png|3f70b39454fe3d56ea975185438edeb0 -/views/img/flag/TT.png|3dd6607f691fdc7244b08e30f9cb5266 -/views/img/flag/KI.png|da6b34f01691dfaaad7424078d741a6a -/views/img/flag/MF.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/UA.png|01969d09f7817a4ed6b9f152123fd5fa +/views/img/flag/TV.png|87b460b75260e3da93f06e56840a95b9 +/views/img/flag/VI.png|e69dce8e3db81cbc4e43f41b41eb5de7 +/views/img/flag/TA.png|ecfd4b85afd85b8bf8c531f8e6255cae +/views/img/flag/MT.png|a31f908619bd13739d39dfca7d3900a4 +/views/img/flag/NO.png|e3fa15f998178a590461f1fc6a0d2de8 +/views/img/flag/MC.png|85754149e4307e821f27c80389263d6e +/views/img/flag/CH.png|d3f7ffa92fc89d18ecf93a210dcbd046 +/views/img/flag/BL.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/AW.png|ec19a347739ea0e70970e2a604614837 +/views/img/flag/BZ.png|9481ccc9362b14353caa982b525793a8 /views/img/flag/BM.png|9dd3a4a2f7082b5ec1d62888cc091c49 -/views/img/flag/IT.png|42d6ced0776d3c3ea8295b704202ff44 +/views/img/flag/CI.png|06b9dd31f9661b9a162857eef2f33cc2 +/views/img/flag/MU.png|026a9a35bf226c5466e85912d37c80ec +/views/img/flag/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/img/flag/US.png|96becb321dbd9e9fab92cf6b3c9b5163 +/views/img/flag/TW.png|6ae84dc3a37d433ee650f0089a8e8f4f +/views/img/flag/YE.png|393dee2beda492bbdae758640b615561 +/views/img/flag/MW.png|eaadfcd54efd99816aa1e98cde55b48a +/views/img/flag/NL.png|f9da0a905e9fec2ff6a12d52b0bae61c +/views/img/flag/LS.png|424c47d3ce5111e4f646abcfafc652be /views/img/flag/BO.png|4e5e360f3cfec693bddd39707f79254a -/views/img/flag/MP.png|6c26816f5aaeae7d369b60fce14da9db -/views/img/flag/PH.png|38df9e3c0944ffe4d5b015be95793be5 -/views/img/flag/JE.png|3d4f6a61cc22ad5a77b4cbe36c26c9d7 +/views/img/flag/AT.png|d94ad12cbb42e07163dad620027b3a80 +/views/img/flag/CK.png|3859da524e0ff3fedf39784da126a647 +/views/img/flag/BY.png|30eb3989b884d4aed254eef073a21e9f +/views/img/flag/AU.png|ab3991ad7489bf384fb5446222bb48c6 +/views/img/flag/BN.png|54fbed23e5e0467e10530f00e5a53d8a +/views/img/flag/MA.png|b9214415961f794af1034dab0cace3b3 +/views/img/flag/NZ.png|c9eb80f47846f678803710fd86e4fb91 +/views/img/flag/LR.png|88412f2e2d5322bdd1d10f011fda38e3 /views/img/flag/MV.png|ba000bb35f554921cf272250f30c2e10 -/views/img/flag/AO.png|835be1589972b119e2a3aea772e21a18 -/views/img/flag/AX.png|6bfdcba08d5eac28c8b2f444d403fbd7 -/views/img/flag/TL.png|e782b6cfd00d15f709104755f400a578 -/views/img/flag/CV.png|0e39eebc150f3825588ebd015b958372 +/views/img/flag/TC.png|1988184525b5d9410d8bbc07fca834c0 +/views/img/flag/UG.png|2e03029719fda3470ee6263150a7466b +/views/img/flag/TT.png|3dd6607f691fdc7244b08e30f9cb5266 +/views/img/flag/PL.png|08b70dfd937f53fc448e084334df133d +/views/img/flag/RS.png|6e44d2f1b54aeb9f6a470796c05307b8 +/views/img/flag/IN.png|c1b8cf0460974ae1739a2f0ee72a0a36 +/views/img/flag/GE.png|6ece075c9a93ba4cabbd65f015fa91b3 +/views/img/flag/GR.png|1490aa27b7e0f14ac0757139cf3804fa +/views/img/flag/GS.png|fcfa6d9375d344cdad3cba278059f9dc +/views/img/flag/GD.png|2f520ce09043643b7252eb0ce75a3d0c /views/img/flag/IO.png|1c5a9a59d014fad88383a6d864458bc8 -/views/img/flag/SS.png|83ab553ec6ed1454b5523b9bb5f9e4f9 -/views/img/flag/PF.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/HK.png|9e22cff886b227b7c66a7299cee60c4a +/views/img/flag/KP.png|6b12eacf3bd315e433ba0b1eacf9d802 +/views/img/flag/KG.png|aa27c4a8269656e2b7e22ee2782869fd +/views/img/flag/PM.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/SV.png|7f337fe073caff1ecb41acae6a9d1e3d +/views/img/flag/RE.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/SA.png|fa0d37fefbcb03be08a96ff39c35e9fb /views/img/flag/SC.png|59f0b2fdc9c66ca24e723225fea73c3f +/views/img/flag/ST.png|c879c939fdce2c819a2f80f1680580d2 +/views/img/flag/KE.png|ba0a3ef22e0a59d8db268ae25d4fcb77 +/views/img/flag/IM.png|9a71aa37ec75db5858d66cf3a9a943f4 +/views/img/flag/KR.png|26ddd3e45a9a097d781fd1c9cfddc468 +/views/img/flag/GF.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/DJ.png|5ddb0d34fd83107a3d83e18880fa0305 +/views/img/flag/GQ.png|a3535b533b2af91719ba770f308ceb67 +/views/img/flag/OTHERS.png|ca92647387865e00fd0128eea3c0b3f0 +/views/img/flag/GP.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/DK.png|4c8c04806671345cacfabbd0781aaa64 +/views/img/flag/GG.png|d104842e7f86efd100c0ee29a0fa40ca +/views/img/flag/IL.png|ca066a0cb246da38676b6a4930b29971 +/views/img/flag/PN.png|dc374e50b3c4d72a5663d422d276776a +/views/img/flag/SB.png|bf3795be21421952a58ca2039aaaf5b5 +/views/img/flag/PY.png|47ba6b57d21f58b4e206251230b19ac8 +/views/img/flag/RU.png|784a2a8638e99ff3e7d229be90b4f420 +/views/img/flag/KW.png|04474a00fd44b8c39fcce5cb6f2b94f7 +/views/img/flag/DO.png|7ca29ece3c9d65228080ba12e0be8940 +/views/img/flag/GT.png|d4b7180e1da0f1f2baede267bec4d045 +/views/img/flag/GB.png|ecfd4b85afd85b8bf8c531f8e6255cae +/views/img/flag/GU.png|49c3a9df1fe4d853a0a5fc76e3270b20 +/views/img/flag/JE.png|3d4f6a61cc22ad5a77b4cbe36c26c9d7 +/views/img/flag/HM.png|ab3991ad7489bf384fb5446222bb48c6 /views/img/flag/JR.png|532ea8b20fa31e751d81f819d1e6774d -/views/img/flag/BB.png|a0a004f000c7ea6ab8d150959ac8d3fe -/views/img/flag/GH.png|748acbf0e69a5b10243d3ef200d9ea7f -/views/img/flag/NI.png|7f337fe073caff1ecb41acae6a9d1e3d -/views/img/flag/CX.png|3f3aba1069496a40934637cf4b4f766c -/views/img/flag/YE.png|393dee2beda492bbdae758640b615561 -/views/img/flag/CG.png|fd66daf57f1a96e802ba44b07ce712c8 -/views/img/flag/NA.png|17f102547f2ad6154227108af755dad2 +/views/img/flag/SG.png|f0f0bb2bf6639e472ef6ff90f9eaf0c7 +/views/img/flag/PK.png|bb24b773e81e7daebc3ba3e263e67c20 +/views/img/flag/SR.png|0a74189d8580fae462170f51fdfd5b9b /views/img/flag/SE.png|b8e45aecfb0ad66627b731f7d5fee095 -/views/img/flag/KW.png|04474a00fd44b8c39fcce5cb6f2b94f7 -/views/img/flag/BI.png|2bc04f56f098abfd22ec8dc9b4d25c6f -/views/img/flag/CZ.png|c29892cb415d8489c5e4024a867fe8b6 -/views/img/flag/AE.png|ea9875d8e8afafed9f07e63e7fae0b3d -/views/img/flag/AG.png|3e96767508f891bee4e18b0879197059 -/views/img/flag/PW.png|b5ae6117e7e8c6c506f4ec2bed045e33 -/views/img/flag/YT.png|cc1fc719aa70170cf59aa97989f32fca -/views/img/flag/JM.png|3d54284d8d3cb58632a152175cb42866 -/views/img/flag/DZ.png|96aecc1300df553a35b3758e3ecfba3e -/views/img/flag/AW.png|ec19a347739ea0e70970e2a604614837 -/views/img/flag/IM.png|9a71aa37ec75db5858d66cf3a9a943f4 -/views/img/flag/UG.png|2e03029719fda3470ee6263150a7466b -/views/img/flag/MK.png|a58f238f52c62e8eb54fa6d056c37d38 -/views/img/flag/LT.png|6a8428cf97967d9726f9a78277fec777 -/views/img/flag/WS.png|dbfe225a535339b992abd582c9e69037 -/views/img/flag/MZ.png|04cfeaaf203ceb1ffc56d95914956d3d -/views/img/flag/FO.png|0268b567af566647f953d8c3524c9ca7 -/views/img/flag/ZA.png|55dc8a9767f651d0c1f81dc47580f5d8 -/views/img/flag/FK.png|38cba6706a7246740309b9ca0fbc0b73 -/views/img/flag/TW.png|6ae84dc3a37d433ee650f0089a8e8f4f -/views/img/flag/SZ.png|cba65b0b5c6d94904dcba4f3150c5ca8 -/views/img/flag/UZ.png|9cd7f3e20f89d37e4a2854f30622d27a -/views/img/flag/NP.png|3885515ee4827a6d374e0bbcc3ddaaef -/views/img/flag/KP.png|6b12eacf3bd315e433ba0b1eacf9d802 -/views/img/flag/CY.png|eb2365a3603d60aff08f3c50cc87f249 -/views/img/flag/CK.png|3859da524e0ff3fedf39784da126a647 -/views/img/flag/MC.png|85754149e4307e821f27c80389263d6e -/views/img/flag/KE.png|ba0a3ef22e0a59d8db268ae25d4fcb77 -/views/img/flag/UA.png|01969d09f7817a4ed6b9f152123fd5fa +/views/img/flag/JP.png|e6f8733f45d9c7ac9dcf834aba625cbb /views/img/flag/GW.png|9103e6399b262a7ad40a5d06e0ea8ecd -/views/img/flag/GE.png|6ece075c9a93ba4cabbd65f015fa91b3 +/views/img/flag/EH.png|64c0643f5f65257b22dd3bb070d3acf5 +/views/img/flag/DZ.png|96aecc1300df553a35b3758e3ecfba3e +/views/img/flag/GA.png|334f0731d029c587625f0b7b98e6e17d +/views/img/flag/FR.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/DM.png|863a58ff3765e2285d6b2f519620640e +/views/img/flag/HN.png|e969c09f78ba886511b46ac692d9f204 +/views/img/flag/SD.png|fa421effd81aa5f626083d0b2474853b +/views/img/flag/RW.png|3c21dcfbee72c5a9229317ba9e3b9cdb +/views/img/flag/PH.png|38df9e3c0944ffe4d5b015be95793be5 +/views/img/flag/SS.png|83ab553ec6ed1454b5523b9bb5f9e4f9 +/views/img/flag/QA.png|f38b2d29e8a446e5764d5258c8afd6eb +/views/img/flag/PE.png|2213daa82fbd4344c53ed14272064ed3 +/views/img/flag/PR.png|587404b281120855ff304375851e3793 +/views/img/flag/SI.png|87f0819a7674137b062db99f7b888af7 +/views/img/flag/HT.png|3dd1a60ae95e7348b00fa8c1bffd0258 +/views/img/flag/ES.png|6db63d7e4bee7add3ead8eb95c9668e8 +/views/img/flag/GL.png|4c8c04806671345cacfabbd0781aaa64 +/views/img/flag/GM.png|d5273ab5a2bb48c0678db55894849363 +/views/img/flag/ER.png|098530d2dfadf464e46eeb7b67f88391 +/views/img/flag/FI.png|6bfdcba08d5eac28c8b2f444d403fbd7 /views/img/flag/EE.png|9d2fe6fa37282535b72b5b4428e02a1d -/views/img/flag/TZ.png|aeab49fe6ea2334ee06286245759f40a -/views/img/flag/AT.png|d94ad12cbb42e07163dad620027b3a80 -/views/img/flag/CI.png|06b9dd31f9661b9a162857eef2f33cc2 +/views/img/flag/KN.png|73c41ac33b42de3aa30fca903333f7fb +/views/img/flag/HU.png|aa1de41f497f81700e4bbf862e3454ee +/views/img/flag/IQ.png|e80063e93b8c7a79490dfcfae80b6aae +/views/img/flag/KY.png|ecfd4b85afd85b8bf8c531f8e6255cae +/views/img/flag/SH.png|ecfd4b85afd85b8bf8c531f8e6255cae +/views/img/flag/PS.png|f9f7ff5e3c9d12173aca821154719f7e +/views/img/flag/PF.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/SJ.png|e3fa15f998178a590461f1fc6a0d2de8 +/views/img/flag/ID.png|85754149e4307e821f27c80389263d6e +/views/img/flag/IS.png|e3afdbe32403f05ab6bed0acd8336604 +/views/img/flag/EG.png|22e30f3af14155502c2f4a4819bcf799 +/views/img/flag/FK.png|38cba6706a7246740309b9ca0fbc0b73 +/views/img/flag/FJ.png|dabe04af951004527f0b1094cfd218d1 +/views/img/flag/GN.png|37244e09a030931a398207bbed599818 +/views/img/flag/GY.png|ab7cebdcd0f057c92edb1d92d4c45ed1 +/views/img/flag/IR.png|304c0bf838a4fbc343b85f2a0c252d1b +/views/img/flag/KM.png|130b19dbbed58a2896335af73c1a7ff2 +/views/img/flag/IE.png|6882a56174318552db95a58dc4bc295c +/views/img/flag/KZ.png|1944b754503564c281ce18e5902229e9 +/views/img/flag/RO.png|0701088a3c572a894daa458455c957f1 /views/img/flag/SK.png|6bfe648618589d94ccad3c6e27aec692 -/views/img/flag/MM.png|96647eab72c5fe93e4be84e1c5f3d7a7 -/views/img/flag/AF.png|49d77e12111afc3d4194ade2664d286f -/views/img/flag/FI.png|6bfdcba08d5eac28c8b2f444d403fbd7 -/views/img/flag/MH.png|14bc97a69158b9c8b513b4b4adc6b861 -/views/img/flag/MD.png|2b7d7b14d52f8fe8d800c000f2ddd0a9 -/views/img/flag/BR.png|8f5c8e3aec893ab67e226a15db7cf0c0 -/views/img/flag/TF.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/PG.png|e13e005b63bc30978dc3e4232623e8d1 +/views/img/flag/PT.png|2e7c7be8522b84c10ac8c584c3932fab +/views/img/flag/SO.png|053a1a934a1e0e0e3c4b455c3a0bf1db +/views/img/flag/SX.png|f9da0a905e9fec2ff6a12d52b0bae61c /views/img/flag/HR.png|24cb403f2615ba725761dfbbcb843cfa -/views/img/flag/KG.png|aa27c4a8269656e2b7e22ee2782869fd -/views/img/flag/BY.png|30eb3989b884d4aed254eef073a21e9f -/views/img/flag/ML.png|a902428bbc6d2e20381b5f4a58ffc750 +/views/img/flag/KI.png|da6b34f01691dfaaad7424078d741a6a +/views/img/flag/JM.png|3d54284d8d3cb58632a152175cb42866 /views/img/flag/EC.png|061930954ddd6fb786cd4060f0876fce -/views/img/flag/QA.png|f38b2d29e8a446e5764d5258c8afd6eb -/views/img/flag/SX.png|f9da0a905e9fec2ff6a12d52b0bae61c -/views/img/flag/NZ.png|c9eb80f47846f678803710fd86e4fb91 -/views/img/flag/RO.png|0701088a3c572a894daa458455c957f1 -/views/img/flag/GT.png|d4b7180e1da0f1f2baede267bec4d045 -/views/img/flag/PS.png|f9f7ff5e3c9d12173aca821154719f7e -/views/img/flag/VU.png|cade21feef734a691c19396d4cacd4d4 -/views/img/flag/TJ.png|725785afd7652b97fc79b9f9a2219759 -/views/img/flag/TG.png|e2cf3a5f662ba166b85bf7a224d9ded9 -/views/img/flag/MG.png|1d31e4ce165056179bbe39248a7170cc -/views/img/flag/LB.png|a40045be63d6f413ff91c9b5867aa880 -/views/img/flag/OM.png|03760a212630cc7c0e5471df8281355e -/views/img/flag/SH.png|ecfd4b85afd85b8bf8c531f8e6255cae -/views/img/flag/US.png|96becb321dbd9e9fab92cf6b3c9b5163 -/views/img/flag/MA.png|b9214415961f794af1034dab0cace3b3 -/views/img/flag/NC.png|cc1fc719aa70170cf59aa97989f32fca -/views/img/flag/CH.png|d3f7ffa92fc89d18ecf93a210dcbd046 -/views/img/flag/GY.png|ab7cebdcd0f057c92edb1d92d4c45ed1 +/views/img/flag/ET.png|a8ccdaec951da596214f55351e1ce618 +/views/img/flag/FO.png|0268b567af566647f953d8c3524c9ca7 /views/img/flag/KH.png|0ffb252a38a5001bd776633c7d294063 -/views/img/flag/OTHERS.png|ca92647387865e00fd0128eea3c0b3f0 -/views/img/flag/NG.png|bd9daa305a8a954cffaff6649a464b5d -/views/img/flag/KY.png|ecfd4b85afd85b8bf8c531f8e6255cae +/views/img/flag/SY.png|5f25bd15bf8a63c5f55b36a63ad029b5 +/views/img/flag/SN.png|1a524290e23411b9f33e2e4426cb2d40 +/views/img/flag/PW.png|b5ae6117e7e8c6c506f4ec2bed045e33 +/views/img/flag/SL.png|262fe618a191d0d8a60bc364746d3c04 +/views/img/flag/FM.png|6ade62bece03f1d514fdbccdda641de1 +/views/img/flag/GI.png|ecfd4b85afd85b8bf8c531f8e6255cae +/views/img/flag/DE.png|d8cd6c8e3fa88c3a5d71aade7691711d +/views/img/flag/GH.png|748acbf0e69a5b10243d3ef200d9ea7f +/views/img/flag/IC.png|6db63d7e4bee7add3ead8eb95c9668e8 +/views/img/flag/JO.png|30a9129bf6502226ba7fd9da08e4b35c +/views/img/flag/IT.png|42d6ced0776d3c3ea8295b704202ff44 +/views/img/flag/PA.png|9407681f91e287935c4a7f987da34c63 +/views/img/flag/SZ.png|cba65b0b5c6d94904dcba4f3150c5ca8 +/views/img/flag/SM.png|ad4c6e282255da7434889bd83a069286 +/views/img/flag/TN.png|fb43183a6891caf1600763cb51cde4a5 +/views/img/flag/ML.png|a902428bbc6d2e20381b5f4a58ffc750 +/views/img/flag/CG.png|fd66daf57f1a96e802ba44b07ce712c8 +/views/img/flag/AX.png|6bfdcba08d5eac28c8b2f444d403fbd7 +/views/img/flag/AO.png|835be1589972b119e2a3aea772e21a18 +/views/img/flag/BT.png|3d1dd6d51b8706976d8e52985f572dd1 /views/img/flag/AN.png|a8c499377e0868f60a435229aa146fb1 -/views/img/flag/WF.png|cc1fc719aa70170cf59aa97989f32fca -/views/img/flag/TM.png|58f31979cd5840ed53c4c0244226ad88 -/views/img/flag/PG.png|e13e005b63bc30978dc3e4232623e8d1 -/views/img/flag/TO.png|59a189738b32f9e766c913ed9296de03 -/views/img/flag/GB.png|ecfd4b85afd85b8bf8c531f8e6255cae -/views/img/flag/PT.png|2e7c7be8522b84c10ac8c584c3932fab -/views/img/flag/LC.png|92badafa246492aed1cffb0bb913a21b -/views/img/flag/RE.png|cc1fc719aa70170cf59aa97989f32fca -/views/img/flag/LU.png|b30b097b3f764af26f3fc551e10b62fa +/views/img/flag/BB.png|a0a004f000c7ea6ab8d150959ac8d3fe +/views/img/flag/CF.png|5f181e4dc309c220174c64376759a89a +/views/img/flag/MM.png|96647eab72c5fe93e4be84e1c5f3d7a7 +/views/img/flag/LI.png|ba8539c6542d4d7e443a10f91bea414c +/views/img/flag/NA.png|17f102547f2ad6154227108af755dad2 +/views/img/flag/MZ.png|04cfeaaf203ceb1ffc56d95914956d3d +/views/img/flag/TO.png|59a189738b32f9e766c913ed9296de03 +/views/img/flag/VG.png|cd80422040f3569cdee8fe37c9ac233b +/views/img/flag/VE.png|60739b59a02254e88e103f154f434087 +/views/img/flag/TZ.png|aeab49fe6ea2334ee06286245759f40a +/views/img/flag/TM.png|58f31979cd5840ed53c4c0244226ad88 +/views/img/flag/MX.png|4585eaa23399ff97b0edddebc9548733 +/views/img/flag/NC.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/MO.png|9e22cff886b227b7c66a7299cee60c4a /views/img/flag/LK.png|4af94d1108d1dbd3daee42e5d7027e73 -/views/img/flag/SL.png|262fe618a191d0d8a60bc364746d3c04 -/views/img/flag/AI.png|59b67277582e2170cfe037c35ba4ed7a -/views/img/flag/ZM.png|90feb476b1cf845ec389074f32585c34 -/views/img/flag/NO.png|e3fa15f998178a590461f1fc6a0d2de8 -/views/img/flag/HU.png|aa1de41f497f81700e4bbf862e3454ee -/views/img/flag/PL.png|08b70dfd937f53fc448e084334df133d -/views/img/flag/FM.png|6ade62bece03f1d514fdbccdda641de1 -/views/img/flag/MT.png|a31f908619bd13739d39dfca7d3900a4 -/views/img/flag/GF.png|cc1fc719aa70170cf59aa97989f32fca -/views/img/flag/BJ.png|e0db6fe266bf66ddebe037bc574a930d -/views/img/flag/CN.png|9e22cff886b227b7c66a7299cee60c4a -/views/img/flag/DO.png|7ca29ece3c9d65228080ba12e0be8940 +/views/img/flag/CD.png|1a91773608e0dc37943f2e3b64e2fd74 +/views/img/flag/AL.png|5d34661c52bbda24fb4a49adf5ef82a0 /views/img/flag/BW.png|5fb1b531e34de1e246560f3a9defefe2 -/views/img/flag/BL.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/CR.png|fb27f4596f9ac16b951e0f017dbeaa2b +/views/img/flag/BV.png|2f9326738982ae4876fc7f0f0960c77e +/views/img/flag/AM.png|3461136703e8e2b5dffe869e3e086ce1 +/views/img/flag/AZ.png|eed74a4b4d1d9320554380ecd298c603 /views/img/flag/BA.png|0ca33f9b22f6317781e167a74843a19e -/views/img/flag/SA.png|fa0d37fefbcb03be08a96ff39c35e9fb -/views/img/flag/AQ.png|7b496e199605b532dba8319044097d7e +/views/img/flag/MN.png|6b459e34b09e6eb540ca41ff45f5d978 +/views/img/flag/NU.png|d89e7c94b030bb809a10231c0ee38e8e /views/img/flag/MY.png|1e8b313da9168f9b03b235d2952e142b -/views/img/flag/AD.png|ca92647387865e00fd0128eea3c0b3f0 -/views/img/flag/BQ.png|f9da0a905e9fec2ff6a12d52b0bae61c -/views/img/flag/GR.png|1490aa27b7e0f14ac0757139cf3804fa -/views/img/flag/BT.png|3d1dd6d51b8706976d8e52985f572dd1 -/views/img/flag/MS.png|ecfd4b85afd85b8bf8c531f8e6255cae -/views/img/flag/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/img/flag/TL.png|e782b6cfd00d15f709104755f400a578 +/views/img/flag/WS.png|dbfe225a535339b992abd582c9e69037 /views/img/flag/TH.png|04ae701cf5d13862c0badd8f931844b6 -/views/img/flag/BF.png|80b84a563590f903257bfe44f1332870 -/views/img/flag/AL.png|5d34661c52bbda24fb4a49adf5ef82a0 +/views/img/flag/XK.png|6d8d386104193e251f4c3077e5bf5d3b +/views/img/flag/NF.png|380b2fedcc87649ed83992a0e8fcfcc8 +/views/img/flag/LY.png|cc1fe9b7e51a1ffa91c5f79d26043a25 +/views/img/flag/AI.png|59b67277582e2170cfe037c35ba4ed7a +/views/img/flag/BR.png|8f5c8e3aec893ab67e226a15db7cf0c0 +/views/img/flag/CV.png|0e39eebc150f3825588ebd015b958372 +/views/img/flag/BE.png|a538d77b0d0e599095ca6db2ada1c2f3 +/views/img/flag/CA.png|959ca28fd07235ef971d3ea388c16397 /views/img/flag/BD.png|ea5f4a802e6b2969197551c64750b9a6 -/views/img/flag/MN.png|6b459e34b09e6eb540ca41ff45f5d978 -/views/img/flag/ZW.png|7d535d7ed7bb8fad8684610d869c4058 -/views/img/flag/IS.png|e3afdbe32403f05ab6bed0acd8336604 -/views/img/flag/ID.png|85754149e4307e821f27c80389263d6e -/views/img/flag/RS.png|6e44d2f1b54aeb9f6a470796c05307b8 -/views/img/flag/IN.png|c1b8cf0460974ae1739a2f0ee72a0a36 -/views/img/flag/RW.png|3c21dcfbee72c5a9229317ba9e3b9cdb -/views/img/flag/SO.png|053a1a934a1e0e0e3c4b455c3a0bf1db -/views/img/flag/IQ.png|e80063e93b8c7a79490dfcfae80b6aae -/views/img/flag/SM.png|ad4c6e282255da7434889bd83a069286 -/views/img/flag/LR.png|88412f2e2d5322bdd1d10f011fda38e3 -/views/img/flag/AZ.png|eed74a4b4d1d9320554380ecd298c603 /views/img/flag/BS.png|9bd57b913f78269f420d06006adc4881 -/views/img/flag/AM.png|3461136703e8e2b5dffe869e3e086ce1 -/views/img/flag/TA.png|ecfd4b85afd85b8bf8c531f8e6255cae +/views/img/flag/NG.png|bd9daa305a8a954cffaff6649a464b5d +/views/img/flag/MK.png|a58f238f52c62e8eb54fa6d056c37d38 +/views/img/flag/NP.png|3885515ee4827a6d374e0bbcc3ddaaef /views/img/flag/VA.png|14a0946355567991035d1c4a235b7890 -/views/img/flag/SG.png|f0f0bb2bf6639e472ef6ff90f9eaf0c7 -/views/img/flag/SB.png|bf3795be21421952a58ca2039aaaf5b5 +/views/img/flag/UZ.png|9cd7f3e20f89d37e4a2854f30622d27a +/views/img/flag/UM.png|6c26816f5aaeae7d369b60fce14da9db +/views/img/flag/TK.png|3f70b39454fe3d56ea975185438edeb0 +/views/img/flag/VC.png|04d50353949376995d0ca8827fd35241 +/views/img/flag/ZW.png|7d535d7ed7bb8fad8684610d869c4058 +/views/img/flag/NR.png|0d5e83ccb1ccd3a8f02fc61acaa6e47b /views/img/flag/NE.png|fc09575c0fabcb08e083e2b25f8e4343 -/views/img/flag/CA.png|959ca28fd07235ef971d3ea388c16397 -/views/img/flag/HM.png|ab3991ad7489bf384fb5446222bb48c6 -/views/img/flag/IC.png|6db63d7e4bee7add3ead8eb95c9668e8 -/views/img/flag/HN.png|e969c09f78ba886511b46ac692d9f204 -/views/img/flag/GS.png|fcfa6d9375d344cdad3cba278059f9dc -/views/img/flag/KR.png|26ddd3e45a9a097d781fd1c9cfddc468 -/views/img/flag/GG.png|d104842e7f86efd100c0ee29a0fa40ca -/views/img/flag/PN.png|dc374e50b3c4d72a5663d422d276776a -/views/img/flag/KN.png|73c41ac33b42de3aa30fca903333f7fb -/views/img/flag/SJ.png|e3fa15f998178a590461f1fc6a0d2de8 -/views/img/flag/GA.png|334f0731d029c587625f0b7b98e6e17d /views/img/flag/CU.png|4ba302408d9eddb58f79ef741668bf3b -/views/img/home-settings.png|4f7751e943137d3c10b71da358f7b1d7 +/views/img/flag/BQ.png|f9da0a905e9fec2ff6a12d52b0bae61c +/views/img/flag/BF.png|80b84a563590f903257bfe44f1332870 +/views/img/flag/BG.png|aad68b8269f4c43558b53089c6e42d71 +/views/img/flag/CC.png|7fecb4864f239d8d672d4dd0c780797c +/views/img/flag/MH.png|14bc97a69158b9c8b513b4b4adc6b861 +/views/img/flag/ZA.png|55dc8a9767f651d0c1f81dc47580f5d8 +/views/img/flag/UY.png|bb2ddc17d73acbc625c0ec8ab5ff51c4 +/views/img/flag/WF.png|cc1fc719aa70170cf59aa97989f32fca +/views/img/flag/VU.png|cade21feef734a691c19396d4cacd4d4 +/views/img/flag/TJ.png|725785afd7652b97fc79b9f9a2219759 /views/img/tick.png|93392d528788c75f2c61f48632e3a93e -/views/img/carret-up.png|3e14398dbf0566a04e32160d61fb0dd8 -/views/img/lengow-white-big.png|6e6178f2db21104a157aebb27f9a5ca2 -/views/img/laser-gun.png|5b09dfd39f2c17e6e818e79fdf8c03c0 -/views/img/home-products.png|99ff45448ea094f8c70b58a0cd4d9303 -/views/img/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/img/settings-product.svg|1a725d366cc55c55c54774274e1afc84 +/views/img/home-orders.png|db05b21ec6b166d844b42c0e807cb265 +/views/img/lengow-blue.png|fae0834ea05ab923912a47bbcb3af59b /views/img/connected-lengow.png|c80e8065bd5d1568efca50388622fd42 /views/img/box-close.png|73512c2351bfc39c6d10b95a3f2810c3 +/views/img/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/img/arrow-right.png|e56e5bb1dd1c9e23161dd7f0aa4293d2 +/views/img/plane.png|7d27896af3e0f3cf6e353cccef8f8267 +/views/img/home-settings.png|4f7751e943137d3c10b71da358f7b1d7 +/views/img/modal-close.png|32cadb3a7cfff33ff4d79b53b817f8e2 +/views/img/connected-prestashop.png|190c1dd936024ad8bb95d42491e7fe1e +/views/img/unplugged.png|55b5eeee08952d538185a659abbbb932 +/views/img/settings-product.png|7a30f16f9797e784d1c446b70791d32d /views/img/logo-blue.png|20c05b7249c00f126861223ecc5b6ce9 -/views/css/bootstrap-datepicker.css|d5260247b97663d887f4efe8ec894353 -/views/css/font-awesome.css|bf4b58c946c9234e4a6b9f7a70d38006 -/views/css/select2.css|8969ac4614d64a13dfc32e1eb4e731f7 -/views/css/lengow-pages.css|559ca86bb0be6b6d86fe21a443fbe704 -/views/css/lengow-layout.css|768416b1c8fbc2d02f013f2bbee9ee5f -/views/css/lengow-components.css|d8e1abd6cfd93e95c0c9cea6da0cc532 -/views/css/lengow-tab.css|5b6066640ae15dce94cd2225d84cec50 -/views/css/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/fonts/fontawesome-webfont.eot|32400f4e08932a94d8bfd2422702c446 -/views/fonts/fontawesome-webfont.woff|a35720c2fed2c7f043bc7e4ffb45e073 -/views/fonts/fontawesome-webfont.woff2|db812d8a70a4e88e888744c1c9a27e89 -/views/fonts/fontawesome-webfont.svg|f775f9cca88e21d45bebe185b27c0e5b -/views/fonts/fontawesome-webfont.ttf|a3de2170e4e9df77161ea5d3f31b2668 -/views/fonts/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/fonts/FontAwesome.otf|87d8ca3ddc57e7d2da6226e480f90457 -/views/PrestaShop/Admin/Sell/Order/Order/Blocks/View/shipping.html.twig|f8a6cd2da200718da882c869c94a5f19 +/views/img/search.png|7f9b41e3ae4871543c2962369b9de277 +/views/img/lengow-white.png|0324647d065652cd15282d7fac4ef8ff +/views/img/home-products.png|99ff45448ea094f8c70b58a0cd4d9303 +/views/img/clock.png|499ea8d7905f77624cb64b1af3f955b5 +/views/img/carret-up.png|3e14398dbf0566a04e32160d61fb0dd8 +/views/img/plug-grey.png|4231ef1a002a23decaa0e3e292a417fc +/views/img/connection-module.png|edb3364c8b46d07cbaa7192944f01475 +/views/img/laser-gun.png|5b09dfd39f2c17e6e818e79fdf8c03c0 +/views/img/lengow-white-big.png|6e6178f2db21104a157aebb27f9a5ca2 +/views/img/bag.png|d812d529e1b5404cf7b92d4f36ab7abd +/views/PrestaShop/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/PrestaShop/Admin/Sell/Order/Order/Blocks/index.php|be8b25f88c14bddd7711e4585ebae316 /views/PrestaShop/Admin/Sell/Order/Order/Blocks/View/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/PrestaShop/Admin/Sell/Order/Order/Blocks/View/Modal/update_shipping_modal.html.twig|74663ee30f4923a29ad683d779712f95 /views/PrestaShop/Admin/Sell/Order/Order/Blocks/View/Modal/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/PrestaShop/Admin/Sell/Order/Order/Blocks/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/PrestaShop/Admin/Sell/Order/Order/Blocks/View/Modal/update_shipping_modal.html.twig|74663ee30f4923a29ad683d779712f95 +/views/PrestaShop/Admin/Sell/Order/Order/Blocks/View/shipping.html.twig|f8a6cd2da200718da882c869c94a5f19 /views/PrestaShop/Admin/Sell/Order/Order/index.php|be8b25f88c14bddd7711e4585ebae316 /views/PrestaShop/Admin/Sell/Order/index.php|be8b25f88c14bddd7711e4585ebae316 /views/PrestaShop/Admin/Sell/index.php|be8b25f88c14bddd7711e4585ebae316 /views/PrestaShop/Admin/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/PrestaShop/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/order/info.tpl|aed8436e09c5b0b86589789fa189f4e6 +/views/templates/admin/order/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_toolbox/index.php|8c05a3431d3dcff6cdbfb4890fcafeb2 +/views/templates/admin/lengow_toolbox/layout.tpl|dce5c18c3f7ee6d8deb4b15ae67b9eed +/views/templates/admin/lengow_toolbox/helpers/index.php|8c05a3431d3dcff6cdbfb4890fcafeb2 +/views/templates/admin/lengow_toolbox/helpers/view/index.php|8c05a3431d3dcff6cdbfb4890fcafeb2 +/views/templates/admin/lengow_toolbox/helpers/view/view.tpl|d7f5ab6dca7d8abef5c987378bdc606a +/views/templates/admin/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_home/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_home/layout.tpl|d4e23ff27234d8621b4fc909e1aea5dd /views/templates/admin/lengow_home/helpers/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_home/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_home/helpers/view/connection_home.tpl|719d3053ad5fe0212ca04b836fe3ed15 +/views/templates/admin/lengow_home/helpers/view/connection_catalog_failed.tpl|8dc9149312cf84a7f579508b69c7ae82 +/views/templates/admin/lengow_home/helpers/view/view.tpl|8e0c9ac0a8269c60c6ae2f64203f5d32 /views/templates/admin/lengow_home/helpers/view/connection_cms.tpl|b9017bfcbb77996f2e307056ec476d91 /views/templates/admin/lengow_home/helpers/view/connection_catalog.tpl|761994719aed4e1b7a115429b09d8fd4 /views/templates/admin/lengow_home/helpers/view/connection_cms_result.tpl|a7bdfe86ab8654b2c0ece23fe5eee4e9 -/views/templates/admin/lengow_home/helpers/view/view.tpl|8e0c9ac0a8269c60c6ae2f64203f5d32 -/views/templates/admin/lengow_home/helpers/view/connection_catalog_failed.tpl|8dc9149312cf84a7f579508b69c7ae82 -/views/templates/admin/lengow_home/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_home/helpers/view/connection_home.tpl|719d3053ad5fe0212ca04b836fe3ed15 -/views/templates/admin/lengow_home/layout.tpl|d4e23ff27234d8621b4fc909e1aea5dd -/views/templates/admin/lengow_home/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/header_order.tpl|452332339e744007db76a1c4e8ae5805 +/views/templates/admin/footer.tpl|639dccd9927e638989452a65ebc766cd +/views/templates/admin/lengow_feed/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_feed/layout.tpl|8296463aac5333e3d045024628ee14d7 /views/templates/admin/lengow_feed/helpers/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_feed/helpers/view/view.tpl|0d4877cdcea508fc2ecde8fdd77e4551 /views/templates/admin/lengow_feed/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_feed/layout.tpl|8296463aac5333e3d045024628ee14d7 -/views/templates/admin/lengow_feed/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_feed/helpers/view/view.tpl|215a67502c8ad5a0f842e8832784e2c6 +/views/templates/admin/lengow_feed/helpers/view/edit_fields_feed.tpl|3b7dc9fba449e61aa038972295a8cd9f +/views/templates/admin/lengow_legals/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_legals/layout.tpl|8296463aac5333e3d045024628ee14d7 +/views/templates/admin/lengow_legals/helpers/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_legals/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_legals/helpers/view/view.tpl|f16dd97c1a6a5c475170492a0a851dc0 +/views/templates/admin/lengow_main_setting/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_main_setting/layout.tpl|8296463aac5333e3d045024628ee14d7 +/views/templates/admin/lengow_main_setting/helpers/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_main_setting/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_main_setting/helpers/view/view.tpl|6c982c3f0c4cad049ecc94594bd49642 +/views/templates/admin/lengow_order/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_order/layout.tpl|901527885b6fdd8c04949bfe750e438d +/views/templates/admin/lengow_order/helpers/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_order/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_order/helpers/view/view.tpl|c4dd33661b6ab2bfcaf4976f7c3c2732 +/views/templates/admin/lengow_order/helpers/view/last_importation.tpl|a8e4e40f74074b6f1a1a2318fab63f73 +/views/templates/admin/lengow_order/helpers/view/warning_message.tpl|821acd8febe35f9381d9462ed36e3fca +/views/templates/admin/lengow_order/helpers/view/no_order.tpl|806dda4cd3f405507f7e89046e222120 +/views/templates/admin/header.tpl|e1df0c2da09c6f7b0b95851d260da714 +/views/templates/admin/lengow_help/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_help/layout.tpl|8296463aac5333e3d045024628ee14d7 +/views/templates/admin/lengow_help/helpers/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_help/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_help/helpers/view/view.tpl|922255f0c88cf95737dc8f46434bd806 +/views/templates/admin/lengow_dashboard/index.php|eba0357470b4f2caf856c15f9ee875a0 +/views/templates/admin/lengow_dashboard/layout.tpl|89267905b72cffc708bb36c1c9bb1ca1 /views/templates/admin/lengow_dashboard/helpers/index.php|eba0357470b4f2caf856c15f9ee875a0 -/views/templates/admin/lengow_dashboard/helpers/view/status.tpl|1e6678a36f90f268f7d8fec583b22154 -/views/templates/admin/lengow_dashboard/helpers/view/view.tpl|01c5146729441a7adf8a7dc65fd03ff4 /views/templates/admin/lengow_dashboard/helpers/view/index.php|eba0357470b4f2caf856c15f9ee875a0 /views/templates/admin/lengow_dashboard/helpers/view/dashboard.tpl|63237d59aacd6849801b6cdbe1decf4f -/views/templates/admin/lengow_dashboard/layout.tpl|89267905b72cffc708bb36c1c9bb1ca1 -/views/templates/admin/lengow_dashboard/index.php|eba0357470b4f2caf856c15f9ee875a0 -/views/templates/admin/lengow_toolbox/helpers/index.php|8c05a3431d3dcff6cdbfb4890fcafeb2 -/views/templates/admin/lengow_toolbox/helpers/view/view.tpl|d7f5ab6dca7d8abef5c987378bdc606a -/views/templates/admin/lengow_toolbox/helpers/view/index.php|8c05a3431d3dcff6cdbfb4890fcafeb2 -/views/templates/admin/lengow_toolbox/layout.tpl|dce5c18c3f7ee6d8deb4b15ae67b9eed -/views/templates/admin/lengow_toolbox/index.php|8c05a3431d3dcff6cdbfb4890fcafeb2 -/views/templates/admin/footer.tpl|639dccd9927e638989452a65ebc766cd +/views/templates/admin/lengow_dashboard/helpers/view/view.tpl|01c5146729441a7adf8a7dc65fd03ff4 +/views/templates/admin/lengow_dashboard/helpers/view/status.tpl|1e6678a36f90f268f7d8fec583b22154 +/views/templates/admin/lengow_order_setting/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/admin/lengow_order_setting/layout.tpl|901527885b6fdd8c04949bfe750e438d /views/templates/admin/lengow_order_setting/helpers/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_order_setting/helpers/view/country_selector.tpl|a267b04ca30c63272a0518df44d2d132 +/views/templates/admin/lengow_order_setting/helpers/view/marketplace_method.tpl|ebc5d69c98f9f796a83c1ae6a32420b0 +/views/templates/admin/lengow_order_setting/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 /views/templates/admin/lengow_order_setting/helpers/view/default_carrier.tpl|59082017288f80c73b1fde08de8fd088 -/views/templates/admin/lengow_order_setting/helpers/view/marketplace_matching.tpl|795fa9a03687067686437818681c1131 /views/templates/admin/lengow_order_setting/helpers/view/view.tpl|07ce03342ced4f4b9d8a505b790d891e +/views/templates/admin/lengow_order_setting/helpers/view/country_selector.tpl|a267b04ca30c63272a0518df44d2d132 /views/templates/admin/lengow_order_setting/helpers/view/marketplace_carrier.tpl|52c4ee9821380783e3816deb28f8f22f -/views/templates/admin/lengow_order_setting/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_order_setting/helpers/view/marketplace_method.tpl|ebc5d69c98f9f796a83c1ae6a32420b0 -/views/templates/admin/lengow_order_setting/layout.tpl|901527885b6fdd8c04949bfe750e438d -/views/templates/admin/lengow_order_setting/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_order/helpers/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_order/helpers/view/last_importation.tpl|a8e4e40f74074b6f1a1a2318fab63f73 -/views/templates/admin/lengow_order/helpers/view/warning_message.tpl|821acd8febe35f9381d9462ed36e3fca -/views/templates/admin/lengow_order/helpers/view/view.tpl|c4dd33661b6ab2bfcaf4976f7c3c2732 -/views/templates/admin/lengow_order/helpers/view/no_order.tpl|806dda4cd3f405507f7e89046e222120 -/views/templates/admin/lengow_order/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_order/layout.tpl|901527885b6fdd8c04949bfe750e438d -/views/templates/admin/lengow_order/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_main_setting/helpers/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_main_setting/helpers/view/view.tpl|6c982c3f0c4cad049ecc94594bd49642 -/views/templates/admin/lengow_main_setting/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_main_setting/layout.tpl|8296463aac5333e3d045024628ee14d7 -/views/templates/admin/lengow_main_setting/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/order/info.tpl|aed8436e09c5b0b86589789fa189f4e6 -/views/templates/admin/order/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/header.tpl|3711f5805799295ae700262bfc7ea0c5 -/views/templates/admin/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/header_order.tpl|452332339e744007db76a1c4e8ae5805 -/views/templates/admin/lengow_help/helpers/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_help/helpers/view/view.tpl|922255f0c88cf95737dc8f46434bd806 -/views/templates/admin/lengow_help/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_help/layout.tpl|8296463aac5333e3d045024628ee14d7 -/views/templates/admin/lengow_help/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_legals/helpers/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_legals/helpers/view/view.tpl|f16dd97c1a6a5c475170492a0a851dc0 -/views/templates/admin/lengow_legals/helpers/view/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/admin/lengow_legals/layout.tpl|8296463aac5333e3d045024628ee14d7 -/views/templates/admin/lengow_legals/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/templates/front/tagpage.tpl|f040d02eb2f79ed7d50e72f7f707db0e +/views/templates/admin/lengow_order_setting/helpers/view/marketplace_matching.tpl|795fa9a03687067686437818681c1131 /views/templates/front/index.php|be8b25f88c14bddd7711e4585ebae316 -/views/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/templates/front/tagpage.tpl|f040d02eb2f79ed7d50e72f7f707db0e +/views/fonts/fontawesome-webfont.svg|f775f9cca88e21d45bebe185b27c0e5b +/views/fonts/FontAwesome.otf|87d8ca3ddc57e7d2da6226e480f90457 +/views/fonts/index.php|be8b25f88c14bddd7711e4585ebae316 +/views/fonts/fontawesome-webfont.woff2|db812d8a70a4e88e888744c1c9a27e89 +/views/fonts/fontawesome-webfont.ttf|a3de2170e4e9df77161ea5d3f31b2668 +/views/fonts/fontawesome-webfont.woff|a35720c2fed2c7f043bc7e4ffb45e073 +/views/fonts/fontawesome-webfont.eot|32400f4e08932a94d8bfd2422702c446 +/webservice/index.php|be8b25f88c14bddd7711e4585ebae316 /webservice/export.php|93ae5e6f44bdb7e32564f6c9d771e184 /webservice/toolbox.php|460e115e59104dd9517039215f0376c5 -/webservice/cron.php|d0a49d51493637c7f9445d4412b4792a -/webservice/index.php|be8b25f88c14bddd7711e4585ebae316 +/webservice/cron.php|b761754b8b345fd28c4b83bc2c033664 diff --git a/lengow.php b/lengow.php index 4c79ee66..dae50a4f 100755 --- a/lengow.php +++ b/lengow.php @@ -45,7 +45,7 @@ public function __construct() { $this->name = 'lengow'; $this->tab = 'export'; - $this->version = '3.5.3'; + $this->version = '3.5.4'; $this->author = 'Lengow'; $this->module_key = '__LENGOW_PRESTASHOP_PRODUCT_KEY__'; $this->ps_versions_compliancy = [ @@ -140,6 +140,14 @@ public function hookHome() $this->hookClass->hookHome(); } + /** + * Hook on Home page + */ + public function hookDisplayHome() + { + $this->hookClass->hookHome(); + } + /** * Hook on Payment page */ @@ -148,6 +156,14 @@ public function hookPaymentTop() $this->hookClass->hookPaymentTop(); } + /** + * Hook on Payment page + */ + public function hookDisplayPaymentTop() + { + $this->hookClass->hookPaymentTop(); + } + /** * Hook for generate tracker on front footer page * @@ -158,6 +174,16 @@ public function hookFooter() return $this->hookClass->hookFooter(); } + /** + * Hook for generate tracker on front footer page + * + * @return mixed + */ + public function hookDisplayFooter() + { + return $this->hookClass->hookFooter(); + } + /** * Hook on order confirmation page to init order's product list * @@ -168,6 +194,16 @@ public function hookOrderConfirmation($args) $this->hookClass->hookOrderConfirmation($args); } + /** + * Hook on order confirmation page to init order's product list + * + * @param array $args Arguments of hook + */ + public function hookDisplayOrderConfirmation($args) + { + $this->hookClass->hookOrderConfirmation($args); + } + /** * Hook before an status update to synchronize status with lengow * @@ -178,6 +214,25 @@ public function hookUpdateOrderStatus($args) $this->hookClass->hookUpdateOrderStatus($args); } + /** + * Order status update + * Event This hook launches modules when the status of an order changes + */ + public function hookActionOrderStatusUpdate($args) + { + $this->hookClass->hookUpdateOrderStatus($args); + } + + /** + * Order status post update + * @param array $args Arguments of hook + */ + public function hookActionOrderStatusPostUpdate($args) + { + $this->hookClass->hookPostUpdateOrderStatus($args); + } + + /** * Hook after an status update to synchronize status with lengow * diff --git a/tools/build.sh b/tools/build.sh index 6327e407..f001fc2a 100755 --- a/tools/build.sh +++ b/tools/build.sh @@ -10,23 +10,6 @@ # - Remove tools folder # - Remove .git Folder and .gitignore -unameOut="$(uname -s)" -case "${unameOut}" in - Linux*) CURRENT_OS=Linux;; - Darwin*) CURRENT_OS=MacOS;; - CYGWIN*) CURRENT_OS=Cygwin;; - MINGW*) CURRENT_OS=MinGw;; - MSYS_NT*) CURRENT_OS=Git;; - *) CURRENT_OS="UNKNOWN:${unameOut}" -esac -echo "RUNNING ON: ${CURRENT_OS} ..." -sleep 3 -source decrypt.sh -if [ ! -f "./vars.sh" ]; then - echo 'Variables file not found. can not build module archive.' - exit 0 -fi - remove_if_exist(){ if [ -f "$1" ]; then rm "$1" @@ -38,11 +21,12 @@ remove_directory(){ rm -rf "$1" fi } + remove_files(){ DIRECTORY="$1" FILE="$2" if [ -f "${DIRECTORY}/${FILE}" ]; then - find "$DIRECTORY" -name "$FILE" -exec rm -rf {} \; + find "$DIRECTORY" -name "$FILE" -nowarn -exec rm -rf {} \; echo -e "- Delete ${FILE} : ${VERT}DONE${NORMAL}" fi if [ -d "${DIRECTORY}/${FILE}" ]; then @@ -76,52 +60,47 @@ fi if [ ! -z "$2" ] && [ "$2" == "preprod" ]; then ARCHIVE_NAME="preprod__${ARCHIVE_NAME}" fi -echo "ARCHIVE_NAME will be: ${ARCHIVE_NAME}" -# load vars -source vars.sh -# encrypt vars file -source encrypt.sh +# Variables +FOLDER_TMP="/tmp/lengow" +FOLDER_LOGS="/tmp/lengow/logs" +FOLDER_CONFIG="/tmp/lengow/config" +FOLDER_EXPORT="/tmp/lengow/export" +FOLDER_TOOLS="/tmp/lengow/tools" +FOLDER_TRANSLATION="/tmp/lengow/translations/yml" + +VERT="\e[32m" +ROUGE="\e[31m" +NORMAL="\e[39m" +BLEU="\e[36m" +DEPLOY_ENV="$2" # process echo echo "#####################################################" echo "## ##" -echo -e "## "${BLEU}Lengow Prestashop${NORMAL}" - Build Module ##" +echo -e "## ${BLEU}Lengow Magento${NORMAL} - Build Module ##" echo "## ##" echo "#####################################################" echo PWD=$(pwd) FOLDER=$(dirname "${PWD}") echo "${FOLDER}" -sleep 3 - # Change config for preprod if [ ! -z "${DEPLOY_ENV}" ] && [ "${DEPLOY_ENV}" == "preprod" ]; then - if [ "$CURRENT_OS" == "MacOS" ]; then - sed -i '' 's/lengow.io/lengow.net/g' "${FOLDER}/classes/models/LengowConnector.php" - sed -i '' 's/lengow.local/lengow.net/g' "${FOLDER}/classes/models/LengowConnector.php" - else - sed -i 's/lengow.io/lengow.net/g' "${FOLDER}/classes/models/LengowConnector.php" - sed -i 's/lengow.local/lengow.net/g' "${FOLDER}/classes/models/LengowConnector.php" - fi + sed -i '' 's/lengow.io/lengow.net/g' "${FOLDER}/classes/models/LengowConnector.php" fi - if [ ! -z "${DEPLOY_ENV}" ] && [ "${DEPLOY_ENV}" == "prod" ]; then - if [ "$CURRENT_OS" == "MacOS" ]; then - sed -i '' 's/lengow.net/lengow.io/g' "${FOLDER}/classes/models/LengowConnector.php" - sed -i '' 's/lengow.local/lengow.io/g' "${FOLDER}/classes/models/LengowConnector.php" - else - sed -i 's/lengow.net/lengow.io/g' "${FOLDER}/classes/models/LengowConnector.php" - sed -i 's/lengow.local/lengow.io/g' "${FOLDER}/classes/models/LengowConnector.php" - fi + sed -i '' 's/lengow.net/lengow.io/g' "${FOLDER}/classes/models/LengowConnector.php" fi - # remove TMP FOLDER if [ -d "${FOLDER_TMP}" ]; then rm -Rf "${FOLDER_TMP}" fi -mkdir "${FOLDER_TMP}" +# create folder +if [ ! -d "${FOLDER_TMP}" ]; then + mkdir "${FOLDER_TMP}" +fi if [ ! -d "$FOLDER" ]; then echo -e "Folder doesn't exist : ${ROUGE}ERROR${NORMAL}" @@ -129,15 +108,9 @@ if [ ! -d "$FOLDER" ]; then exit 0 fi -if [ "$CURRENT_OS" == "MacOS" ]; then - PHP=$(realpath "$(which php)") -else - PHP=$(which php8.1) -fi +PHP=$(realpath "$(which php)") +echo "${PHP}" -echo "php binary is ${PHP}" - -sleep 3 # generate translations "${PHP}" translate.php echo -e "- Generate translations : ${VERT}DONE${NORMAL}" @@ -146,7 +119,7 @@ echo -e "- Generate translations : ${VERT}DONE${NORMAL}" echo -e "- Create files checksum : ${VERT}DONE${NORMAL}" # remove TMP FOLDER remove_directory "$FOLDER_TMP" -# copy files +# copy files (excluding .DS_Store) rsync -a --exclude='.DS_Store' "$FOLDER/" "$FOLDER_TMP/" # remove dod remove_files "$FOLDER_TMP" "dod.md" @@ -156,17 +129,12 @@ remove_files "$FOLDER_TMP" "README.md" remove_files "$FOLDER_TMP" ".gitignore" # remove php-cs-fixer-cache remove_files "$FOLDER_TMP" ".php-cs-fixer.cache" -remove_files "$FOLDER_TMP" ".php-cs-fixer.dist.php" -remove_files "$FOLDER_TMP" ".php_cs.cache" # remove .git remove_files "$FOLDER_TMP" ".git" # remove .DS_Store remove_files "$FOLDER_TMP" ".DS_Store" -# remove composer.json -remove_files "$FOLDER_TMP" "composer.json" # remove .AdminLengowHome.gif remove_files "$FOLDER_TMP" "AdminLengowHome.gif" -sleep 3 # remove .idea remove_files "$FOLDER_TMP" ".idea" # remove Jenkinsfile @@ -197,28 +165,16 @@ echo -e "- Delete config_es.xml : ${VERT}DONE${NORMAL}" # remove config_it.xml find "$FOLDER_TMP" -name "config_it.xml" -delete echo -e "- Delete config_it.xml : ${VERT}DONE${NORMAL}" -sleep 3 # remove todo.txt find "$FOLDER_TMP" -name "todo.txt" -delete echo -e "- todo.txt : ${VERT}DONE${NORMAL}" -# add module key -if [ ! -z "${DEPLOY_ENV}" ] && [ "${DEPLOY_ENV}" == "prod" ]; then - if [ "$CURRENT_OS" == "MacOS" ]; then - sed -i '' "s/__LENGOW_PRESTASHOP_PRODUCT_KEY__/${MODULE_KEY}/g" "${FOLDER_TMP}/lengow.php" - else - sed -i "s/__LENGOW_PRESTASHOP_PRODUCT_KEY__/${MODULE_KEY}/g" ${FOLDER_TMP}/lengow.php - fi - echo -e "- Add module key : ${VERT}DONE${NORMAL}" -fi - # make zip cd /tmp -zip "-r" "$ARCHIVE_NAME" "lengow" +zip -r "$ARCHIVE_NAME" "lengow" echo -e "- Build archive : ${VERT}DONE${NORMAL}" if [ -d "~/Bureau" ]; then mv "$ARCHIVE_NAME" ~/Bureau else mv "$ARCHIVE_NAME" ~/shared fi -sleep 3 -echo "End of build." \ No newline at end of file + diff --git a/tools/vars.enc b/tools/vars.enc index 24518bc4..b08f0c6e 100644 Binary files a/tools/vars.enc and b/tools/vars.enc differ diff --git a/translations/en.csv b/translations/en.csv index d250b068..e858d3f3 100755 --- a/translations/en.csv +++ b/translations/en.csv @@ -113,6 +113,12 @@ product.screen.date_from|From product.screen.date_to|To product.screen.button_copy|Copy product.screen.button_download|Download +product.screen.button_filter|Filter +product.screen.button_fields_setting|Modify field names +product.screen.button_fields_reset|Reset all fields +product.screen.title_fields_settings|Modify the default field of the exported catalogue +product.screen.title_column_name_fields|Name of the Lengow field +product.screen.title_column_prestashop_value|PrestaShop value product.screen.button_yes|Yes product.screen.button_no|No product.screen.button_search|Search @@ -243,7 +249,7 @@ help.screen.contain_text_support|Ask us anything about Lengow or share feedback help.screen.title_lengow_support|Lengow Support. help.screen.need_some_help|Need some help? help.screen.contain_text_support_hour|We’ll do our best to get back to you during regular business hours (Monday to Friday – 9am to 6pm GMT+1). -help.screen.find_answer|You can also find answers in our +help.screen.find_answer|You can also find answers in our help.screen.link_prestashop_guide|PrestaShop dedicated guide legals.screen.simplified_company|Simplified limited liability company legals.screen.social_capital|Social capital: @@ -381,6 +387,8 @@ lengow_setting.lengow_tracking_id_legend|The name of the unique identifier enter lengow_setting.lengow_currency_conversion_title|Convert the currency of your order lengow_setting.lengow_currency_conversion_legend|All orders imported into PrestaShop will be automatically converted into the currency you've selected in Lengow lengow_setting.lengow_currency_conversion_switch|Activate conversion +lengow_setting.lengow_disable_send_email_title|Disable sending emails +lengow_setting.lengow_disable_send_email_legend|Activate this option if you do not want to send emails to customers when order's statuses change lengow_log.error.nb_order_imported|%{nb_order} order(s) imported lengow_log.error.nb_order_updated|%{nb_order} order(s) updated lengow_log.error.nb_order_with_error|%{nb_order} order(s) with errors diff --git a/translations/es.csv b/translations/es.csv index b18c5340..a1512151 100755 --- a/translations/es.csv +++ b/translations/es.csv @@ -69,7 +69,7 @@ connection.cms.failed_description_second_credentials_prod|Por favor, verifique q connection.cms.failed_description_second_credentials_preprod|Por favor, verifique que estas credenciales coincidan con el entorno de pre-producción de Lengow. connection.cms.failed_help|Si el problema persiste, puede consultar la connection.cms.failed_help_center|"Guía de PrestaShop" -connection.cms.failed_help_or|o contactar con nuestro +connection.cms.failed_help_or|o contactar con nuestro connection.cms.failed_help_customer_success_team|"Equipo de éxito del cliente" connection.cms.failed_button|Volver a intentar connection.catalog.link_title|Vincule sus tiendas con Lengow @@ -113,6 +113,12 @@ product.screen.date_from|Desde product.screen.date_to|Hasta product.screen.button_copy|Copiar product.screen.button_download|Descargar +product.screen.button_filter|Filtro +product.screen.button_fields_setting|Modificación de los nombres de los campos +product.screen.button_fields_reset|Restablecer todos los campos +product.screen.title_fields_settings|Modificar los campo por defecto del catálogo exportado +product.screen.title_column_name_fields|Nombre del campo de Lengow +product.screen.title_column_prestashop_value|Valor de PrestaShop product.screen.button_yes|Si product.screen.button_no|No product.screen.button_search|Buscar @@ -133,7 +139,7 @@ product.table.lengow_status|Incluir en el export ? product.table.pagination_of|de order.screen.import_charge_first|Recuperando tus pedidos... order.screen.import_charge_second|Por favor, ten paciencia con nosotros; esto no te llevará mucho tiempo (2 minutos de espera más o menos ) -order.screen.all_order_will_be_sent_to|Todos los informes de envios de pedidos serán enviados por email +order.screen.all_order_will_be_sent_to|Todos los informes de envios de pedidos serán enviados por email order.screen.change_this|¿Cambiar esto? order.screen.last_order_importation|Última sincronización order.screen.no_order_importation|No hay sincronización por ahora @@ -381,6 +387,8 @@ lengow_setting.lengow_tracking_id_legend|El nombre del identificador único indi lengow_setting.lengow_currency_conversion_title|Convierte la divisa de tu pedido lengow_setting.lengow_currency_conversion_legend|Todos los pedidos importados a Magento serán transformados automáticamente con la moneda que seleccionaste en Lengow lengow_setting.lengow_currency_conversion_switch|Activa la conversion +lengow_setting.lengow_disable_send_email_title|Deshabilitar el envío de email +lengow_setting.lengow_disable_send_email_legend|Deshabilitar el envío de email al cambiar el estado del pedido lengow_log.error.nb_order_imported|%{nb_order} pedido(s) importada lengow_log.error.nb_order_updated|%{nb_order} pedido(s) actualizado lengow_log.error.nb_order_with_error|%{nb_order} pedido(s) con errores @@ -407,11 +415,11 @@ lengow_log.exception.order_list_is_empty|el pedido no ha podido ser registrado lengow_log.exception.carrier_shipping_address_no_country|la dirección de envío no contiene el país lengow_log.exception.no_default_carrier_for_country|Debe seleccionar un proveedor predeterminado para el país: %{country_name} y marketplace: %{marketplace_name} lengow_log.exception.marketplace_not_present|Lengow error: %{marketplace_name} no figura en la lista del mercado -lengow_log.exception.order_line_required|la línea de pedido es requerida pero no se encuentra +lengow_log.exception.order_line_required|la línea de pedido es requerida pero no se encuentra lengow_log.exception.action_not_valid|la acción %{action} no es válida lengow_log.exception.marketplace_action_not_present|acción marketplace %{action} no está presente lengow_log.exception.marketplace_sku_require|se requiere la referencia del pedido marketplace -lengow_log.exception.marketplace_name_require|es necesario el nombre del marketplace +lengow_log.exception.marketplace_name_require|es necesario el nombre del marketplace lengow_log.exception.no_delivery_country_in_order|no puede encontrar el país de entrega en el pedido lengow_log.exception.match_carrier_with_country|necesitas relacionar el transportista %{carrier_name} con el país %{country_name} lengow_log.exception.arg_is_required|envío de acción imposible: %{arg_name} es requerido @@ -419,7 +427,7 @@ lengow_log.exception.action_not_created|creación de la acción imposible: %{err lengow_log.exception.action_not_created_api|la acción no puede crearse porque la API Lengow se encuentra indisponible. Inténtelo de nuevo lengow_log.exception.action_is_too_old|order action is too old. Please retry the call lengow_log.exception.cannot_load_order_status|no se puede cargar el estado del pedido -lengow_log.exception.order_creation_failed|la creación del pedido PrestaShop ha fallado +lengow_log.exception.order_creation_failed|la creación del pedido PrestaShop ha fallado lengow_log.exception.payment_module_not_active|el módulo de "pagos" no está activo lengow_log.exception.cart_cannot_be_loaded|la compra no se puede cargar, o bien un pedido ya ha sido colocado usando esta misma compra lengow_log.exception.delivery_country_not_active|el país %{country_name} en la dirección de entrega no está activo diff --git a/translations/fr.csv b/translations/fr.csv index 4f58015c..dfa90d2f 100755 --- a/translations/fr.csv +++ b/translations/fr.csv @@ -100,7 +100,7 @@ status.screen.third_description_end_free_trial|Votre compte d'essai sera supprim status.screen.upgrade_account_button|Je suis prêt à souscrire ! status.screen.refresh_action|Actualiser mon compte product.screen.filter_exported|filtrer les produits exportés -product.screen.nb_exported|produits exportés +product.screen.nb_exported|produits exportés product.screen.nb_available|produits disponibles product.screen.include_variation_product|Inclure les variations de produits product.screen.include_out_of_stock_product|Inclure les produits hors stock @@ -113,6 +113,12 @@ product.screen.date_from|Du product.screen.date_to|Au product.screen.button_copy|Copier product.screen.button_download|Télécharger +product.screen.button_filter|Filtre +product.screen.button_fields_setting|Modifier les noms de champs +product.screen.button_fields_reset|Réinitialiser tous les champs +product.screen.title_fields_settings|Modifier les champs par default du catalogue exporté +product.screen.title_column_name_fields|Nom du Champ Lengow +product.screen.title_column_prestashop_value|Valeur PrestaShop product.screen.button_yes|Oui product.screen.button_no|Non product.screen.button_search|Rechercher @@ -152,7 +158,7 @@ order.screen.action_sent|Action %{action_type} envoyée order.screen.action_waiting_return|Action envoyée, en attente d'une réponse. order.screen.action_sent_not_work|Erreur sur l'action envoyée à la marketplace. order.screen.no_error_message|Erreur non identifiée, merci de contacter le support Lengow pour plus d'informations -order.screen.no_order_title|Le meilleur est encore à venir ! +order.screen.no_order_title|Le meilleur est encore à venir ! order.screen.no_order_description|Vos produits sont bien visibles, vos ventes sont sur le point de décoller order.screen.action_success|Succès order.screen.action_error|Erreur @@ -381,6 +387,8 @@ lengow_setting.lengow_tracking_id_legend|Le nom de l'identifiant unique indiqué lengow_setting.lengow_currency_conversion_title|Convertir la devise de vos commandes lengow_setting.lengow_currency_conversion_legend|Toutes les commandes importées dans PrestaShop seront automatiquement converties dans la devise choisie dans Lengow lengow_setting.lengow_currency_conversion_switch|Activer la conversion de devises +lengow_setting.lengow_disable_send_email_title|Désactiver l'envoi d'email +lengow_setting.lengow_disable_send_email_legend|Désactive l'envoi d'email lors des changements de statut de commande lengow_log.error.nb_order_imported|%{nb_order} commande(s) importée(s) lengow_log.error.nb_order_updated|%{nb_order} commande(s) mise(s) à jour lengow_log.error.nb_order_with_error|%{nb_order} commande(s) avec erreurs diff --git a/translations/it.csv b/translations/it.csv index 195e1720..199beb64 100755 --- a/translations/it.csv +++ b/translations/it.csv @@ -65,7 +65,7 @@ connection.cms.success_button_catalog|Collega i cataloghi connection.cms.failed_title|Ooops! Impossibile collegare Lengow al tuo PrestaShop connection.cms.failed_description|Non siamo stati in grado di effettuare il collegamento tra il tuo PrestaShop e Lengow. connection.cms.failed_description_first_credentials|Incapace di connettersi con le credenziali fornite. -connection.cms.failed_description_second_credentials_prod|Si prega di verificare che queste credenziali corrispondano all'ambiente di produzione di Lengow. +connection.cms.failed_description_second_credentials_prod|Si prega di verificare che queste credenziali corrispondano all'ambiente di produzione di Lengow. connection.cms.failed_description_second_credentials_preprod|Si prega di verificare che queste credenziali corrispondano all'ambiente di pre-produzione di Lengow. connection.cms.failed_help|Se il problema persiste, potrai dare un'occhiata alla connection.cms.failed_help_center|"guida PrestaShop" @@ -113,6 +113,12 @@ product.screen.date_from|Da product.screen.date_to|A product.screen.button_copy|Copia product.screen.button_download|Scarica +product.screen.button_filter|Filtro +product.screen.button_fields_setting|Modifica dei nomi dei campi +product.screen.button_fields_reset|Azzeramento di tutti i campi +product.screen.title_fields_settings|Modificare i campi predefiniti del catalogo esportato +product.screen.title_column_name_fields|Nome del campo Lengow +product.screen.title_column_prestashop_value|Valore di PrestaShop product.screen.button_yes|Si product.screen.button_no|No product.screen.button_search|Cerca @@ -243,7 +249,7 @@ help.screen.contain_text_support|Contattaci o condividi i tuoi feedback con help.screen.title_lengow_support|il Supporto Lengow help.screen.need_some_help|Hai bisogno d'aiuto ? help.screen.contain_text_support_hour|Faremo il possibile per darti una risposta durante le ore di lavoro (dal Lunedi al Venerdi - 9h/18h) -help.screen.find_answer|Potresti trovare una risposta nella nostra +help.screen.find_answer|Potresti trovare una risposta nella nostra help.screen.link_prestashop_guide|guida dedicata PrestaShop legals.screen.simplified_company|Società responsabilità limitata legals.screen.social_capital|Capitale sociale: @@ -344,7 +350,7 @@ lengow_setting.lengow_export_format_title|Esporta formato lengow_setting.lengow_export_file_enabled_title|Esporta in un file lengow_setting.lengow_export_file_enabled_legend|E' consigliato attivare questa opzione se avete 3.000 o piu' prodotti nel vostro flusso. lengow_setting.lengow_export_carrier_default_title|Trasportatore di default -lengow_setting.lengow_last_export_title|Ultima esportazione +lengow_setting.lengow_last_export_title|Ultima esportazione lengow_setting.lengow_order_id_process_title|Ordini in preparazione lengow_setting.lengow_order_id_shipped_title|Ordine Spedizione lengow_setting.lengow_order_id_cancel_title|Ordine cancellato @@ -381,6 +387,8 @@ lengow_setting.lengow_tracking_id_legend|Il numero degli id unici indicati in Le lengow_setting.lengow_currency_conversion_title|Converti la divisa del tuo ordine lengow_setting.lengow_currency_conversion_legend|Tutti gli ordini importati in PrestaShop saranno automaticamente importati nella Divisa che hai selezionato in Lengow lengow_setting.lengow_currency_conversion_switch|Attivare la conversione +lengow_setting.lengow_disable_send_email_title|Disabilita l'invio di email +lengow_setting.lengow_disable_send_email_legend|Disabilita l'invio di email al cambiamento dello stato dell'ordine lengow_log.error.nb_order_imported|%{nb_order} ordine importato lengow_log.error.nb_order_updated|%{nb_order} ordine aggiornato lengow_log.error.nb_order_with_error|%{nb_order} errore numero ordine diff --git a/translations/yml/en.yml b/translations/yml/en.yml index 75a289e9..3554e599 100755 --- a/translations/yml/en.yml +++ b/translations/yml/en.yml @@ -129,6 +129,12 @@ en: date_to: "To" button_copy: "Copy" button_download: "Download" + button_filter: "Filter" + button_fields_setting: "Modify field names" + button_fields_reset: "Reset all fields" + title_fields_settings: "Modify the default field names of the exported catalogue" + title_column_name_fields: "Name of the Lengow field" + title_column_prestashop_value: "PrestaShop value" button_yes: "Yes" button_no: "No" button_search: "Search" @@ -412,6 +418,8 @@ en: lengow_currency_conversion_title: "Convert the currency of your order" lengow_currency_conversion_legend: "All orders imported into PrestaShop will be automatically converted into the currency you've selected in Lengow" lengow_currency_conversion_switch: "Activate conversion" + lengow_disable_send_email_title: "Disable sending emails" + lengow_disable_send_email_legend: "Activate this option if you do not want to send emails to customers when order's statuses change" lengow_log: error: nb_order_imported: "%{nb_order} order(s) imported" diff --git a/translations/yml/es.yml b/translations/yml/es.yml index 3d43786e..6ed5ef30 100755 --- a/translations/yml/es.yml +++ b/translations/yml/es.yml @@ -129,6 +129,12 @@ es: date_to: "Hasta" button_copy: "Copiar" button_download: "Descargar" + button_filter: "Filtro" + button_fields_setting: "Modificación de los nombres de los campos" + button_fields_reset: "Restablecer todos los campos" + title_fields_settings: "Modificar los nombres de campo por defecto del catálogo exportado" + title_column_name_fields: "Nombre del campo de Lengow" + title_column_prestashop_value: "Valor de PrestaShop" button_yes: "Si" button_no: "No" button_search: "Buscar" @@ -412,6 +418,8 @@ es: lengow_currency_conversion_title: "Convierte la divisa de tu pedido" lengow_currency_conversion_legend: "Todos los pedidos importados a Magento serán transformados automáticamente con la moneda que seleccionaste en Lengow" lengow_currency_conversion_switch: "Activa la conversion" + lengow_disable_send_email_title: "Deshabilitar el envío de email" + lengow_disable_send_email_legend: "Deshabilitar el envío de email al cambiar el estado del pedido" lengow_log: error: nb_order_imported: "%{nb_order} pedido(s) importada" diff --git a/translations/yml/fr.yml b/translations/yml/fr.yml index aa00682a..dde7ae94 100755 --- a/translations/yml/fr.yml +++ b/translations/yml/fr.yml @@ -129,6 +129,12 @@ fr: date_to: "Au" button_copy: "Copier" button_download: "Télécharger" + button_filter: "Filtre" + button_fields_setting: "Modifier les noms de champs" + button_fields_reset: "Réinitialiser tous les champs" + title_fields_settings: "Modifier les noms de champs par default du catalogue exporté" + title_column_name_fields: "Nom du champ Lengow" + title_column_prestashop_value: "Valeur PrestaShop" button_yes: "Oui" button_no: "Non" button_search: "Rechercher" @@ -412,6 +418,8 @@ fr: lengow_currency_conversion_title: "Convertir la devise de vos commandes" lengow_currency_conversion_legend: "Toutes les commandes importées dans PrestaShop seront automatiquement converties dans la devise choisie dans Lengow" lengow_currency_conversion_switch: "Activer la conversion de devises" + lengow_disable_send_email_title: "Désactiver l'envoi d'email" + lengow_disable_send_email_legend: "Désactive l'envoi d'email lors des changements de statut de commande" lengow_log: error: nb_order_imported: "%{nb_order} commande(s) importée(s)" diff --git a/translations/yml/it.yml b/translations/yml/it.yml index 4f3f7068..8b4d7100 100755 --- a/translations/yml/it.yml +++ b/translations/yml/it.yml @@ -129,6 +129,12 @@ it: date_to: "A" button_copy: "Copia" button_download: "Scarica" + button_filter: "Filtro" + button_fields_setting: "Modifica dei nomi dei campi" + button_fields_reset: "Azzeramento di tutti i campi" + title_fields_settings: "Modificare i nomi dei campi predefiniti del catalogo esportato" + title_column_name_fields: "Nome del campo Lengow" + title_column_prestashop_value: "Valore di PrestaShop" button_yes: "Si" button_no: "No" button_search: "Cerca" @@ -412,6 +418,8 @@ it: lengow_currency_conversion_title: "Converti la divisa del tuo ordine" lengow_currency_conversion_legend: "Tutti gli ordini importati in PrestaShop saranno automaticamente importati nella Divisa che hai selezionato in Lengow" lengow_currency_conversion_switch: "Attivare la conversione" + lengow_disable_send_email_title: "Disabilita l'invio di email" + lengow_disable_send_email_legend: "Disabilita l'invio di email al cambiamento dello stato dell'ordine" lengow_log: error: nb_order_imported: "%{nb_order} ordine importato" diff --git a/upgrade/update_3.5.4.php b/upgrade/update_3.5.4.php new file mode 100755 index 00000000..914d1773 --- /dev/null +++ b/upgrade/update_3.5.4.php @@ -0,0 +1,114 @@ + + * @copyright 2024 Lengow SAS + * @license http://www.apache.org/licenses/LICENSE-2.0 + */ + +if (!defined('_PS_VERSION_')) { + exit; +} + +if (!LengowInstall::isInstallationInProgress()) { + exit; +} + +// ********************************************************* +// Create lengow_exported_fields Table +// ********************************************************* + +$tableExists = LengowInstall::checkTableExists('lengow_exported_fields'); + +if (!$tableExists) { + $sql = 'CREATE TABLE ' . _DB_PREFIX_ . 'lengow_exported_fields ( + id INT(11) NOT NULL AUTO_INCREMENT, + lengow_field VARCHAR(255) NOT NULL, + prestashop_value VARCHAR(255) NOT NULL, + default_key VARCHAR(255) NOT NULL, + exported TINYINT(1) NOT NULL DEFAULT 1, + PRIMARY KEY (id) + ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8;'; + + Db::getInstance()->execute($sql); + + // ********************************************************* + // Insert Default Values + // ********************************************************* + + $fields = [ + 'id' => 'id', + 'sku' => 'sku', + 'sku_supplier' => 'sku_supplier', + 'ean' => 'ean', + 'upc' => 'upc', + 'isbn' => 'isbn', + 'name' => 'name', + 'quantity' => 'quantity', + 'minimal_quantity' => 'minimal_quantity', + 'availability' => 'availability', + 'is_virtual' => 'is_virtual', + 'condition' => 'condition', + 'category' => 'category', + 'status' => 'status', + 'url' => 'url', + 'url_rewrite' => 'url_rewrite', + 'price_excl_tax' => 'price_excl_tax', + 'price_incl_tax' => 'price_incl_tax', + 'price_before_discount_excl_tax' => 'price_before_discount_excl_tax', + 'price_before_discount_incl_tax' => 'price_before_discount_incl_tax', + 'price_wholesale' => 'price_wholesale', + 'discount_percent' => 'discount_percent', + 'discount_start_date' => 'discount_start_date', + 'discount_end_date' => 'discount_end_date', + 'ecotax' => 'ecotax', + 'shipping_cost' => 'shipping_cost', + 'shipping_delay' => 'shipping_delay', + 'currency' => 'currency', + 'image_url_1' => 'image_1', + 'image_url_2' => 'image_2', + 'image_url_3' => 'image_3', + 'image_url_4' => 'image_4', + 'image_url_5' => 'image_5', + 'image_url_6' => 'image_6', + 'image_url_7' => 'image_7', + 'image_url_8' => 'image_8', + 'image_url_9' => 'image_9', + 'image_url_10' => 'image_10', + 'type' => 'type', + 'parent_id' => 'parent_id', + 'variation' => 'variation', + 'language' => 'language', + 'description' => 'description', + 'description_html' => 'description_html', + 'description_short' => 'short_description', + 'description_short_html' => 'short_description_html', + 'tags' => 'tags', + 'meta_title' => 'meta_title', + 'meta_keyword' => 'meta_keywords', + 'meta_description' => 'meta_description', + 'manufacturer' => 'manufacturer', + 'supplier' => 'supplier', + 'weight' => 'weight', + 'weight_unit' => 'weight_unit', + ]; + + foreach ($fields as $lengowField => $prestashopValue) { + $sql = 'INSERT INTO ' . _DB_PREFIX_ . 'lengow_exported_fields (lengow_field, prestashop_value, default_key) + VALUES ("' . pSQL($lengowField) . '", "' . pSQL($prestashopValue) . '", "' . pSQL($lengowField) . '")'; + Db::getInstance()->execute($sql); + } +} diff --git a/views/css/lengow-components.css b/views/css/lengow-components.css index 0445e22f..8cacf28c 100755 --- a/views/css/lengow-components.css +++ b/views/css/lengow-components.css @@ -18,7 +18,7 @@ color: #555; text-decoration: none; transition: top 100ms ease, - box-shadow 100ms ease; + box-shadow 100ms ease; } a.lgw-box-link:hover { @@ -255,9 +255,9 @@ a.lgw-box-link:hover { transform: scale(0.0); -webkit-transform: scale(0.0); } 50% { - transform: scale(1.0); - -webkit-transform: scale(1.0); - } + transform: scale(1.0); + -webkit-transform: scale(1.0); + } } /*************************************************/ @@ -427,6 +427,7 @@ a.lgw-box-link:hover { display: block; width: 100% !important; max-width: 500px; + z-index: 100000; } .select2-container--default .select2-selection--single { @@ -1120,12 +1121,18 @@ a.lgw-box-link:hover { background: url('../img/carret-up.png') no-repeat right center; } -.lgw-container .accordion .lgw-arrow-right { +.lgw-arrow-right { background: url('../img/arrow-right.png') no-repeat right center; height: 43px; width: 30px; } +.lgw-arrow-left { + background: url('../img/arrow-right.png') no-repeat left center; + height: 43px; + width: 30px; +} + /*************************************************/ /* LOADER */ @@ -1230,4 +1237,4 @@ a.lgw-box-link:hover { .lgw-icon.mod-pro:after { font-size: 20px; -} \ No newline at end of file +} diff --git a/views/css/lengow-layout.css b/views/css/lengow-layout.css index 0cd455e7..611231a0 100755 --- a/views/css/lengow-layout.css +++ b/views/css/lengow-layout.css @@ -369,7 +369,7 @@ hr { body.page-sidebar-closed .lengow-nav, body.page-sidebar-closed .lengow-nav-bottom { - left: -5px; + left: 30px; } #lengow_logo img { @@ -488,6 +488,10 @@ body.page-sidebar-closed .lengow-nav-bottom { top: 54px; } +body.page-sidebar-closed #lgw-debug { + left: 60px; +} + /*************************************************/ /* SELECT2 */ /*************************************************/ diff --git a/views/css/lengow-pages.css b/views/css/lengow-pages.css index 5a2a5884..cac7c825 100755 --- a/views/css/lengow-pages.css +++ b/views/css/lengow-pages.css @@ -381,9 +381,6 @@ } .sticky-icon { - position: fixed; - top: 170px; - transform: translateY(-50%); z-index: 999; padding: 10px; cursor: pointer; @@ -394,13 +391,12 @@ } .sticky-switch { + position: absolute; display: flex; justify-content: center; flex-direction: column; visibility: hidden; - position: fixed; - top: 275px; - transform: translateY(-50%); + top: 10px; padding: 10px; width: 25%; max-height: 100vh; @@ -419,11 +415,213 @@ .filter-column { float: left; - width: 50px; + margin-top: 10px; + width: 80px; + display: flex; + justify-content: center; +} + +.feed-field { + width: fit-content !important; +} + +.fade-scale { + opacity: 0; + -webkit-transition: all .25s linear; + -o-transition: all .25s linear; + transition: all .25s linear; + display: none; +} + +.fade-scale.in { + opacity: 1; + display: block; +} + +.lengow-modal-dialog { + margin-top: 20px; + display: flex; + justify-content: center; +} + +.lengow-modal-content { + background: white; + width: 1200px; +} + +.modal-header-lengow { + padding: 15px; + padding-bottom: 0; + min-height: 16.428571429px; +} + +.lengow-modal-body { + padding: 0 15px; + height: 430px; + overflow-y: scroll; + overflow-x: hidden; +} + +.grid-header, +.grid-row { +display: flex; +} + +.grid-header { display: flex; + background: #f9f9f9; +} + +.grid-item { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + min-width: 225px; + text-align: center; + border: 1px solid #d5dadc; +} + +.header-item { + height: 50px; + background: #f0f0f0; + font-weight: bold; +} + +.arrow-column { + display: flex; + align-items: center; justify-content: center; } +.line-name-field { + display: flex; + justify-content: space-around; +} + +.field-value { + display: flex; + justify-content: center; + align-items: center; + text-align: center; + height: 60px; + width: 230px; + overflow: auto; +} + +.lengow_input { + margin-top: 15px !important; +} + +.form__buttons { + display: flex; + justify-content: space-around; + border-top: 1px solid #c9cfd2; + background: white; + position: sticky; + bottom: 0; + padding: 1em; + margin: -1em; +} + +.config_field_button-container { + width: 98%; + display: flex; + justify-content: end; +} + +.config_field_button { + position: relative; + margin-bottom: 10px; + width: 20px; + padding: 10px; + background: #ded3d3; +} + +.config_field_button:hover { + cursor: pointer; + background: grey; +} + +.config_field_button:hover i { + color: white !important; +} + +.container-close-button { + display: flex; + justify-content: end; +} + +.close-button { + box-sizing: border-box; + color: #949393; + cursor: pointer; + display: inline-block; + font-size: 26px; + font-weight: 800; + line-height: 16px; + min-height: 30px; + outline: 0; + text-align: center; + text-rendering: geometricprecision; + text-transform: none; + user-select: none; + -webkit-user-select: none; + touch-action: manipulation; + vertical-align: middle; +} + +.close-button:hover, +.close-button:active { + background-color: initial; + background-position: 0 0; + color: #555; +} + +.close-button:active { + opacity: .5; +} + +/* Product selector */ + +.select-product-container { + margin-top: 20px; + margin-bottom: 10px; + width: 120px; + display: flex; + flex-direction: column; + justify-content: center; +} + +.select-product-container p { + font-weight: bold; + color: #333; + margin-bottom: 4px; + margin-right: 10px; + padding-bottom: 5px; +} + +.select-product-container .select2-container { + width: 100% !important; +} + +.product-setting-header-row { + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.export-feature { + display: flex; + align-items: center; + margin-top: 20px; + margin-bottom: 10px; +} + +#toggle-all-fields { + margin-right: 10px; +} + /*************************************************/ /* ORDERS */ /*************************************************/ @@ -434,7 +632,7 @@ body.page-sidebar #lengow_form_order_setting{ } .adminlengoworder .lengow-nav { - min-width: 1450px; + min-width: 1250px; } .adminlengoworder .nobootstrap, @@ -443,7 +641,7 @@ body.page-sidebar #lengow_form_order_setting{ } .adminlengoworder .lgw-container { - min-width: 1450px; + min-width: 1250px; width:100%; } diff --git a/views/img/settings-product.png b/views/img/settings-product.png new file mode 100644 index 00000000..dbc89d5d Binary files /dev/null and b/views/img/settings-product.png differ diff --git a/views/img/settings-product.svg b/views/img/settings-product.svg new file mode 100755 index 00000000..382f778b --- /dev/null +++ b/views/img/settings-product.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/views/js/lengow/feed.js b/views/js/lengow/feed.js index 13c9ee1d..6239aa28 100755 --- a/views/js/lengow/feed.js +++ b/views/js/lengow/feed.js @@ -17,50 +17,39 @@ * @copyright 2017 Lengow SAS * @license http://www.apache.org/licenses/LICENSE-2.0 */ - document.addEventListener('DOMContentLoaded', function() { - const stickyIcon = document.getElementById('sticky-icon'); - const stickySwitches = document.querySelectorAll('.sticky-switch'); - const lengowBoxes = document.querySelectorAll('.lgw-box'); - if (lengowBoxes && lengowBoxes.length > 1) { - stickyIcon.style.display = 'none'; - } - - stickyIcon.addEventListener('click', function() { - stickySwitches.forEach(function(switchElem) { - const isSwitchVisible = switchElem.classList.contains('show-switch'); - if (isSwitchVisible) { - switchElem.classList.remove('show-switch'); - } else { - switchElem.classList.add('show-switch'); - } + document.querySelectorAll('.sticky-icon').forEach(icon => { + icon.addEventListener('click', function() { + const shopId = this.dataset.shopId; + const stickySwitches = document.querySelectorAll(`.sticky-switch${shopId}`); + + stickySwitches.forEach(function(switchElem) { + const isSwitchVisible = switchElem.classList.contains('show-switch'); + if (isSwitchVisible) { + switchElem.classList.remove('show-switch'); + } else { + switchElem.classList.add('show-switch'); + } + }); }); }); document.addEventListener('click', function(event) { const clickedElement = event.target; const isStickySwitch = clickedElement.closest('.sticky-switch'); - const isStickyIcon = clickedElement.closest('#sticky-icon'); + const isStickyIcon = clickedElement.closest('.sticky-icon'); if (!isStickySwitch && !isStickyIcon) { - stickySwitches.forEach(function(switchElem) { + document.querySelectorAll('.sticky-switch.show-switch').forEach(function(switchElem) { switchElem.classList.remove('show-switch'); }); } }); }); - - (function ($) { $(document).ready(function () { - - /** - * Refresh total product/product exported - * @param data Number of products exported and total products - * @param idShop Shop id - */ function reloadTotal(data, idShop) { lengow_jquery("#block_" + idShop + " .lengow_exported").html(data['total_export_product']); lengow_jquery("#block_" + idShop + " .lengow_total").html(data['total_product']); @@ -71,10 +60,9 @@ document.addEventListener('DOMContentLoaded', function() { var action = $(this).attr('data-action'); var idShop = $(this).attr('data-id_shop'); + var className = $(this).attr('class').replace('lengow_switch_option ', ''); - var className = $(this).attr('class').replace('lengow_switch_option ',''); - switch(className) - { + switch(className) { case 'option-selection': lengow_jquery('.option-out-of-stock').prop('checked', true); lengow_jquery('.option-variation').prop('checked', true); @@ -85,44 +73,38 @@ document.addEventListener('DOMContentLoaded', function() { break; } - var state_selection = lengow_jquery('.option-selection').prop('checked'); - var state_out_of_stock = lengow_jquery('.option-out-of-stock').prop('checked'); - var state_variation = lengow_jquery('.option-variation').prop('checked'); - var state_inactive = lengow_jquery('.option-inactive').prop('checked'); - + var state_selection = lengow_jquery(`.option-selection-${idShop}`).prop('checked'); + var state_out_of_stock = lengow_jquery(`.option-out-of-stock-${idShop}`).prop('checked'); + var state_variation = lengow_jquery(`.option-variation-${idShop}`).prop('checked'); + var state_inactive = lengow_jquery(`.option-inactive-${idShop}`).prop('checked'); var data = { state_selection: state_selection ? 1 : 0, state_variation: state_variation ? 1 : 0, - state_out_of_stock : state_out_of_stock ? 1 :0, - state_inactive : state_inactive ? 1 : 0, + state_out_of_stock: state_out_of_stock ? 1 : 0, + state_inactive: state_inactive ? 1 : 0, action: action, id_shop: idShop }; - $.getJSON(href, data, function(content) { var selector = lengow_jquery('#block_' + idShop + ' .lengow_feed_block_footer_content'); reloadTotal(content, idShop); - if (content['option'] !== 'selection'){ + if (content['option'] !== 'selection') { selector.slideUp(150); lengow_jquery('.switch-selection').removeClass('checked'); } else { - //window.location.reload(); if (content['state'] === true) { - console.log('add class checked'); lengow_jquery('.switch-variation').addClass('checked'); lengow_jquery('.switch-out-of-stock').addClass('checked'); lengow_jquery('.switch-inactive').removeClass('checked'); } } - if (content['state'] != null) { - if (content['state'] === true - && content['option'] === 'selection') { + if (content['state'] === true && content['option'] === 'selection') { selector.slideDown(150); } else { selector.slideUp(150); @@ -138,8 +120,6 @@ document.addEventListener('DOMContentLoaded', function() { var idProduct = $(this).attr('data-id_product'); var state = $(this).prop('checked'); - - var data = { state: state ? 1 : 0, action: action, @@ -152,7 +132,6 @@ document.addEventListener('DOMContentLoaded', function() { }); }); - $('.lgw-container').on('click', '.lgw-pagination a', function () { if ($(this).parent().hasClass('disabled')) { return false; @@ -170,134 +149,6 @@ document.addEventListener('DOMContentLoaded', function() { $('#lengow_feed_wrapper #form_table_shop_' + idShop + ' input[name="order_value"]').val($(this).attr('data-order')); $('#lengow_feed_wrapper #form_table_shop_' + idShop + ' input[name="order_column"]').val($(this).attr('data-column')); $('#lengow_feed_wrapper #form_table_shop_' + idShop).submit(); - return false; - }); - - $('#lengow_feed_wrapper').on('change', '.lgw-pagination-select-item', function () { - $('#lengow_feed_wrapper .lengow_form_table input[name="nb_per_page"]').val($(this).val()); - $('#lengow_feed_wrapper .lengow_form_table').submit(); - return false; - }); - - // update by input - - var typingTimer; - var idShop; - $('#lengow_feed_wrapper').on('keyup', 'thead input[type="text"]', function () { - idShop = $(this).closest('table').attr('id').split('_')[2]; - clearTimeout(typingTimer); - typingTimer = setTimeout(doneTyping, 750); - }); - $('#lengow_feed_wrapper').on('keydown', 'thead input[type="text"]', function () { - clearTimeout(typingTimer); - }); - function doneTyping (){ - $('#lengow_feed_wrapper #form_table_shop_' + idShop).submit(); - } - - $('#lengow_feed_wrapper').on('submit', '.lengow_form_table', function () { - var href = $(this).attr('data-href'); - var idShop = $(this).attr('id').split('_')[3]; - var form = $(this).serialize(); - var url = href + "&" + form; - var data = { - action: 'load_table', - id_shop: idShop - }; - - $.getJSON(url, data, function(content) { - lengow_jquery("#block_" + content['shop_id'] - + " .lengow_feed_block_footer_content").html(content['footer_content']); - pluginsRender(); - }); - - return false; - }); - $('#lengow_feed_wrapper').on('click', '.lengow_select_all', function () { - var idShop = $(this).attr('id').split('_')[2]; - if ($(this).prop('checked')) { - $('#table_shop_' + idShop + ' tbody .lengow_selection').prop('checked', true); - $('#table_shop_' + idShop + ' tbody tr').addClass('select'); - $('#block_' + idShop + ' .lengow_toolbar a').show(); - $('#block_' + idShop + ' .lengow_toolbar .lengow_select_all_shop').show(); - } else { - $('#table_shop_' + idShop + ' tbody .lengow_selection').prop('checked', false); - $('#table_shop_' + idShop + ' tbody tr').removeClass('select'); - $('#block_' + idShop + ' .lengow_toolbar a').hide(); - $('#block_' + idShop + ' .lengow_toolbar .lengow_select_all_shop').hide(); - } - }); - $('#lengow_feed_wrapper').on('click', '.lengow_selection', function () { - var idShop = $(this).parents('table').attr('id').split('_')[2]; - $('#block_' + idShop + ' .lengow_toolbar a').show(); - - if ($(this).prop('checked')) { - $(this).parents('tr').addClass('select'); - } else { - $('#block_' + idShop + ' .lengow_toolbar .lengow_select_all_shop input').prop('checked', false); - $(this).parents('tr').removeClass('select'); - - } - var findProductSelected = false; - $(this).parents('table').find('.lengow_selection').each(function (index) { - if ($(this).prop('checked')) { - findProductSelected = true; - } - }); - if (!findProductSelected) { - $('#block_' + idShop + ' .lengow_toolbar a').hide(); - } - }); - $('#lengow_feed_wrapper').on('click', '.lengow_add_to_export, .lengow_remove_from_export', function () { - var href = $(this).attr('data-href'); - var idShop = $(this).attr('data-id_shop'); - var message = $(this).attr('data-message'); - var action = $(this).attr('data-action'); - var exportAction = $(this).attr('data-export-action'); - var form = $('#form_table_shop_' + idShop).serialize(); - var url = href + "&" + form; - var check = $('#select_all_shop_' + idShop).prop('checked'); - var data = { - action: action, - id_shop: idShop, - select_all: check, - export_action: exportAction - }; - if (!check || (check && confirm(message))) { - $.getJSON(url, data, function(content) { - if (content['message']) { - alert(content['message']); - } else { - $.each(content['product_id'], function(idx, productId) { - if (exportAction == 'lengow_add_to_export') { - lengow_jquery("#shop_" + idShop + "_" + productId + " .lgw-switch").addClass("checked"); - lengow_jquery(".lengow_switch_product").prop("checked", true); - } else { - lengow_jquery("#shop_" + idShop + "_" + productId + " .lgw-switch").removeClass("checked"); - lengow_jquery(".lengow_switch_product").prop("checked", false); - } - }); - reloadTotal(content, idShop); - } - }); - } - return false; - }); - - $('#lengow_feed_wrapper').on('click', '.lengow_select_all_shop input', function () { - var idShop = $('.lengow_select_all').attr('id').split('_')[2]; - if ($(this).prop('checked')) { - $('#table_shop_' + idShop + ' tbody .lengow_selection').prop('checked', true); - $('.lengow_selection').parents('tr').addClass('select'); - } - }); - - $('.lengow_table').on('click', '.table_row td:not(.no-link)', function(){ - var url = $(this).closest('.table_row').find('.feed_name a').attr('href'); - if (url) { - window.open(url, '_blank'); - }; - return false; }); pluginsRender(); @@ -305,7 +156,6 @@ document.addEventListener('DOMContentLoaded', function() { }); })(lengow_jquery); -function pluginsRender(){ - // Selects +function pluginsRender() { lengow_jquery('.lgw-pagination-select-item').select2({minimumResultsForSearch: Infinity}); } diff --git a/views/templates/admin/lengow_feed/helpers/view/edit_fields_feed.tpl b/views/templates/admin/lengow_feed/helpers/view/edit_fields_feed.tpl new file mode 100644 index 00000000..b10ff8c0 --- /dev/null +++ b/views/templates/admin/lengow_feed/helpers/view/edit_fields_feed.tpl @@ -0,0 +1,221 @@ +{* + * Copyright 2017 Lengow SAS. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific language governing + * permissions and limitations under the License. + * + * @author Team Connector + * @copyright 2017 Lengow SAS + * @license http://www.apache.org/licenses/LICENSE-2.0 + *} + +
+ +
+ + + + diff --git a/views/templates/admin/lengow_feed/helpers/view/view.tpl b/views/templates/admin/lengow_feed/helpers/view/view.tpl index 2a45fc43..bc269b22 100755 --- a/views/templates/admin/lengow_feed/helpers/view/view.tpl +++ b/views/templates/admin/lengow_feed/helpers/view/view.tpl @@ -20,19 +20,24 @@
-
-
- - - -
-
{if $debugMode}
{$locale->t('menu.debug_active')|escape:'htmlall':'UTF-8'}
{/if} + {include file='./edit_fields_feed.tpl'} {foreach from=$shopCollection item=shop} +
+
+ + + +
+

-
+
+ diff --git a/webservice/cron.php b/webservice/cron.php index dcb04724..38a1677d 100755 --- a/webservice/cron.php +++ b/webservice/cron.php @@ -107,7 +107,7 @@ $params[LengowImport::PARAM_DEBUG_MODE] = (bool) Tools::getValue(LengowImport::PARAM_DEBUG_MODE); } if (Tools::getIsset(LengowImport::PARAM_DAYS) && is_numeric(Tools::getValue(LengowImport::PARAM_DAYS))) { - $params[LengowImport::PARAM_DAYS] = (int) Tools::getValue(LengowImport::PARAM_DAYS); + $params[LengowImport::PARAM_DAYS] = (float) Tools::getValue(LengowImport::PARAM_DAYS); } if (Tools::getIsset(LengowImport::PARAM_CREATED_FROM)) { $params[LengowImport::PARAM_CREATED_FROM] = Tools::getValue(LengowImport::PARAM_CREATED_FROM);