diff --git a/admin-dev/ajax.php b/admin-dev/ajax.php index 2a85ae73a..08622f043 100644 --- a/admin-dev/ajax.php +++ b/admin-dev/ajax.php @@ -561,11 +561,11 @@ if (Tools::isSubmit('getHookableList')) { if (!strlen(Tools::getValue('hooks_list'))) die('{"hasError" : true, "errors" : ["Live Edit : no module on this page"]}'); - + $modules_list = explode(',', Tools::getValue('modules_list')); $hooks_list = explode(',', Tools::getValue('hooks_list')); $hookableList = array(); - + foreach ($modules_list as $module) { $module = trim($module); @@ -718,7 +718,7 @@ if (Tools::isSubmit('getAdminHomeElement')) if (Tools::isSubmit('getChildrenCategories') && Tools::getValue('id_category_parent')) { - $children_categories = Category::getChildrenWithNbSelectedSubCat(Tools::getValue('id_category_parent'), Tools::getValue('selectedCat', array()), Context::getContext()->language->id); + $children_categories = Category::getChildrenWithNbSelectedSubCat(Tools::getValue('id_category_parent'), Tools::getValue('selectedCat'), Context::getContext()->language->id); die(Tools::jsonEncode($children_categories)); } @@ -937,7 +937,7 @@ if (Tools::isSubmit('getParentCategoriesId') AND $id_category = Tools::getValue( $output = array(); foreach($results as $result) $output[] = $result; - + die(Tools::jsonEncode($output)); } diff --git a/admin-dev/tabs/AdminStores.php b/admin-dev/tabs/AdminStores.php index 612c4bdf7..a3a3a0de1 100644 --- a/admin-dev/tabs/AdminStores.php +++ b/admin-dev/tabs/AdminStores.php @@ -107,7 +107,7 @@ class AdminStores extends AdminTab $_POST[$kp] = trim($vp); /* If the selected country does not contain states */ - $id_state = (int)(Tools::getValue('id_state')); + $id_state = (int)Tools::getValue('id_state'); if ($id_country = Tools::getValue('id_country') AND $country = new Country((int)($id_country)) AND !(int)($country->contains_states) AND $id_state) $this->_errors[] = Tools::displayError('You have selected a state for a country that does not contain states.'); @@ -115,8 +115,8 @@ class AdminStores extends AdminTab if ((int)($country->contains_states) AND !$id_state) $this->_errors[] = Tools::displayError('An address located in a country containing states must have a state selected.'); - $latitude = (float)(Tools::getValue('latitude')); - $longitude = (float)(Tools::getValue('longitude')); + $latitude = (float)Tools::getValue('latitude'); + $longitude = (float)Tools::getValue('longitude'); if(empty($latitude) OR empty($longitude)) $this->_errors[] = Tools::displayError('Latitude and longitude are required.'); diff --git a/cache/class_index.php b/cache/class_index.php index 7603d57fa..b31f65617 100644 --- a/cache/class_index.php +++ b/cache/class_index.php @@ -1,10 +1,10 @@ 'classes/AbstractLogger.php', 'AbstractLogger' => 'override/classes/AbstractLogger.php', - 'AddressFormatCore' => 'classes/AddressFormat.php', - 'AddressFormat' => 'override/classes/AddressFormat.php', 'AddressCore' => 'classes/Address.php', 'Address' => 'override/classes/Address.php', + 'AddressFormatCore' => 'classes/AddressFormat.php', + 'AddressFormat' => 'override/classes/AddressFormat.php', 'AdminControllerCore' => 'classes/AdminController.php', 'AdminController' => 'override/classes/AdminController.php', 'AdminTabCore' => 'classes/AdminTab.php', @@ -13,33 +13,33 @@ 'Alias' => 'override/classes/Alias.php', 'AttachmentCore' => 'classes/Attachment.php', 'Attachment' => 'override/classes/Attachment.php', - 'AttributeGroupCore' => 'classes/AttributeGroup.php', - 'AttributeGroup' => 'override/classes/AttributeGroup.php', 'AttributeCore' => 'classes/Attribute.php', 'Attribute' => 'override/classes/Attribute.php', + 'AttributeGroupCore' => 'classes/AttributeGroup.php', + 'AttributeGroup' => 'override/classes/AttributeGroup.php', 'Autoload' => 'classes/Autoload.php', 'BackupCore' => 'classes/Backup.php', 'Backup' => 'override/classes/Backup.php', 'BlowfishCore' => 'classes/Blowfish.php', 'Blowfish' => 'override/classes/Blowfish.php', - 'CacheFSCore' => 'classes/CacheFS.php', - 'CacheFS' => 'override/classes/CacheFS.php', + 'CMSCore' => 'classes/CMS.php', + 'CMS' => 'override/classes/CMS.php', + 'CMSCategoryCore' => 'classes/CMSCategory.php', + 'CMSCategory' => 'override/classes/CMSCategory.php', 'CacheCore' => 'classes/Cache.php', 'Cache' => 'override/classes/Cache.php', - 'CarrierModuleCore' => 'classes/CarrierModule.php', - 'CarrierModule' => 'override/classes/CarrierModule.php', + 'CacheFSCore' => 'classes/CacheFS.php', + 'CacheFS' => 'override/classes/CacheFS.php', 'CarrierCore' => 'classes/Carrier.php', 'Carrier' => 'override/classes/Carrier.php', + 'CarrierModuleCore' => 'classes/CarrierModule.php', + 'CarrierModule' => 'override/classes/CarrierModule.php', 'CartCore' => 'classes/Cart.php', 'Cart' => 'override/classes/Cart.php', 'CategoryCore' => 'classes/Category.php', 'Category' => 'override/classes/Category.php', 'ChartCore' => 'classes/Chart.php', 'Chart' => 'override/classes/Chart.php', - 'CMSCategoryCore' => 'classes/CMSCategory.php', - 'CMSCategory' => 'override/classes/CMSCategory.php', - 'CMSCore' => 'classes/CMS.php', - 'CMS' => 'override/classes/CMS.php', 'CombinationCore' => 'classes/Combination.php', 'Combination' => 'override/classes/Combination.php', 'CompareProductCore' => 'classes/CompareProduct.php', @@ -56,10 +56,10 @@ 'Contact' => 'override/classes/Contact.php', 'ContextCore' => 'classes/Context.php', 'Context' => 'override/classes/Context.php', - 'ControllerFactoryCore' => 'classes/ControllerFactory.php', - 'ControllerFactory' => 'override/classes/ControllerFactory.php', 'ControllerCore' => 'classes/Controller.php', 'Controller' => 'override/classes/Controller.php', + 'ControllerFactoryCore' => 'classes/ControllerFactory.php', + 'ControllerFactory' => 'override/classes/ControllerFactory.php', 'CookieCore' => 'classes/Cookie.php', 'Cookie' => 'override/classes/Cookie.php', 'CountryCore' => 'classes/Country.php', @@ -68,26 +68,16 @@ 'County' => 'override/classes/County.php', 'CurrencyCore' => 'classes/Currency.php', 'Currency' => 'override/classes/Currency.php', - 'CustomerMessageCore' => 'classes/CustomerMessage.php', - 'CustomerMessage' => 'override/classes/CustomerMessage.php', 'CustomerCore' => 'classes/Customer.php', 'Customer' => 'override/classes/Customer.php', + 'CustomerMessageCore' => 'classes/CustomerMessage.php', + 'CustomerMessage' => 'override/classes/CustomerMessage.php', 'CustomerThreadCore' => 'classes/CustomerThread.php', 'CustomerThread' => 'override/classes/CustomerThread.php', 'CustomizationCore' => 'classes/Customization.php', 'Customization' => 'override/classes/Customization.php', 'DateRangeCore' => 'classes/DateRange.php', 'DateRange' => 'override/classes/DateRange.php', - 'DbMySQLiCore' => 'classes/db/DbMySQLi.php', - 'DbMySQLi' => 'override/classes/db/DbMySQLi.php', - 'DbPDOCore' => 'classes/db/DbPDO.php', - 'DbPDO' => 'override/classes/db/DbPDO.php', - 'DbCore' => 'classes/db/Db.php', - 'Db' => 'override/classes/db/Db.php', - 'DbQueryCore' => 'classes/db/DbQuery.php', - 'DbQuery' => 'override/classes/db/DbQuery.php', - 'MySQLCore' => 'classes/db/MySQL.php', - 'MySQL' => 'override/classes/db/MySQL.php', 'DeliveryCore' => 'classes/Delivery.php', 'Delivery' => 'override/classes/Delivery.php', 'DiscountCore' => 'classes/Discount.php', @@ -96,14 +86,6 @@ 'Dispatcher' => 'override/classes/Dispatcher.php', 'EmployeeCore' => 'classes/Employee.php', 'Employee' => 'override/classes/Employee.php', - 'PrestashopDatabaseExceptionCore' => 'classes/exception/PrestashopDatabaseException.php', - 'PrestashopDatabaseException' => 'override/classes/exception/PrestashopDatabaseException.php', - 'PrestashopExceptionCore' => 'classes/exception/PrestashopException.php', - 'PrestashopException' => 'override/classes/exception/PrestashopException.php', - 'PrestashopModuleExceptionCore' => 'classes/exception/PrestashopModuleException.php', - 'PrestashopModuleException' => 'override/classes/exception/PrestashopModuleException.php', - 'PrestashopPaymentExceptionCore' => 'classes/exception/PrestashopPaymentException.php', - 'PrestashopPaymentException' => 'override/classes/exception/PrestashopPaymentException.php', 'FeatureCore' => 'classes/Feature.php', 'Feature' => 'override/classes/Feature.php', 'FeatureValueCore' => 'classes/FeatureValue.php', @@ -124,10 +106,10 @@ 'Guest' => 'override/classes/Guest.php', 'HelpAccessCore' => 'classes/HelpAccess.php', 'HelpAccess' => 'override/classes/HelpAccess.php', - 'HelperListCore' => 'classes/HelperList.php', - 'HelperList' => '', 'HelperCore' => 'classes/Helper.php', 'Helper' => 'override/classes/Helper.php', + 'HelperListCore' => 'classes/HelperList.php', + 'HelperList' => '', 'HookCore' => 'classes/Hook.php', 'Hook' => 'override/classes/Hook.php', 'ImageCore' => 'classes/Image.php', @@ -144,32 +126,34 @@ 'LocalizationPack' => 'override/classes/LocalizationPack.php', 'LoggerCore' => 'classes/Logger.php', 'Logger' => 'override/classes/Logger.php', + 'MCachedCore' => 'classes/MCached.php', + 'MCached' => 'override/classes/MCached.php', 'MailCore' => 'classes/Mail.php', 'Mail' => 'override/classes/Mail.php', 'ManufacturerCore' => 'classes/Manufacturer.php', 'Manufacturer' => 'override/classes/Manufacturer.php', - 'MCachedCore' => 'classes/MCached.php', - 'MCached' => 'override/classes/MCached.php', 'MediaCore' => 'classes/Media.php', 'Media' => '', 'MessageCore' => 'classes/Message.php', 'Message' => 'override/classes/Message.php', 'MetaCore' => 'classes/Meta.php', 'Meta' => 'override/classes/Meta.php', - 'ModuleGraphEngineCore' => 'classes/ModuleGraphEngine.php', - 'ModuleGraphEngine' => 'override/classes/ModuleGraphEngine.php', - 'ModuleGraphCore' => 'classes/ModuleGraph.php', - 'ModuleGraph' => 'override/classes/ModuleGraph.php', - 'ModuleGridEngineCore' => 'classes/ModuleGridEngine.php', - 'ModuleGridEngine' => 'override/classes/ModuleGridEngine.php', - 'ModuleGridCore' => 'classes/ModuleGrid.php', - 'ModuleGrid' => 'override/classes/ModuleGrid.php', 'ModuleCore' => 'classes/Module.php', 'Module' => 'override/classes/Module.php', + 'ModuleGraphCore' => 'classes/ModuleGraph.php', + 'ModuleGraph' => 'override/classes/ModuleGraph.php', + 'ModuleGraphEngineCore' => 'classes/ModuleGraphEngine.php', + 'ModuleGraphEngine' => 'override/classes/ModuleGraphEngine.php', + 'ModuleGridCore' => 'classes/ModuleGrid.php', + 'ModuleGrid' => 'override/classes/ModuleGrid.php', + 'ModuleGridEngineCore' => 'classes/ModuleGridEngine.php', + 'ModuleGridEngine' => 'override/classes/ModuleGridEngine.php', 'NotificationCore' => 'classes/Notification.php', 'Notification' => 'override/classes/Notification.php', 'ObjectModelCore' => 'classes/ObjectModel.php', 'ObjectModel' => 'override/classes/ObjectModel.php', + 'OrderCore' => 'classes/Order.php', + 'Order' => 'override/classes/Order.php', 'OrderDetailCore' => 'classes/OrderDetail.php', 'OrderDetail' => 'override/classes/OrderDetail.php', 'OrderDiscountCore' => 'classes/OrderDiscount.php', @@ -178,8 +162,6 @@ 'OrderHistory' => 'override/classes/OrderHistory.php', 'OrderMessageCore' => 'classes/OrderMessage.php', 'OrderMessage' => 'override/classes/OrderMessage.php', - 'OrderCore' => 'classes/Order.php', - 'Order' => 'override/classes/Order.php', 'OrderReturnCore' => 'classes/OrderReturn.php', 'OrderReturn' => 'override/classes/OrderReturn.php', 'OrderReturnStateCore' => 'classes/OrderReturnState.php', @@ -188,6 +170,8 @@ 'OrderSlip' => 'override/classes/OrderSlip.php', 'OrderStateCore' => 'classes/OrderState.php', 'OrderState' => 'override/classes/OrderState.php', + 'PDFCore' => 'classes/PDF.php', + 'PDF' => 'override/classes/PDF.php', 'PackCore' => 'classes/Pack.php', 'Pack' => 'override/classes/Pack.php', 'PageCore' => 'classes/Page.php', @@ -196,12 +180,10 @@ 'PaymentCC' => 'override/classes/PaymentCC.php', 'PaymentModuleCore' => 'classes/PaymentModule.php', 'PaymentModule' => 'override/classes/PaymentModule.php', - 'PDFCore' => 'classes/PDF.php', - 'PDF' => 'override/classes/PDF.php', - 'ProductDownloadCore' => 'classes/ProductDownload.php', - 'ProductDownload' => 'override/classes/ProductDownload.php', 'ProductCore' => 'classes/Product.php', 'Product' => 'override/classes/Product.php', + 'ProductDownloadCore' => 'classes/ProductDownload.php', + 'ProductDownload' => 'override/classes/ProductDownload.php', 'ProductSaleCore' => 'classes/ProductSale.php', 'ProductSale' => 'override/classes/ProductSale.php', 'ProfileCore' => 'classes/Profile.php', @@ -220,26 +202,20 @@ 'Rijndael' => 'override/classes/Rijndael.php', 'SceneCore' => 'classes/Scene.php', 'Scene' => 'override/classes/Scene.php', - 'SearchEngineCore' => 'classes/SearchEngine.php', - 'SearchEngine' => 'override/classes/SearchEngine.php', 'SearchCore' => 'classes/Search.php', 'Search' => 'override/classes/Search.php', - 'GroupShopCore' => 'classes/shop/GroupShop.php', - 'GroupShop' => 'override/classes/shop/GroupShop.php', - 'ShopCore' => 'classes/shop/Shop.php', - 'Shop' => 'override/classes/shop/Shop.php', - 'ShopUrlCore' => 'classes/shop/ShopUrl.php', - 'ShopUrl' => 'override/classes/shop/ShopUrl.php', + 'SearchEngineCore' => 'classes/SearchEngine.php', + 'SearchEngine' => 'override/classes/SearchEngine.php', 'SpecificPriceCore' => 'classes/SpecificPrice.php', 'SpecificPrice' => 'override/classes/SpecificPrice.php', 'StateCore' => 'classes/State.php', 'State' => 'override/classes/State.php', + 'StockCore' => 'classes/Stock.php', + 'Stock' => 'override/classes/Stock.php', 'StockMvtCore' => 'classes/StockMvt.php', 'StockMvt' => 'override/classes/StockMvt.php', 'StockMvtReasonCore' => 'classes/StockMvtReason.php', 'StockMvtReason' => 'override/classes/StockMvtReason.php', - 'StockCore' => 'classes/Stock.php', - 'Stock' => 'override/classes/Stock.php', 'StoreCore' => 'classes/Store.php', 'Store' => 'override/classes/Store.php', 'SubDomainCore' => 'classes/SubDomain.php', @@ -250,21 +226,6 @@ 'Tab' => 'override/classes/Tab.php', 'TagCore' => 'classes/Tag.php', 'Tag' => 'override/classes/Tag.php', - 'TaxCalculatorCore' => 'classes/tax/TaxCalculator.php', - 'TaxCalculator' => 'override/classes/tax/TaxCalculator.php', - 'TaxManagerFactoryCore' => 'classes/tax/TaxManagerFactory.php', - 'TaxManagerFactory' => 'override/classes/tax/TaxManagerFactory.php', - 'TaxManagerInterface' => 'classes/tax/TaxManagerInterface.php', - 'TaxManagerModuleCore' => 'classes/tax/TaxManagerModule.php', - 'TaxManagerModule' => 'override/classes/tax/TaxManagerModule.php', - 'TaxCore' => 'classes/tax/Tax.php', - 'Tax' => 'override/classes/tax/Tax.php', - 'TaxRuleCore' => 'classes/tax/TaxRule.php', - 'TaxRule' => 'override/classes/tax/TaxRule.php', - 'TaxRulesGroupCore' => 'classes/tax/TaxRulesGroup.php', - 'TaxRulesGroup' => 'override/classes/tax/TaxRulesGroup.php', - 'TaxRulesTaxManagerCore' => 'classes/tax/TaxRulesTaxManager.php', - 'TaxRulesTaxManager' => 'override/classes/tax/TaxRulesTaxManager.php', 'ThemeCore' => 'classes/Theme.php', 'Theme' => 'override/classes/Theme.php', 'ToolsCore' => 'classes/Tools.php', @@ -275,6 +236,47 @@ 'Upgrader' => 'override/classes/Upgrader.php', 'ValidateCore' => 'classes/Validate.php', 'Validate' => 'override/classes/Validate.php', + 'ZoneCore' => 'classes/Zone.php', + 'Zone' => 'override/classes/Zone.php', + 'DbCore' => 'classes/db/Db.php', + 'Db' => 'override/classes/db/Db.php', + 'DbMySQLiCore' => 'classes/db/DbMySQLi.php', + 'DbMySQLi' => 'override/classes/db/DbMySQLi.php', + 'DbPDOCore' => 'classes/db/DbPDO.php', + 'DbPDO' => 'override/classes/db/DbPDO.php', + 'DbQueryCore' => 'classes/db/DbQuery.php', + 'DbQuery' => 'override/classes/db/DbQuery.php', + 'MySQLCore' => 'classes/db/MySQL.php', + 'MySQL' => 'override/classes/db/MySQL.php', + 'PrestashopDatabaseExceptionCore' => 'classes/exception/PrestashopDatabaseException.php', + 'PrestashopDatabaseException' => 'override/classes/exception/PrestashopDatabaseException.php', + 'PrestashopExceptionCore' => 'classes/exception/PrestashopException.php', + 'PrestashopException' => 'override/classes/exception/PrestashopException.php', + 'PrestashopModuleExceptionCore' => 'classes/exception/PrestashopModuleException.php', + 'PrestashopModuleException' => 'override/classes/exception/PrestashopModuleException.php', + 'PrestashopPaymentExceptionCore' => 'classes/exception/PrestashopPaymentException.php', + 'PrestashopPaymentException' => 'override/classes/exception/PrestashopPaymentException.php', + 'GroupShopCore' => 'classes/shop/GroupShop.php', + 'GroupShop' => 'override/classes/shop/GroupShop.php', + 'ShopCore' => 'classes/shop/Shop.php', + 'Shop' => 'override/classes/shop/Shop.php', + 'ShopUrlCore' => 'classes/shop/ShopUrl.php', + 'ShopUrl' => 'override/classes/shop/ShopUrl.php', + 'TaxCore' => 'classes/tax/Tax.php', + 'Tax' => 'override/classes/tax/Tax.php', + 'TaxCalculatorCore' => 'classes/tax/TaxCalculator.php', + 'TaxCalculator' => 'override/classes/tax/TaxCalculator.php', + 'TaxManagerFactoryCore' => 'classes/tax/TaxManagerFactory.php', + 'TaxManagerFactory' => 'override/classes/tax/TaxManagerFactory.php', + 'TaxManagerInterface' => 'classes/tax/TaxManagerInterface.php', + 'TaxManagerModuleCore' => 'classes/tax/TaxManagerModule.php', + 'TaxManagerModule' => 'override/classes/tax/TaxManagerModule.php', + 'TaxRuleCore' => 'classes/tax/TaxRule.php', + 'TaxRule' => 'override/classes/tax/TaxRule.php', + 'TaxRulesGroupCore' => 'classes/tax/TaxRulesGroup.php', + 'TaxRulesGroup' => 'override/classes/tax/TaxRulesGroup.php', + 'TaxRulesTaxManagerCore' => 'classes/tax/TaxRulesTaxManager.php', + 'TaxRulesTaxManager' => 'override/classes/tax/TaxRulesTaxManager.php', 'WebserviceExceptionCore' => 'classes/webservice/WebserviceException.php', 'WebserviceException' => 'override/classes/webservice/WebserviceException.php', 'WebserviceKeyCore' => 'classes/webservice/WebserviceKey.php', @@ -291,8 +293,6 @@ 'WebserviceSpecificManagementInterface' => 'classes/webservice/WebserviceSpecificManagementInterface.php', 'WebserviceSpecificManagementSearchCore' => 'classes/webservice/WebserviceSpecificManagementSearch.php', 'WebserviceSpecificManagementSearch' => 'override/classes/webservice/WebserviceSpecificManagementSearch.php', - 'ZoneCore' => 'classes/Zone.php', - 'Zone' => 'override/classes/Zone.php', 'FB' => 'override/classes/fb.php', 'AdminAddressesControllerCore' => 'controllers/admin/AdminAddressesController.php', 'AdminAddressesController' => '', diff --git a/classes/Category.php b/classes/Category.php index 67c6e8f9b..f5d432976 100644 --- a/classes/Category.php +++ b/classes/Category.php @@ -73,11 +73,11 @@ class CategoryCore extends ObjectModel /** @var string Object last modification date */ public $date_upd; - + protected $langMultiShop = true; public $groupBox; - + protected static $_links = array(); protected $tables = array ('category', 'category_lang'); @@ -132,12 +132,12 @@ class CategoryCore extends ObjectModel $fields['date_upd'] = pSQL($this->date_upd); return $fields; } - + /** * Allows to display the category description without HTML tags and slashes * * @return string - */ + */ public static function getDescriptionClean($description) { return strip_tags(stripslashes($description)); @@ -176,8 +176,8 @@ class CategoryCore extends ObjectModel /** * update category positions in parent - * - * @param mixed $nullValues + * + * @param mixed $nullValues * @return void */ public function update($nullValues = false) @@ -332,7 +332,7 @@ class CategoryCore extends ObjectModel self::regenerateEntireNtree(); Module::hookExec('categoryDeletion', array('category' => $this)); - + /* Delete Categories in GroupReduction */ foreach ($toDelete AS $category) if (GroupReduction::getGroupReductionByCategoryId((int)$category)) @@ -420,8 +420,8 @@ class CategoryCore extends ObjectModel { Db::getInstance(_PS_USE_SQL_SLAVE_)->Execute(' UPDATE '._DB_PREFIX_.'category - SET level_depth = '.($level['level_depth'] + 1).' - WHERE id_category = '.$sub_category['id_category']); + SET level_depth = '.(int)($level['level_depth'] + 1).' + WHERE id_category = '.(int)$sub_category['id_category']); /* Recursive call */ $this->recalculateLevelDepth($sub_category['id_category']); } @@ -522,7 +522,7 @@ class CategoryCore extends ObjectModel if (!$context) $context = Context::getContext(); if (!$checkAccess OR !$this->checkAccess($context->customer->id)) - return false; + return false; if ($p < 1) $p = 1; @@ -531,7 +531,7 @@ class CategoryCore extends ObjectModel else /* Fix for all modules which are now using lowercase values for 'orderBy' parameter */ $orderBy = strtolower($orderBy); - + if (empty($orderWay)) $orderWay = 'ASC'; if ($orderBy == 'id_product' OR $orderBy == 'date_add') @@ -635,7 +635,7 @@ class CategoryCore extends ObjectModel * @param int $id_parent * @param int $id_lang * @param bool $active - * @return array + * @return array */ public static function getChildren($id_parent, $id_lang, $active = true) { @@ -653,7 +653,7 @@ class CategoryCore extends ObjectModel } /** return an array of all children of the current category - * + * * @return array rows of table category * @todo return hydrateCollection */ @@ -667,27 +667,28 @@ class CategoryCore extends ObjectModel /** * This method allow to return children categories with the number of sub children selected for a product - * + * * @param int $id_parent * @param int $id_product * @param int $id_lang - * @return array + * @return array */ public static function getChildrenWithNbSelectedSubCat($id_parent, $selectedCat, $id_lang, Shop $shop = null) { if (!$shop) $shop = Context::getContext()->shop; + $selectedCat = explode(',', str_replace(' ', '', $selectedCat)); $sql = 'SELECT c.`id_category`, c.`level_depth`, cl.`name`, IF(( - SELECT COUNT(*) + SELECT COUNT(*) FROM `'._DB_PREFIX_.'category` c2 WHERE c2.`id_parent` = c.`id_category` ) > 0, 1, 0) AS has_children, '.($selectedCat ? '( - SELECT count(c3.`id_category`) - FROM `'._DB_PREFIX_.'category` c3 - WHERE c3.`nleft` > c.`nleft` + SELECT count(c3.`id_category`) + FROM `'._DB_PREFIX_.'category` c3 + WHERE c3.`nleft` > c.`nleft` AND c3.`nright` < c.`nright` - AND c3.`id_category` IN ('.pSQL($selectedCat).') + AND c3.`id_category` IN ('.implode(',', array_map('intval', $selectedCat)).') )' : '0').' AS nbSelectedSubCat FROM `'._DB_PREFIX_.'category` c LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON c.`id_category` = cl.`id_category`'.$shop->sqlLang('cl').' @@ -696,7 +697,7 @@ class CategoryCore extends ObjectModel ORDER BY `position` ASC'; return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); } - + /** * Copy products from a category to another * @@ -894,7 +895,7 @@ class CategoryCore extends ObjectModel $groups[] = $group['id_group']; return $groups; } - + public function addGroupsIfNoExist($id_group) { $groups = $this->getGroups(); @@ -909,8 +910,8 @@ class CategoryCore extends ObjectModel /** * checkAccess return true if id_customer is in a group allowed to see this category. - * - * @param mixed $id_customer + * + * @param mixed $id_customer * @access public * @return boolean true if access allowed for customer $id_customer */ @@ -966,7 +967,7 @@ class CategoryCore extends ObjectModel foreach ($res AS $category) if ((int)($category['id_category']) == (int)($this->id)) $movedCategory = $category; - + if (!isset($movedCategory) || !isset($position)) return false; // < and > statements rather than BETWEEN operator @@ -992,8 +993,8 @@ class CategoryCore extends ObjectModel * cleanPositions keep order of category in $id_category_parent, * but remove duplicate position. Should not be used if positions * are clean at the beginning ! - * - * @param mixed $id_category_parent + * + * @param mixed $id_category_parent * @return boolean true if succeed */ public static function cleanPositions($id_category_parent) @@ -1018,7 +1019,7 @@ class CategoryCore extends ObjectModel } /** this function return the number of category + 1 having $id_category_parent as parent. - * + * * @todo rename that function to make it understandable (getNewLastPosition for example) * @param int $id_category_parent the parent category * @return int @@ -1027,7 +1028,7 @@ class CategoryCore extends ObjectModel { return (Db::getInstance()->getValue('SELECT MAX(position)+1 FROM `'._DB_PREFIX_.'category` WHERE `id_parent` = '.(int)($id_category_parent))); } - + public static function getUrlRewriteInformations($id_category) { return Db::getInstance()->ExecuteS(' @@ -1038,10 +1039,10 @@ class CategoryCore extends ObjectModel AND l.`active` = 1' ); } - + /** * Return nleft and nright fields for a given category - * + * * @since 1.5.0 * @param int $id * @return array @@ -1072,7 +1073,7 @@ class CategoryCore extends ObjectModel return false; return ($this->nleft >= $interval['nleft'] && $this->nright <= $interval['nright']); } - + public function getChildrenWs() { $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' @@ -1083,7 +1084,7 @@ class CategoryCore extends ObjectModel ORDER BY `position` ASC'); return $result; } - + public function getProductsWs() { $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' @@ -1093,10 +1094,10 @@ class CategoryCore extends ObjectModel ORDER BY `position` ASC'); return $result; } - + /** * Search for another category with the same parent and the same position - * + * * @return array first category found */ public function getDuplicatePosition() @@ -1108,7 +1109,7 @@ class CategoryCore extends ObjectModel AND `position` = '.(int)($this->position).' AND c.`id_category` != '.(int)($this->id)); } - + public function getWsNbProductsRecursive() { $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' @@ -1121,12 +1122,12 @@ class CategoryCore extends ObjectModel return -1; return $result[0]['nb_product_recursive']; } - + /** * * @param Array $ids_category * @param int $id_lang - * @return Array + * @return Array */ public static function getCategoryInformations($ids_category, $id_lang = null) { @@ -1135,19 +1136,19 @@ class CategoryCore extends ObjectModel if (!is_array($ids_category) || !sizeof($ids_category)) return; - + $categories = array(); $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' - SELECT c.`id_category`, cl.`name`, cl.`link_rewrite`, cl.`id_lang` - FROM `'._DB_PREFIX_.'category` c + SELECT c.`id_category`, cl.`name`, cl.`link_rewrite`, cl.`id_lang` + FROM `'._DB_PREFIX_.'category` c LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category`'.Context::getContext()->shop->sqlLang('cl').') WHERE cl.`id_lang` = '.(int)$id_lang.' AND c.`id_category` IN ('.implode(',', array_map('intval', $ids_category)).') '); - + foreach($results as $category) $categories[$category['id_category']] = $category; - + return $categories; } } diff --git a/classes/FrontController.php b/classes/FrontController.php index cc86d0137..952d8df6a 100755 --- a/classes/FrontController.php +++ b/classes/FrontController.php @@ -412,7 +412,7 @@ class FrontControllerCore extends Controller protected function canonicalRedirection($canonicalURL = '') { - if (!$canonicalURL || !Configuration::get('PS_CANONICAL_REDIRECT')) + if (!$canonicalURL || !Configuration::get('PS_CANONICAL_REDIRECT') || strtoupper($_SERVER['REQUEST_METHOD']) != 'GET') return; $matchUrl = (($this->ssl && Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; diff --git a/classes/Search.php b/classes/Search.php index 9616b0d61..eeff42cc0 100644 --- a/classes/Search.php +++ b/classes/Search.php @@ -339,7 +339,7 @@ class SearchCore protected static function getProductsToIndex($nbLanguages, $limit = 50) { // Adjust the limit to get only "whole" products, in every languages (and at least one) - $limit = min(1, round($limit / $nbLanguages) * $nbLanguages); + $limit = max(1, round($limit / $nbLanguages) * $nbLanguages); return Db::getInstance()->ExecuteS(' SELECT p.id_product, pl.id_lang, pl.name pname, p.reference, p.ean13, p.upc, pl.description_short, pl.description, cl.name cname, m.name mname FROM '._DB_PREFIX_.'product p diff --git a/classes/Store.php b/classes/Store.php index d5ba10d6c..dbd2fc99c 100644 --- a/classes/Store.php +++ b/classes/Store.php @@ -120,6 +120,13 @@ class StoreCore extends ObjectModel return $fields; } + public function __construct($id_store = NULL, $id_lang = NULL) + { + parent::__construct($id_store, $id_lang); + $this->id_image = ($this->id AND file_exists(_PS_STORE_IMG_DIR_.(int)$this->id.'.jpg')) ? (int)$this->id : false; + $this->image_dir = _PS_STORE_IMG_DIR_; + } + public function getWsHours() { return implode(';', unserialize($this->hours)); diff --git a/classes/webservice/WebserviceException.php b/classes/webservice/WebserviceException.php index 0aff0d85e..abdf5e2e9 100755 --- a/classes/webservice/WebserviceException.php +++ b/classes/webservice/WebserviceException.php @@ -1,6 +1,6 @@ type; + return $this->type; } public function setType($type) { $this->type = $type; - return $this; + return $this; } public function setStatus($status) { diff --git a/classes/webservice/WebserviceOutputBuilder.php b/classes/webservice/WebserviceOutputBuilder.php index f8dc9ef10..d4a2d554f 100755 --- a/classes/webservice/WebserviceOutputBuilder.php +++ b/classes/webservice/WebserviceOutputBuilder.php @@ -27,7 +27,6 @@ /** * @todo : Create typed exception for more finer errors check - * @author Lucas Cherifi - Nans Pellicari - Anatole Korczak - PrestaShop Team */ class WebserviceOutputBuilderCore { diff --git a/classes/webservice/WebserviceOutputInterface.php b/classes/webservice/WebserviceOutputInterface.php index 0c1fbb426..64fbf6247 100755 --- a/classes/webservice/WebserviceOutputInterface.php +++ b/classes/webservice/WebserviceOutputInterface.php @@ -1,6 +1,6 @@ schemaToDisplay = $schema; return $this; } - + public function getSchemaToDisplay() { return $this->schemaToDisplay; } - + public function setWsUrl($url) { $this->wsUrl = $url; @@ -98,10 +94,10 @@ class WebserviceOutputXMLCore implements WebserviceOutputInterface foreach ($this->languages as $language) { $more_attr = ''; - if (isset($field['synopsis_details']) || (isset($field['value']) AND is_array($field['value']))) + if (isset($field['synopsis_details']) || (isset($field['value']) AND is_array($field['value']))) { $more_attr .= ' xlink:href="'.$this->getWsUrl().'languages/'.$language.'"'; - if (isset($field['synopsis_details']) && $this->schemaToDisplay != 'blank') + if (isset($field['synopsis_details']) && $this->schemaToDisplay != 'blank') $more_attr .= ' format="isUnsignedId" '; } $node_content .= ''; @@ -121,11 +117,11 @@ class WebserviceOutputXMLCore implements WebserviceOutputInterface $ret .= ' xlink:href="'.$this->getWsUrl().$field['xlink_resource']['resourceName'].'/'. (isset($field['xlink_resource']['subResourceName']) ? $field['xlink_resource']['subResourceName'].'/'.$field['object_id'].'/' : '').$field['value'].'"'; } - + if (isset($field['getter']) && $this->schemaToDisplay != 'blank') $ret .= ' not_filterable="true"'; - - if ($field['value'] != '') + + if ($field['value'] != '') $node_content .= ''; } if (isset($field['synopsis_details']) && !empty($field['synopsis_details']) && $this->schemaToDisplay !== 'blank') diff --git a/classes/webservice/WebserviceSpecificManagementImages.php b/classes/webservice/WebserviceSpecificManagementImages.php index 30d43e7c0..27a7de9ed 100755 --- a/classes/webservice/WebserviceSpecificManagementImages.php +++ b/classes/webservice/WebserviceSpecificManagementImages.php @@ -1,6 +1,6 @@ array(), 'stores' => array() ); - + /** * @var string The image type (product, category, general,...) */ private $imageType = NULL; - + /** * @var int The maximum size supported when uploading images, in bytes */ private $imgMaxUploadSize = 3000000; - + /** * @var array The list of supported mime types */ protected $acceptedImgMimeTypes = array('image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png'); - + /** * @var string The product image declination id */ protected $productImageDeclinationId = NULL; - + /** * @var boolean If the current image management has to manage a "default" image (i.e. "No product available") */ protected $defaultImage = false; - + /** * @var string The file path of the image to display. If not null, the image will be displayed, even if the XML output was not empty */ public $imgToDisplay = null; public $imageResource = null; - + // ------------------------------------------------ // GETTERS & SETTERS // ------------------------------------------------ - + public function setObjectOutput(WebserviceOutputBuilderCore $obj) { $this->objOutput = $obj; return $this; } - + public function getObjectOutput() { return $this->objOutput; } - + public function setWsObject(WebserviceRequestCore $obj) { $this->wsObject = $obj; return $this; } - + public function getWsObject() { return $this->wsObject; } - + /* * This method need $this->imgToDisplay to be set if output don't needs to be XML */ @@ -142,23 +138,23 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage } } } - + public function manage() { $this->manageImages(); return $this->wsObject->getOutputEnabled(); } - + /** * Management of images URL segment - * + * * @return boolean */ private function manageImages() { /* * available cases api/... : - * + * * images ("types_list") (N-1) * GET (xml) * images/general ("general_list") (N-2) @@ -166,9 +162,9 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage * images/general/[header,+] ("general") (N-3) * GET (bin) * PUT (bin) - * - * - * images/[categories,+] ("normal_list") (N-2) ([categories,+] = categories, manufacturers, ...) + * + * + * images/[categories,+] ("normal_list") (N-2) ([categories,+] = categories, manufacturers, ...) * GET (xml) * images/[categories,+]/[1,+] ("normal") (N-3) * GET (bin) @@ -186,7 +182,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage * DELETE * images/[categories,+]/default/[en,+]/[small,+] ("normal_default_i18n_resized") (N-5) * GET (bin) - * + * * images/product ("product_list") (N-2) * GET (xml) (list of image) * images/product/[1,+] ("product_description") (N-3) @@ -214,10 +210,10 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage * DELETE * images/product/default/[en,+]/[small,+] ("product_default_i18n_resized") (N-5) * GET (bin) - * + * */ - - + + /* Declinated *ok GET (bin) *ok images/product ("product_list") (N-2) @@ -247,18 +243,18 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage * DELETE *ok images/product/default/[en,+]/[small,+] ("product_default_i18n_resized") (N-5) *ok GET (bin) - * + * * */ - - + + // Pre configuration... if(isset($this->wsObject->urlSegment)) for ($i = 1; $i < 6; $i++) if (count($this->wsObject->urlSegment) == $i) $this->wsObject->urlSegment[$i] = ''; - + $this->imageType = $this->wsObject->urlSegment[1]; - + switch ($this->wsObject->urlSegment[1]) { // general images management : like header's logo, invoice logo, etc... @@ -287,12 +283,12 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage } return $this->manageDeclinatedImages($directory); break; - + // product image management : many image for one entity (product) case 'products': return $this->manageProductImages(); break; - + // images root node management : many image for one entity (product) case '': $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('image_types', array()); @@ -308,7 +304,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('image_types', array()); return true; break; - + default: $exception = new WebserviceException(sprintf('Image of type "%s" does not exists', $this->wsObject->urlSegment[1]), array(48, 400)); throw $exception->setDidYouMean($this->wsObject->urlSegment[1], array_keys($this->imageTypes)); @@ -316,7 +312,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage } /** * Management of general images - * + * * @return boolean */ private function manageGeneralImages() @@ -332,7 +328,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage else throw new WebserviceException('This method is not allowed with general image resources.', array(49, 405)); break; - + // Set the image path on display in relation to the mail image case 'mail': if (in_array($this->wsObject->method, array('GET','HEAD','PUT'))) @@ -343,7 +339,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage else throw new WebserviceException('This method is not allowed with general image resources.', array(50, 405)); break; - + // Set the image path on display in relation to the invoice image case 'invoice': if (in_array($this->wsObject->method, array('GET','HEAD','PUT'))) @@ -354,7 +350,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage else throw new WebserviceException('This method is not allowed with general image resources.', array(51, 405)); break; - + // Set the image path on display in relation to the icon store image case 'store_icon': if (in_array($this->wsObject->method, array('GET','HEAD','PUT'))) @@ -365,7 +361,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage else throw new WebserviceException('This method is not allowed with general image resources.', array(52, 405)); break; - + // List the general image types case '': $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('general_image_types', array()); @@ -381,7 +377,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('general_image_types', array()); return true; break; - + // If the image type does not exist... default: $exception = new WebserviceException(sprintf('General image of type "%s" does not exists', $this->wsObject->urlSegment[2]), array(53, 400)); @@ -396,7 +392,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage return true; break; case 'PUT': - + if ($this->writePostedImageOnDisk($path, NULL, NULL)) { if ($this->wsObject->urlSegment[2] == 'header') @@ -413,7 +409,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage break; } } - + private function manageDefaultDeclinatedImages($directory, $normal_image_sizes) { $this->defaultImage = true; @@ -427,7 +423,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage $defaultLang = $lang['iso_code']; $langs[] = $lang['iso_code']; } - + // Display list of languages if($this->wsObject->urlSegment[3] == '' && $this->wsObject->method == 'GET') { @@ -442,7 +438,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage ); $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('language', array(), $more_attr, false); } - + $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('languages', array()); return true; } @@ -458,19 +454,19 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage return $this->manageDeclinatedImagesCRUD($filename_exists, $filename, $normal_image_sizes, $directory);// @todo : [feature] @see todo#1 } } - + private function manageListDeclinatedImages($directory, $normal_image_sizes) { // Check if method is allowed if ($this->wsObject->method != 'GET') throw new WebserviceException('This method is not allowed for listing category images.', array(55, 405)); - + $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('image_types', array()); foreach ($normal_image_sizes as $image_size) $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('image_type', array(), array('id' => $image_size['id_image_type'], 'name' => $image_size['name'], 'xlink_resource'=>$this->wsObject->wsUrl.'image_types/'.$image_size['id_image_type']), false); $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('image_types', array()); $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('images', array()); - + if ($this->imageType == 'products') { $ids = array(); @@ -505,7 +501,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('images', array()); return true; } - + private function manageEntityDeclinatedImages($directory, $normal_image_sizes) { $normal_image_size_names = array(); @@ -515,20 +511,20 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage $object_id = $this->wsObject->urlSegment[2]; if (!Validate::isUnsignedId($object_id)) throw new WebserviceException('The image id is invalid. Please set a valid id or the "default" value', array(60, 400)); - + // For the product case if ($this->imageType == 'products') { // Get available image ids $available_image_ids = array(); - + // New Behavior $languages = Language::getLanguages(); foreach ($languages as $language) foreach (Image::getImages($language['id_lang'], $object_id) as $image) $available_image_ids[] = $image['id_image']; - - + + // Old Behavior $nodes = scandir($directory); foreach ($nodes as $node) @@ -539,7 +535,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage if (isset($matches[1])) $available_image_ids[] = $matches[1]; } - + // If an image id is specified if ($this->wsObject->urlSegment[3] != '') { @@ -552,7 +548,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage throw new WebserviceException('This image id does not exist', array(57, 400)); else { - + // Check for new image system $image_id = $this->wsObject->urlSegment[3]; $path = implode('/', str_split((string)$image_id)); @@ -586,7 +582,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage $this->wsObject->setOutputEnabled(false); } } - + } // for all other cases else @@ -595,16 +591,16 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage $image_size = $this->wsObject->urlSegment[3]; $filename = $directory.$object_id.'-'.$image_size.'.jpg'; } - - + + // in case of declinated images list of a product is get if ($this->output != '') return true; - + // If a size was given try to display it elseif (isset($image_size) && $image_size != '') { - + // Check the given size if ($this->imageType == 'products' && $image_size == 'bin') $filename = $directory.$object_id.'-'.$image_id.'.jpg'; @@ -615,7 +611,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage } if (!file_exists($filename)) throw new WebserviceException('This image does not exist on disk', array(59, 500)); - + // Display the resized specific image $this->imgToDisplay = $filename; return true; @@ -634,7 +630,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage /** * Management of normal images (as categories, suppliers, manufacturers and stores) - * + * * @param string $directory the file path of the root of the images folder type * @return boolean */ @@ -656,17 +652,17 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage return $this->manageEntityDeclinatedImages($directory, $normal_image_sizes); break; } - + } - + private function manageProductImages() { $this->manageDeclinatedImages(_PS_PROD_IMG_DIR_); } - + /** * Management of normal images CRUD - * + * * @param boolean $filename_exists if the filename exists * @param string $filename the image path * @param array $imageSizes The @@ -726,14 +722,14 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage throw new WebserviceException('Unable to save this image', array(66, 500)); } break; - default : + default : throw new WebserviceException('This method is not allowed', array(67, 405)); } } - + /** * Delete the image on disk - * + * * @param string $filePath the image file path * @param array $imageTypes The differents sizes * @param string $parentPath The parent path @@ -770,10 +766,10 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage return false; } } - + /** * Write the image on disk - * + * * @param string $basePath * @param string $newPath * @param int $destWidth @@ -802,10 +798,10 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage $sourceImage = imagecreatefromjpeg($basePath); break; } - + $widthDiff = $destWidth / $sourceWidth; $heightDiff = $destHeight / $sourceHeight; - + if ($widthDiff > 1 AND $heightDiff > 1) { $nextWidth = $sourceWidth; @@ -826,10 +822,10 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage $destHeight = ((int)(Configuration::get('PS_IMAGE_GENERATION_METHOD')) == 0 ? $destHeight : $nextHeight); } } - + $borderWidth = (int)(($destWidth - $nextWidth) / 2); $borderHeight = (int)(($destHeight - $nextHeight) / 2); - + // Build the image if ( !($destImage = imagecreatetruecolor($destWidth, $destHeight)) || @@ -839,7 +835,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage !imagecolortransparent($destImage, $white) ) throw new WebserviceException(sprintf('Unable to build the image "%s".', str_replace(_PS_ROOT_DIR_, '[SHOP_ROOT_DIR]', $newPath)), array(69, 500)); - + // Write it on disk $imaged = false; switch ($this->imgExtension) @@ -858,7 +854,7 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage imagedestroy($destImage); if (!$imaged) throw new WebserviceException(sprintf('Unable to write the image "%s".', str_replace(_PS_ROOT_DIR_, '[SHOP_ROOT_DIR]', $newPath)), array(70, 500)); - + // Write image declinations if present if ($imageTypes) { @@ -881,10 +877,10 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage } return $newPath; } - + /** * Write the posted image on disk - * + * * @param string $sreceptionPath * @param int $destWidth * @param int $destHeight @@ -918,14 +914,14 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage $mime_type = $file['type']; if (($pos = strpos($mime_type, ';')) !== false) $mime_type = substr($mime_type, 0, $pos); - + // Check mime content type if(!$mime_type || !in_array($mime_type, $this->acceptedImgMimeTypes)) throw new WebserviceException('This type of image format not recognized, allowed formats are: '.implode('", "', $this->acceptedImgMimeTypes), array(73, 400)); // Check error while uploading elseif ($file['error']) throw new WebserviceException('Error while uploading image. Please change your server\'s settings', array(74, 400)); - + // Try to copy image file to a temporary file if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($_FILES['image']['tmp_name'], $tmpName)) throw new WebserviceException('Error while copying image to the temporary directory', array(75, 400)); @@ -965,19 +961,19 @@ class WebserviceSpecificManagementImagesCore implements WebserviceSpecificManage if (!Validate::isLoadedObject($product)) throw new WebserviceException('Product '.(int)$this->wsObject->urlSegment[2].' doesn\'t exists', array(76, 400)); } - + // copy image if (!isset($file['tmp_name'])) return false; if ($error = checkImage($file, $this->imgMaxUploadSize)) throw new WebserviceException('Bad image : '.$error, array(76, 400)); - + if ($this->imageType == 'products') { $image = new Image($image->id); if (!(Configuration::get('PS_OLD_FILESYSTEM') && file_exists(_PS_PROD_IMG_DIR_.$product->id.'-'.$image->id.'.jpg'))) $image->createImgFolder(); - + if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)) throw new WebserviceException('An error occurred during the image upload', array(76, 400)); elseif (!imageResize($tmpName, _PS_PROD_IMG_DIR_.$image->getExistingImgPath().'.'.$image->image_format)) diff --git a/classes/webservice/WebserviceSpecificManagementInterface.php b/classes/webservice/WebserviceSpecificManagementInterface.php index 9c59b48dd..4d9b98468 100755 --- a/classes/webservice/WebserviceSpecificManagementInterface.php +++ b/classes/webservice/WebserviceSpecificManagementInterface.php @@ -1,6 +1,6 @@ objOutput = $obj; return $this; } - + public function setWsObject(WebserviceRequestCore $obj) { $this->wsObject = $obj; return $this; } - + public function getWsObject() { return $this->wsObject; @@ -59,36 +55,36 @@ class WebserviceSpecificManagementSearchCore implements WebserviceSpecificManage { return $this->objOutput; } - + public function setUrlSegment($segments) { $this->urlSegment = $segments; return $this; } - + public function getUrlSegment() { return $this->urlSegment; } - + /** * Management of search - * + * */ public function manage() { if (!isset($this->wsObject->urlFragments['query']) || !isset($this->wsObject->urlFragments['language'])) throw new WebserviceException('You have to set both the \'language\' and \'query\' parameters to get a result', array(100, 400)); $objects_products = array(); - $objects_categories = array(); + $objects_categories = array(); $objects_products['empty'] = new Product(); $objects_categories['empty'] = new Category(); - + $this->_resourceConfiguration = $objects_products['empty']->getWebserviceParameters(); - + if (!$this->wsObject->setFieldsToDisplay()) return false; - + $results = Search::find($this->wsObject->urlFragments['language'], $this->wsObject->urlFragments['query'], 1, 1, 'position', 'desc', true, false); $categories = array(); foreach ($results AS $result) @@ -109,13 +105,13 @@ class WebserviceSpecificManagementSearchCore implements WebserviceSpecificManage // $this->_resourceConfiguration = $objects_categories['empty']->getWebserviceParameters(); // if (!$this->setFieldsToDisplay()) // return false; - + $this->output .= $this->objOutput->getContent($objects_categories, null, $this->wsObject->fieldsToDisplay, $this->wsObject->depth, WebserviceOutputBuilder::VIEW_LIST, false); } - + /** * This must be return an array with specific values as WebserviceRequest expects. - * + * * @return array */ public function getContent() diff --git a/install-dev/index.php b/install-dev/index.php index 74cfae904..55fc7a66b 100644 --- a/install-dev/index.php +++ b/install-dev/index.php @@ -73,7 +73,7 @@ if (file_exists(INSTALL_PATH.'/../config/settings.inc.php')) { require_once(INSTALL_PATH.'/../config/settings.inc.php'); $oldversion =_PS_VERSION_; - + // fix : complete version number if there is not all 4 numbers // for example replace 1.4.3 by 1.4.3.0 // consequences : file 1.4.3.0.sql will be skipped if oldversion = 1.4.3 @@ -86,7 +86,7 @@ if (file_exists(INSTALL_PATH.'/../config/settings.inc.php')) $oldversion = implode('.', $arrayVersion); // end of fix - + $tooOld = (version_compare($oldversion, MINIMUM_VERSION_TO_UPDATE) == -1); $sameVersions = (version_compare($oldversion, INSTALL_VERSION) == 0); $installOfOldVersion = (version_compare($oldversion, INSTALL_VERSION) == 1); @@ -230,7 +230,7 @@ if ($lm->getIncludeTradFilename()) { $.ajax({ url: 'model.php?method=getVersionFromDb&language='+id_lang, - success: function (xml) + success: function (xml) { var action = $(xml).find('action'); if (action.attr('result') == 'ko') @@ -276,7 +276,7 @@ if ($lm->getIncludeTradFilename()) - +
PrestaShop '.lang('Installer'); ?>
PrestaShop '.lang('Updater'); ?>
@@ -306,7 +306,7 @@ if ($lm->getIncludeTradFilename())

- +
  • Etape 1
  • Etape 2
  • @@ -315,7 +315,7 @@ if ($lm->getIncludeTradFilename())
  • Etape 5
- +

@@ -381,7 +381,7 @@ if ($lm->getIncludeTradFilename())

14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You.

16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under Open Software License ("OSL") v. 3.0" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process.

- +

Modules and Themes: Academic Free License ("AFL") v. 3.0

This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work:

Licensed under the Academic Free License version 3.0

@@ -488,7 +488,7 @@ if ($lm->getIncludeTradFilename())
  • Etape 5
  • - +

    @@ -517,7 +517,7 @@ if ($lm->getIncludeTradFilename())

    - +

    @@ -537,7 +537,7 @@ if ($lm->getIncludeTradFilename())

    - +

    @@ -579,7 +579,7 @@ if ($lm->getIncludeTradFilename())

    -   +  

    @@ -664,7 +664,7 @@ if ($lm->getIncludeTradFilename())

    - + @@ -725,7 +725,7 @@ if ($lm->getIncludeTradFilename())
    - +

    @@ -757,7 +757,7 @@ if ($lm->getIncludeTradFilename()) $("select#infosTimezone").val(timezone); } }); - + autoCheckField("#infosCountry", "#resultInfosCountry", "required"); autoCheckField("#infosTimezone", "#resultInfosTimezone", "required"); }); @@ -797,7 +797,7 @@ if ($lm->getIncludeTradFilename()) foreach ($p->prechecked AS $country_iso_code) $modulesPrechecked[trim($p->key)][trim($country_iso_code)] = 1; } - + if (sizeof($modulesHelpInstall)) { echo ' @@ -946,7 +946,7 @@ if ($lm->getIncludeTradFilename()) - + @@ -957,10 +957,10 @@ if ($lm->getIncludeTradFilename())
    - +

    - +
    • Etape 1 ok
    • Etape 2 ok
    • @@ -994,7 +994,7 @@ if ($lm->getIncludeTradFilename())

      - +

      @@ -1007,7 +1007,7 @@ if ($lm->getIncludeTradFilename())

      - +
    getIncludeTradFilename())

    - +
    • Etape 1
    • Etape 2
    • @@ -1054,7 +1054,7 @@ if ($lm->getIncludeTradFilename()) url: 'xml/getNonNativeModules.php', async: true, dataType: "json", - success: function (json) + success: function (json) { if (json.length == 0) $('#nonNativeModules').hide(); @@ -1073,7 +1073,7 @@ if ($lm->getIncludeTradFilename()) }); }); - +

      @@ -1083,13 +1083,13 @@ if ($lm->getIncludeTradFilename())
        - +
      getIncludeTradFilename())
    • Etape 4
    - +

    - +


    @@ -1330,7 +1330,7 @@ if ($lm->getIncludeTradFilename())
    - +

    diff --git a/install-dev/php/alter_productcomments_guest_index.php b/install-dev/php/alter_productcomments_guest_index.php index 49babefc4..56324547b 100644 --- a/install-dev/php/alter_productcomments_guest_index.php +++ b/install-dev/php/alter_productcomments_guest_index.php @@ -33,7 +33,7 @@ function alter_productcomments_guest_index() return; DB::getInstance()->Execute(' - ALTER TABLE `'._DB_PREFIX_.'product_comment` DROP INDEX `id_guest`, - ADD INDEX `id_guest` USING BTREE(`id_guest`);'); + ALTER TABLE `'._DB_PREFIX_.'product_comment` + DROP INDEX `id_guest`, ADD INDEX `id_guest` (`id_guest`);'); } diff --git a/install-dev/sql/upgrade/1.4.0.2.sql b/install-dev/sql/upgrade/1.4.0.2.sql index 7a5b378ca..b3f9ab89f 100644 --- a/install-dev/sql/upgrade/1.4.0.2.sql +++ b/install-dev/sql/upgrade/1.4.0.2.sql @@ -587,9 +587,9 @@ INSERT INTO `PREFIX_meta_lang` (`id_lang`, `id_meta`, `title`, `url_rewrite`) VA (3, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'order'), 'Carrito', 'carrito'); INSERT INTO `PREFIX_meta` (`page`) VALUES ('search'); INSERT INTO `PREFIX_meta_lang` (`id_lang`, `id_meta`, `title`, `url_rewrite`) VALUES -(1, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'search'), 'Search', 'search'), -(2, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'search'), 'Recherche', 'recherche'), -(3, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'search'), 'Buscar', 'buscar'); +(1, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'search' LIMIT 1), 'Search', 'search'), +(2, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'search' LIMIT 1), 'Recherche', 'recherche'), +(3, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'search' LIMIT 1), 'Buscar', 'buscar'); INSERT INTO `PREFIX_meta` (`page`) VALUES ('stores'); INSERT INTO `PREFIX_meta_lang` (`id_lang`, `id_meta`, `title`, `url_rewrite`) VALUES (1, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'stores'), 'Stores', 'stores'), diff --git a/install-dev/sql/upgrade/1.4.5.0.sql b/install-dev/sql/upgrade/1.4.5.0.sql index f04ec63dd..87077c1c0 100644 --- a/install-dev/sql/upgrade/1.4.5.0.sql +++ b/install-dev/sql/upgrade/1.4.5.0.sql @@ -48,3 +48,8 @@ UPDATE `PREFIX_lang` SET `date_format_lite` = 'd.m.Y' WHERE `iso_code` = 'de'; UPDATE `PREFIX_lang` SET `date_format_full` = 'd.m.Y H:i:s' WHERE `iso_code` = 'de'; UPDATE `PREFIX_lang` SET `date_format_lite` = 'm/d/Y' WHERE `iso_code` = 'en'; UPDATE `PREFIX_lang` SET `date_format_full` = 'm/d/Y H:i:s' WHERE `iso_code` = 'en'; + +ALTER IGNORE TABLE `PREFIX_specific_price_priority` ADD UNIQUE ( +`id_product` +); + diff --git a/localization/it.xml b/localization/it.xml index bc9efde6a..ee12c9e07 100644 --- a/localization/it.xml +++ b/localization/it.xml @@ -7,11 +7,11 @@ - + - + @@ -280,4 +280,4 @@ - + \ No newline at end of file diff --git a/modules/autoupgrade/AdminSelfUpgrade.php b/modules/autoupgrade/AdminSelfUpgrade.php index 864ac149e..0ecc1b055 100644 --- a/modules/autoupgrade/AdminSelfUpgrade.php +++ b/modules/autoupgrade/AdminSelfUpgrade.php @@ -269,6 +269,7 @@ class AdminSelfUpgrade extends AdminSelfTab { $allowed = (ConfigurationTest::test_fopen() && $this->rootWritable); $allowed &= !Configuration::get('PS_SHOP_ENABLE'); + $allowed &= $this->upgrader->autoupgrade; $allowed &= (Configuration::get('PS_AUTOUP_KEEP_TRAD') !== false); return $allowed; diff --git a/modules/blocklayered/blocklayered.js b/modules/blocklayered/blocklayered.js index a1a19009c..96dd01fb5 100644 --- a/modules/blocklayered/blocklayered.js +++ b/modules/blocklayered/blocklayered.js @@ -284,6 +284,7 @@ function reloadContent(params_plus) reloadContent(); return false; }); + if (typeof(ajaxCart) != "undefined") ajaxCart.overrideButtonsInThePage(); if (typeof(reloadProductComparison) == 'function') diff --git a/modules/blocklayered/blocklayered.php b/modules/blocklayered/blocklayered.php index 49177ec6d..94c78460b 100644 --- a/modules/blocklayered/blocklayered.php +++ b/modules/blocklayered/blocklayered.php @@ -95,8 +95,8 @@ class BlockLayered extends Module Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_friendly_url'); Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_attribute_group'); Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_feature'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_attribute_group_lang'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_feature_lang'); + Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value'); + Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_feature_lang_value'); Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_category'); Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_filter'); Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_product_attribute'); @@ -143,9 +143,9 @@ class BlockLayered extends Module INSERT INTO `'._DB_PREFIX_.'layered_indexable_attribute_group` SELECT id_attribute_group, 1 FROM `'._DB_PREFIX_.'attribute_group`'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_attribute_group_lang`'); + Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_attribute_group_lang_value`'); Db::getInstance()->Execute(' - CREATE TABLE `'._DB_PREFIX_.'layered_indexable_attribute_group_lang` ( + CREATE TABLE `'._DB_PREFIX_.'layered_indexable_attribute_group_lang_value` ( `id_attribute_group` INT NOT NULL, `id_lang` INT NOT NULL, `url_name` VARCHAR(20), @@ -153,9 +153,9 @@ class BlockLayered extends Module PRIMARY KEY (`id_attribute_group`, `id_lang`)) ENGINE = '._MYSQL_ENGINE_); // Attributes - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_attribute_lang`'); + Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_attribute_lang_value`'); Db::getInstance()->Execute(' - CREATE TABLE `'._DB_PREFIX_.'layered_indexable_attribute_lang` ( + CREATE TABLE `'._DB_PREFIX_.'layered_indexable_attribute_lang_value` ( `id_attribute` INT NOT NULL, `id_lang` INT NOT NULL, `url_name` VARCHAR(20), @@ -175,9 +175,9 @@ class BlockLayered extends Module INSERT INTO `'._DB_PREFIX_.'layered_indexable_feature` SELECT id_feature, 1 FROM `'._DB_PREFIX_.'feature`'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_feature_lang`'); + Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_feature_lang_value`'); Db::getInstance()->Execute(' - CREATE TABLE `'._DB_PREFIX_.'layered_indexable_feature_lang` ( + CREATE TABLE `'._DB_PREFIX_.'layered_indexable_feature_lang_value` ( `id_feature` INT NOT NULL, `id_lang` INT NOT NULL, `url_name` VARCHAR(20) NOT NULL, @@ -185,9 +185,9 @@ class BlockLayered extends Module PRIMARY KEY (`id_feature`, `id_lang`)) ENGINE = '._MYSQL_ENGINE_); // Features values - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_feature_value_lang`'); + Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_feature_value_lang_value`'); Db::getInstance()->Execute(' - CREATE TABLE `'._DB_PREFIX_.'layered_indexable_feature_value_lang` ( + CREATE TABLE `'._DB_PREFIX_.'layered_indexable_feature_value_lang_value` ( `id_feature_value` INT NOT NULL, `id_lang` INT NOT NULL, `url_name` VARCHAR(20), @@ -261,9 +261,9 @@ class BlockLayered extends Module INNER JOIN '._DB_PREFIX_.'attribute a ON (a.id_attribute_group = ag.id_attribute_group) INNER JOIN '._DB_PREFIX_.'attribute_lang al ON (al.id_attribute = a.id_attribute) LEFT JOIN '._DB_PREFIX_.'layered_indexable_attribute_group liag ON (liag.id_attribute_group = a.id_attribute_group) - LEFT JOIN '._DB_PREFIX_.'layered_indexable_attribute_group_lang liagl + LEFT JOIN '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value liagl ON (liagl.id_attribute_group = ag.id_attribute_group AND liagl.id_lang = '.(int)$filter['id_lang'].') - LEFT JOIN '._DB_PREFIX_.'layered_indexable_attribute_lang lial + LEFT JOIN '._DB_PREFIX_.'layered_indexable_attribute_lang_value lial ON (lial.id_attribute = a.id_attribute AND lial.id_lang = '.(int)$filter['id_lang'].') WHERE a.id_attribute_group = '.(int)$filter['id_value'].' AND agl.id_lang = al.id_lang AND agl.id_lang = '.(int)$filter['id_lang']); foreach ($attributes as $attribute) @@ -291,9 +291,9 @@ class BlockLayered extends Module LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature lif ON (lif.id_feature = fl.id_feature) INNER JOIN '._DB_PREFIX_.'feature_value fv ON (fv.id_feature = fl.id_feature) INNER JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = fv.id_feature_value) - LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature_lang lifl + LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature_lang_value lifl ON (lifl.id_feature = fl.id_feature AND lifl.id_lang = '.(int)$filter['id_lang'].') - LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature_value_lang lifvl + LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature_value_lang_value lifvl ON (lifvl.id_feature_value = fvl.id_feature_value AND lifvl.id_lang = '.(int)$filter['id_lang'].') WHERE fl.id_feature = '.(int)$filter['id_value'].' AND fvl.id_lang = fl.id_lang AND fvl.id_lang = '.(int)$filter['id_lang']); foreach ($features as $feature) @@ -477,13 +477,13 @@ class BlockLayered extends Module Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature WHERE id_feature = '.(int)$params['id_feature']); Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_feature VALUES ('.(int)$params['id_feature'].', '.(int)Tools::getValue('layered_indexable').')'); - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_lang WHERE id_feature = '.(int)$params['id_feature']); // don't care about the id_lang + Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_lang_value WHERE id_feature = '.(int)$params['id_feature']); // don't care about the id_lang foreach (Language::getLanguages(false) as $language) { // Data are validated by method "hookPostProcessFeature" $id_lang = (int)$language['id_lang']; - Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_feature_lang - VALUES ('.(int)$params['id_feature'].', '.$id_lang.', \''.Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang)).'\', + Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_feature_lang_value + VALUES ('.(int)$params['id_feature'].', '.$id_lang.', \''.pSQL(Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang))).'\', \''.pSQL(Tools::safeOutput(Tools::getValue('meta_title_'.$id_lang), true)).'\')'); } } @@ -493,13 +493,13 @@ class BlockLayered extends Module if (!$params['id_feature_value']) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang WHERE id_feature_value = '.(int)$params['id_feature_value']); // don't care about the id_lang + Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang_value WHERE id_feature_value = '.(int)$params['id_feature_value']); // don't care about the id_lang foreach (Language::getLanguages(false) as $language) { // Data are validated by method "hookPostProcessFeatureValue" $id_lang = (int)$language['id_lang']; - Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_feature_value_lang - VALUES ('.(int)$params['id_feature_value'].', '.$id_lang.', \''.Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang)).'\', + Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_feature_value_lang_value + VALUES ('.(int)$params['id_feature_value'].', '.$id_lang.', \''.pSQL(Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang))).'\', \''.pSQL(Tools::safeOutput(Tools::getValue('meta_title_'.$id_lang), true)).'\')'); } } @@ -508,7 +508,7 @@ class BlockLayered extends Module { if (!$params['id_feature_value']) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang WHERE id_feature_value = '.(int)$params['id_feature_value']); + Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang_value WHERE id_feature_value = '.(int)$params['id_feature_value']); } public function hookPostProcessFeatureValue($params) @@ -523,7 +523,7 @@ class BlockLayered extends Module $langValue = array(); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS( - 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang + 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang_value WHERE id_feature_value = '.(int)$params['id_feature_value']); if ($result) foreach ($result as $data) @@ -565,13 +565,13 @@ class BlockLayered extends Module if (!$params['id_attribute']) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_lang WHERE id_attribute = '.(int)$params['id_attribute']); // don't care about the id_lang + Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_lang_value WHERE id_attribute = '.(int)$params['id_attribute']); // don't care about the id_lang foreach (Language::getLanguages(false) as $language) { // Data are validated by method "hookPostProcessAttribute" $id_lang = (int)$language['id_lang']; - Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_attribute_lang - VALUES ('.(int)$params['id_attribute'].', '.$id_lang.', \''.Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang)).'\', + Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_attribute_lang_value + VALUES ('.(int)$params['id_attribute'].', '.$id_lang.', \''.pSQL(Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang))).'\', \''.pSQL(Tools::safeOutput(Tools::getValue('meta_title_'.$id_lang), true)).'\')'); } } @@ -580,7 +580,7 @@ class BlockLayered extends Module { if (!$params['id_attribute']) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_lang WHERE id_attribute = '.(int)$params['id_attribute']); + Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_lang_value WHERE id_attribute = '.(int)$params['id_attribute']); } public function hookPostProcessAttribute($params) @@ -595,7 +595,7 @@ class BlockLayered extends Module $langValue = array(); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS( - 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_attribute_lang + 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_attribute_lang_value WHERE id_attribute = '.(int)$params['id_attribute']); if ($result) foreach ($result as $data) @@ -652,13 +652,13 @@ class BlockLayered extends Module Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group WHERE id_attribute_group = '.(int)$params['id_attribute_group']); Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_attribute_group VALUES ('.(int)$params['id_attribute_group'].', '.(int)Tools::getValue('layered_indexable').')'); - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group_lang WHERE id_attribute_group = '.(int)$params['id_attribute_group']); // don't care about the id_lang + Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value WHERE id_attribute_group = '.(int)$params['id_attribute_group']); // don't care about the id_lang foreach (Language::getLanguages(false) as $language) { // Data are validated by method "hookPostProcessAttributeGroup" $id_lang = (int)$language['id_lang']; - Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_attribute_group_lang - VALUES ('.(int)$params['id_attribute_group'].', '.$id_lang.', \''.Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang)).'\', + Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value + VALUES ('.(int)$params['id_attribute_group'].', '.$id_lang.', \''.pSQL(Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang))).'\', \''.pSQL(Tools::safeOutput(Tools::getValue('meta_title_'.$id_lang), true)).'\')'); } } @@ -690,7 +690,7 @@ class BlockLayered extends Module return; Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group WHERE id_attribute_group = '.(int)$params['id_attribute_group']); - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group_lang WHERE id_attribute_group = '.(int)$params['id_attribute_group']); + Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value WHERE id_attribute_group = '.(int)$params['id_attribute_group']); } public function hookAttributeGroupForm($params) @@ -702,7 +702,7 @@ class BlockLayered extends Module $langValue = array(); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS( - 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_attribute_group_lang + 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value WHERE id_attribute_group = '.(int)$params['id_attribute_group']); if ($result) foreach ($result as $data) @@ -761,7 +761,7 @@ class BlockLayered extends Module $langValue = array(); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS( - 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_feature_lang + 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_feature_lang_value WHERE id_feature = '.(int)$params['id_feature']); if ($result) foreach ($result as $data) @@ -2084,9 +2084,9 @@ class BlockLayered extends Module AND agl.id_lang = '.(int)$cookie->id_lang.' LEFT JOIN '._DB_PREFIX_.'category_product cp ON (cp.id_product = p.id_product) INNER JOIN '._DB_PREFIX_.'category c ON (c.id_category = cp.id_category AND c.nleft >= '.(int)$parent->nleft.' AND c.nright <= '.(int)$parent->nright.') - LEFT JOIN '._DB_PREFIX_.'layered_indexable_attribute_group_lang liagl + LEFT JOIN '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value liagl ON (liagl.id_attribute_group = lpa.id_attribute_group AND liagl.id_lang = '.(int)$cookie->id_lang.') - LEFT JOIN '._DB_PREFIX_.'layered_indexable_attribute_lang lial + LEFT JOIN '._DB_PREFIX_.'layered_indexable_attribute_lang_value lial ON (lial.id_attribute = lpa.id_attribute AND lial.id_lang = '.(int)$cookie->id_lang.') '; $sqlQuery['where'] = 'WHERE a.id_attribute_group = '.(int)$filter['id_value'].' '; $sqlQuery['group'] = ' @@ -2107,9 +2107,9 @@ class BlockLayered extends Module LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = fp.id_feature AND fl.id_lang = '.(int)$cookie->id_lang.') INNER JOIN '._DB_PREFIX_.'feature_value fv ON (fv.id_feature_value = fp.id_feature_value AND (fv.custom IS NULL OR fv.custom = 0)) LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = fp.id_feature_value AND fvl.id_lang = '.(int)$cookie->id_lang.') - LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature_lang lifl + LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature_lang_value lifl ON (lifl.id_feature = fp.id_feature AND lifl.id_lang = '.(int)$cookie->id_lang.') - LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature_value_lang lifvl + LEFT JOIN '._DB_PREFIX_.'layered_indexable_feature_value_lang_value lifvl ON (lifvl.id_feature_value = fp.id_feature_value AND lifvl.id_lang = '.(int)$cookie->id_lang.') '; $sqlQuery['where'] = 'WHERE p.`active` = 1 AND fp.id_feature = '.(int)$filter['id_value'].' '; $sqlQuery['group'] = 'GROUP BY fv.id_feature_value '; @@ -2244,6 +2244,7 @@ class BlockLayered extends Module $conditionArray[$key]['checked'] = true; if (isset($products) && $products) foreach ($products as $product) + if(isset($conditionArray[$product['condition']])) $conditionArray[$product['condition']]['nbr']++; $filterBlocks[] = array('type_lite' => 'condition', 'type' => 'condition', 'id_key' => 0, 'name' => $this->l('Condition'), 'values' => $conditionArray); break; diff --git a/modules/canadapost/canadapost.php b/modules/canadapost/canadapost.php index 3d1f6d2e3..755a68fc1 100755 --- a/modules/canadapost/canadapost.php +++ b/modules/canadapost/canadapost.php @@ -53,7 +53,7 @@ class CanadaPost extends CarrierModule { $this->name = 'canadapost'; $this->tab = 'shipping_logistics'; - $this->version = '0.1'; + $this->version = '0.5'; $this->author = 'PrestaShop'; $this->limited_countries = array('ca'); @@ -1390,6 +1390,14 @@ class CanadaPost extends CarrierModule { // Init var $address = new Address($params->id_address_delivery); + if (!Validate::isLoadedObject($address)) + { + // If address is not loaded, we take data from shipping estimator module (if installed) + global $cookie; + $address->id_country = $cookie->id_country; + $address->id_state = $cookie->id_state; + $address->postcode = $cookie->postcode; + } $recipient_country = Db::getInstance()->getRow('SELECT `iso_code` FROM `'._DB_PREFIX_.'country` WHERE `id_country` = '.(int)($address->id_country)); $recipient_state = Db::getInstance()->getRow('SELECT `iso_code` FROM `'._DB_PREFIX_.'state` WHERE `id_state` = '.(int)($address->id_state)); $shipper_country = Db::getInstance()->getRow('SELECT `iso_code` FROM `'._DB_PREFIX_.'country` WHERE `id_country` = '.(int)(Configuration::get('CP_CARRIER_COUNTRY'))); diff --git a/modules/canadapost/config.xml b/modules/canadapost/config.xml index 391ac0b9d..9338f30b3 100755 --- a/modules/canadapost/config.xml +++ b/modules/canadapost/config.xml @@ -2,7 +2,7 @@ canadapost - + diff --git a/modules/carriercompare/ajax.php b/modules/carriercompare/ajax.php index 9119c2dbf..daff85759 100644 --- a/modules/carriercompare/ajax.php +++ b/modules/carriercompare/ajax.php @@ -39,7 +39,7 @@ switch (Tools::getValue('method')) die(Tools::jsonEncode($carrierCompare->getStatesByIdCountry((int)Tools::getValue('id_country')))); break; case 'getCarriers': - die(Tools::jsonEncode($carrierCompare->getCarriersListByIdZone((int)Tools::getValue('id_country'), (int)Tools::getValue('id_state', 0)))); + die(Tools::jsonEncode($carrierCompare->getCarriersListByIdZone((int)Tools::getValue('id_country'), (int)Tools::getValue('id_state', 0), Tools::safeOutput(Tools::getValue('zipcode', 0))))); break; case 'saveSelection': $errors = $carrierCompare->saveSelection((int)Tools::getValue('id_country'), (int)Tools::getValue('id_state', 0), Tools::getValue('zipcode', 0), (int)Tools::getValue('id_carrier', 0)); diff --git a/modules/carriercompare/carriercompare.js b/modules/carriercompare/carriercompare.js index f04611d92..efa41a89a 100644 --- a/modules/carriercompare/carriercompare.js +++ b/modules/carriercompare/carriercompare.js @@ -51,7 +51,7 @@ function updateCarriersList() $.ajax({ type: 'POST', url: baseDir + 'modules/carriercompare/ajax.php', - data: 'method=getCarriers&id_country=' + $('#id_country').val()+'&id_state=' + $('#id_state').val(), + data: 'method=getCarriers&id_country=' + $('#id_country').val() + '&id_state=' + $('#id_state').val() + '&zipcode=' + $('#zipcode').val(), dataType: 'json', success: function(json) { $('#carriers_list').children().remove(); @@ -135,4 +135,4 @@ $(document).ready(function() { }); updateStateByIdCountry(); updateCarriersList(); -}); \ No newline at end of file +}); diff --git a/modules/carriercompare/carriercompare.php b/modules/carriercompare/carriercompare.php index ab5e4b638..c682e132f 100755 --- a/modules/carriercompare/carriercompare.php +++ b/modules/carriercompare/carriercompare.php @@ -34,7 +34,7 @@ class CarrierCompare extends Module { $this->name = 'carriercompare'; $this->tab = 'shipping_logistics'; - $this->version = '1.0'; + $this->version = '1.1'; $this->author = 'PrestaShop'; $this->need_instance = 0; @@ -96,8 +96,15 @@ class CarrierCompare extends Module /* ** Get carriers by country id, called by the ajax process */ - public function getCarriersListByIdZone($id_country, $id_state = 0) + public function getCarriersListByIdZone($id_country, $id_state = 0, $zipcode = 0) { + // cookie saving/updating + $this->context->cookie->id_country = $id_country; + if ($id_state != 0) + $this->context->cookie->id_state = $id_state; + if ($zipcode != 0) + $this->context->cookie->postcode = $zipcode; + $id_zone = 0; if ($id_state != 0) $id_zone = State::getIdZone($id_state); @@ -106,7 +113,7 @@ class CarrierCompare extends Module $carriers = Carrier::getCarriersForOrder((int)$id_zone); - return (sizeof($carriers) ? $carriers : array()); + return (count($carriers) ? $carriers : array()); } public function saveSelection($id_country, $id_state, $zipcode, $id_carrier) @@ -128,7 +135,7 @@ class CarrierCompare extends Module return $errors; $ids_carrier = array(); - foreach (self::getCarriersListByIdZone($id_country, $id_state) as $carrier) + foreach (self::getCarriersListByIdZone($id_country, $id_state, $zipcode) as $carrier) $ids_carrier[] = $carrier['id_carrier']; if (!in_array($id_carrier, $ids_carrier)) $errors[] = $this->l('This carrier ID isn\'t available for your selection'); diff --git a/modules/carriercompare/carriercompare.tpl b/modules/carriercompare/carriercompare.tpl index 696153790..61b67ffa4 100644 --- a/modules/carriercompare/carriercompare.tpl +++ b/modules/carriercompare/carriercompare.tpl @@ -67,7 +67,7 @@

    - + ({l s='Needed for certain carriers' mod='carriercompare'})

    -
    +