diff --git a/admin-dev/themes/default/css/admin.css b/admin-dev/themes/default/css/admin.css index b62cd34b2..a40b7e237 100644 --- a/admin-dev/themes/default/css/admin.css +++ b/admin-dev/themes/default/css/admin.css @@ -30,6 +30,7 @@ select[disabled="disabled"], input[disabled="disabled"],textarea[disabled="disab /*BUTTON*/ .button{ + cursor: pointer; background: #e3e3e3 url('../img/bg-button-degrade.png') repeat-x scroll left top; background: -moz-linear-gradient(center top , #F9F9F9, #E3E3E3) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, center top ,center bottom, from(#F9F9F9), to(#E3E3E3)) repeat scroll 0 0 transparent; @@ -673,4 +674,4 @@ ul.listForm li {padding-bottom:3px;} /************** SCENE *****************/ -#large_scene_image{clear:both;border:1px solid transparent;} \ No newline at end of file +#large_scene_image{clear:both;border:1px solid transparent;} diff --git a/admin-dev/themes/default/template/controllers/home/content.tpl b/admin-dev/themes/default/template/controllers/home/content.tpl index 35740fa6e..5665b0693 100644 --- a/admin-dev/themes/default/template/controllers/home/content.tpl +++ b/admin-dev/themes/default/template/controllers/home/content.tpl @@ -110,14 +110,14 @@ $(document).ready(function() {
-

+

{l s='Loading...'}

{$tips_optimization} -

{l s='Loading...'}

+

{l s='Loading...'}

{hook h="displayAdminHomeInfos"} {hook h="displayBackOfficeHome"} {*old name of the hook*} @@ -212,7 +212,7 @@ $(document).ready(function() { { // don't show/hide screencast if it's deactivated {if $employee->bo_show_screencast} - $('#adminpresentation').fadeOut('slow'); + $('#adminpresentation').fadeOut('slow'); {/if} $('#partner_preactivation').fadeOut('slow'); $('#discover_prestashop').fadeOut('slow'); diff --git a/admin-dev/themes/default/template/controllers/localization/content.tpl b/admin-dev/themes/default/template/controllers/localization/content.tpl index 3fefc850d..4515293f5 100644 --- a/admin-dev/themes/default/template/controllers/localization/content.tpl +++ b/admin-dev/themes/default/template/controllers/localization/content.tpl @@ -24,9 +24,9 @@ *}
- {$localization_form} + {if isset($localization_form)}{$localization_form}{/if}

- {$localization_options} + {if isset($localization_options)}{$localization_options}{/if}
\ No newline at end of file diff --git a/admin-dev/themes/default/template/controllers/stores/helpers/options/options.tpl b/admin-dev/themes/default/template/controllers/stores/helpers/options/options.tpl index 5fc5f3b05..bac61db89 100644 --- a/admin-dev/themes/default/template/controllers/stores/helpers/options/options.tpl +++ b/admin-dev/themes/default/template/controllers/stores/helpers/options/options.tpl @@ -30,9 +30,9 @@ function ajaxStoreStates(id_state_selected) { $.ajax({ - url: "ajax.php", + url: "index.php", cache: false, - data: "ajaxStates=1&id_country="+$('#PS_SHOP_COUNTRY_ID').val() + "&id_state=" + $('#PS_SHOP_STATE_ID').val(), + data: "ajax=1&tab=AdminStates&token={getAdminToken tab='AdminStates'}&action=states&id_country="+$('#PS_SHOP_COUNTRY_ID').val() + "&id_state=" + $('#PS_SHOP_STATE_ID').val(), success: function(html) { if (html == 'false') diff --git a/admin-dev/themes/default/template/controllers/tax_rules/helpers/form/form.tpl b/admin-dev/themes/default/template/controllers/tax_rules/helpers/form/form.tpl index 9d925f503..a200c2207 100644 --- a/admin-dev/themes/default/template/controllers/tax_rules/helpers/form/form.tpl +++ b/admin-dev/themes/default/template/controllers/tax_rules/helpers/form/form.tpl @@ -62,7 +62,7 @@ $.ajax({ url: "index.php", cache: false, - data: "ajax=1&tab=AdminTaxRulesGroup&token={getAdminToken tab='AdminStates'}&action=states&id_country="+id_country+"&id_state="+id_state+"&empty_value={l s='All'}", + data: "ajax=1&tab=AdminStates&token={getAdminToken tab='AdminStates'}&action=states&id_country="+id_country+"&id_state="+id_state+"&empty_value={l s='All'}", success: function(html){ if (html == "false") { diff --git a/classes/Autoload.php b/classes/Autoload.php index 11436fda4..585ad858e 100644 --- a/classes/Autoload.php +++ b/classes/Autoload.php @@ -139,7 +139,7 @@ class Autoload $filename_tmp = tempnam(dirname($filename), basename($filename.'.')); if($filename_tmp !== FALSE and file_put_contents($filename_tmp, $content, LOCK_EX) !== FALSE) { - rename($filename_tmp, $filename); + @rename($filename_tmp, $filename); @chmod($filename, 0664); } else diff --git a/classes/CartRule.php b/classes/CartRule.php index 778865855..10ab17616 100644 --- a/classes/CartRule.php +++ b/classes/CartRule.php @@ -464,7 +464,7 @@ class CartRuleCore extends ObjectModel // Check if the products chosen by the customer are usable with the cart rule if ($this->product_restriction) { - $r = $this->checkProductRestrictions($context, false, $display_error); + $r = $this->checkProductRestrictions($context, false, $display_error, $alreadyInCart); if ($r !== false && $display_error) return $r; elseif (!$r && !$display_error) @@ -523,6 +523,7 @@ class CartRuleCore extends ObjectModel return (!$display_error) ? false : Tools::displayError('This voucher is already in your cart'); if ($otherCartRule['gift_product']) --$nb_products; + if ($this->cart_rule_restriction && $otherCartRule['cart_rule_restriction'] && $otherCartRule['id_cart_rule'] != $this->id) { $combinable = Db::getInstance()->getValue(' @@ -550,7 +551,7 @@ class CartRuleCore extends ObjectModel return true; } - protected function checkProductRestrictions(Context $context, $return_products = false, $display_error = true) + protected function checkProductRestrictions(Context $context, $return_products = false, $display_error = true, $alreadyInCart = false) { $selectedProducts = array(); @@ -585,6 +586,8 @@ class CartRuleCore extends ObjectModel if (in_array($cartAttribute['id_attribute'], $productRule['values'])) { $countMatchingProducts += $cartAttribute['quantity']; + if ($alreadyInCart && $this->gift_product == $cartProduct['id_product']&& $this->gift_product_attribute == $cartProduct['id_product_attribute']) + --$countMatchingProducts; $matchingProductsList[] = $cartAttribute['id_product'].'-'.$cartAttribute['id_product_attribute']; } if ($countMatchingProducts < $productRuleGroup['quantity']) @@ -603,6 +606,8 @@ class CartRuleCore extends ObjectModel if (in_array($cartProduct['id_product'], $productRule['values'])) { $countMatchingProducts += $cartProduct['quantity']; + if ($alreadyInCart && $this->gift_product == $cartProduct['id_product']) + --$countMatchingProducts; $matchingProductsList[] = $cartProduct['id_product'].'-0'; } if ($countMatchingProducts < $productRuleGroup['quantity']) diff --git a/classes/Image.php b/classes/Image.php index f2b749bf1..a7ce28b2f 100644 --- a/classes/Image.php +++ b/classes/Image.php @@ -120,16 +120,22 @@ class ImageCore extends ObjectModel * * @param integer $id_lang Language ID * @param integer $id_product Product ID + * @param integer $id_product_attribute Product Attribute ID * @return array Images */ - public static function getImages($id_lang, $id_product) + public static function getImages($id_lang, $id_product, $id_product_attribute = NULL) { - return Db::getInstance()->executeS(' - SELECT * - FROM `'._DB_PREFIX_.'image` i - LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image`) - WHERE i.`id_product` = '.(int)$id_product.' AND il.`id_lang` = '.(int)$id_lang.' - ORDER BY i.`position` ASC'); + $attribute_filter = ($id_product_attribute ? ' AND ai.`id_product_attribute` = '.(int)$id_product_attribute : ''); + $sql = 'SELECT * + FROM `'._DB_PREFIX_.'image` i + LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image`)'; + + if ($id_product_attribute) + $sql .= ' LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` ai ON (i.`id_image` = ai.`id_image`)'; + + $sql .= ' WHERE i.`id_product` = '.(int)$id_product.' AND il.`id_lang` = '.(int)$id_lang . $attribute_filter.' + ORDER BY i.`position` ASC'; + return Db::getInstance()->executeS($sql); } /** @@ -644,7 +650,7 @@ class ImageCore extends ObjectModel */ public static function testFileSystem() { - $safe_mode = ini_get('safe_mode'); + $safe_mode = Tools::getSafeModeStatus(); if ($safe_mode) return false; $folder1 = _PS_PROD_IMG_DIR_.'testfilesystem/'; diff --git a/classes/Language.php b/classes/Language.php index 724cbbb9b..8aa65596d 100644 --- a/classes/Language.php +++ b/classes/Language.php @@ -111,18 +111,22 @@ class LanguageCore extends ObjectModel $iso_code = $newIso ? $newIso : $this->iso_code; if (!file_exists(_PS_TRANSLATIONS_DIR_.$iso_code)) - mkdir(_PS_TRANSLATIONS_DIR_.$iso_code); + { + if (@mkdir(_PS_TRANSLATIONS_DIR_.$iso_code)) + @chmod(_PS_TRANSLATIONS_DIR_.$iso_code, 0777); + } + foreach ($this->translationsFilesAndVars as $file => $var) { $path_file = _PS_TRANSLATIONS_DIR_.$iso_code.'/'.$file.'.php'; if (!file_exists($path_file)) if ($file != 'tabs') - file_put_contents($path_file, ''); else - file_put_contents($path_file, ''); @@ -460,7 +464,8 @@ class LanguageCore extends ObjectModel } closedir($handle); } - rmdir($dir); + if (is_writable($dir)) + rmdir($dir); } public function delete() @@ -783,13 +788,22 @@ class LanguageCore extends ObjectModel $lang_pack_ok = false; $errors = array(); $file = _PS_TRANSLATIONS_DIR_.$iso.'.gzip'; + if (!$lang_pack_link = Tools::file_get_contents('http://www.prestashop.com/download/lang_packs/get_language_pack.php?version='.$version.'&iso_lang='.Tools::strtolower($iso))) $errors[] = Tools::displayError('Archive cannot be downloaded from prestashop.com.'); elseif (!$lang_pack = Tools::jsonDecode($lang_pack_link)) $errors[] = Tools::displayError('Error occurred when language was checked according to your Prestashop version.'); elseif ($content = Tools::file_get_contents('http://translations.prestashop.com/download/lang_packs/gzip/'.$lang_pack->version.'/'.Tools::strtolower($lang_pack->iso_code.'.gzip'))) if (!@file_put_contents($file, $content)) - $errors[] = Tools::displayError('Server does not have permissions for writing.'); + { + if (is_writable(dirname($file))) + { + @unlink($file); + @file_put_contents($file, $content); + } + elseif (!is_writable($file)) + $errors[] = Tools::displayError('Server does not have permissions for writing.').' ('.$file.')'; + } if (file_exists($file)) { $gz = new Archive_Tar($file, true); diff --git a/classes/Logger.php b/classes/Logger.php index 0bc46bf16..ff7fb994d 100644 --- a/classes/Logger.php +++ b/classes/Logger.php @@ -149,6 +149,11 @@ class LoggerCore extends ObjectModel return $this->hash; } + + public static function eraseAllLogs() + { + return Db::getInstance()->execute('TRUNCATE TABLE '._DB_PREFIX_.'log'); + } /** * check if this log message already exists in database. diff --git a/classes/Manufacturer.php b/classes/Manufacturer.php index 8cc573bad..c40fa01c8 100644 --- a/classes/Manufacturer.php +++ b/classes/Manufacturer.php @@ -79,7 +79,7 @@ class ManufacturerCore extends ObjectModel // Lang fields 'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), - 'short_description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml', 'size' => 254), + 'short_description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), 'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128), 'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), 'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName'), diff --git a/classes/Product.php b/classes/Product.php index 74e65ee20..188ce4a05 100644 --- a/classes/Product.php +++ b/classes/Product.php @@ -2914,7 +2914,7 @@ class ProductCore extends ObjectModel * @param Shop $shop * @return string */ - public static function sqlStock($product_alias, $product_attribute = 0, $inner_join = false, Shop $shop = null) + public static function sqlStock($product_alias, $product_attribute = null, $inner_join = false, Shop $shop = null) { $id_shop = ($shop !== null ? (int)$shop->id : null); $sql = (($inner_join) ? ' INNER ' : ' LEFT ').' diff --git a/classes/Search.php b/classes/Search.php index f935a934d..c17d8926f 100644 --- a/classes/Search.php +++ b/classes/Search.php @@ -140,36 +140,33 @@ class SearchCore $string = implode(' ', $processed_words); } - if ($indexation) + // If the language is constituted with symbol and there is no "words", then split every chars + if (in_array($iso_code, array('zh', 'tw', 'ja')) && function_exists('mb_strlen')) { - // If the language is constituted with symbol and there is no "words", then split every chars - if (in_array($iso_code, array('zh', 'tw', 'ja')) && function_exists('mb_strlen')) - { - // Cut symbols from letters - $symbols = ''; - $letters = ''; - foreach (explode(' ', $string) as $mb_word) - if (strlen(Tools::replaceAccentedChars($mb_word)) == mb_strlen(Tools::replaceAccentedChars($mb_word))) - $letters .= $mb_word.' '; - else - $symbols .= $mb_word.' '; - - if (preg_match_all('/./u', $symbols, $matches)) - $symbols = implode(' ', $matches[0]); + // Cut symbols from letters + $symbols = ''; + $letters = ''; + foreach (explode(' ', $string) as $mb_word) + if (strlen(Tools::replaceAccentedChars($mb_word)) == mb_strlen(Tools::replaceAccentedChars($mb_word))) + $letters .= $mb_word.' '; + else + $symbols .= $mb_word.' '; + + if (preg_match_all('/./u', $symbols, $matches)) + $symbols = implode(' ', $matches[0]); - $string = $letters.$symbols; - } - else + $string = $letters.$symbols; + } + elseif ($indexation) + { + $minWordLen = (int)Configuration::get('PS_SEARCH_MINWORDLEN'); + if ($minWordLen > 1) { - $minWordLen = (int)Configuration::get('PS_SEARCH_MINWORDLEN'); - if ($minWordLen > 1) - { - $minWordLen -= 1; - $string = preg_replace('/(?<=\s)[^\s]{1,'.$minWordLen.'}(?=\s)/Su', ' ', $string); - $string = preg_replace('/^[^\s]{1,'.$minWordLen.'}(?=\s)/Su', '', $string); - $string = preg_replace('/(?<=\s)[^\s]{1,'.$minWordLen.'}$/Su', '', $string); - $string = preg_replace('/^[^\s]{1,'.$minWordLen.'}$/Su', '', $string); - } + $minWordLen -= 1; + $string = preg_replace('/(?<=\s)[^\s]{1,'.$minWordLen.'}(?=\s)/Su', ' ', $string); + $string = preg_replace('/^[^\s]{1,'.$minWordLen.'}(?=\s)/Su', '', $string); + $string = preg_replace('/(?<=\s)[^\s]{1,'.$minWordLen.'}$/Su', '', $string); + $string = preg_replace('/^[^\s]{1,'.$minWordLen.'}$/Su', '', $string); } } @@ -374,13 +371,13 @@ class SearchCore $attributes = ''; $attributesArray = $db->executeS(' - SELECT al.name, pa.ean13, pa.reference, pa.upc FROM '._DB_PREFIX_.'product_attribute pa + SELECT al.name FROM '._DB_PREFIX_.'product_attribute pa INNER JOIN '._DB_PREFIX_.'product_attribute_combination pac ON pa.id_product_attribute = pac.id_product_attribute INNER JOIN '._DB_PREFIX_.'attribute_lang al ON (pac.id_attribute = al.id_attribute AND al.id_lang = '.(int)$id_lang.') '.Shop::addSqlAssociation('product_attribute', 'pa').' WHERE pa.id_product = '.(int)$id_product); foreach ($attributesArray as $attribute) - $attributes .= $attribute['name'].' '.$attribute['ean13'].' '.$attribute['reference'].' '.$attribute['upc'].' '; + $attributes .= $attribute['name'].' '; return $attributes; } @@ -702,4 +699,4 @@ class SearchCore return Product::getProductsProperties((int)$id_lang, $result); } -} +} \ No newline at end of file diff --git a/classes/Supplier.php b/classes/Supplier.php index 7749fb6de..3130913c1 100644 --- a/classes/Supplier.php +++ b/classes/Supplier.php @@ -72,7 +72,7 @@ class SupplierCore extends ObjectModel 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'), // Lang fields - 'description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName'), + 'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), 'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128), 'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), 'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), diff --git a/classes/Tools.php b/classes/Tools.php index 22a28c4db..d8ead1538 100644 --- a/classes/Tools.php +++ b/classes/Tools.php @@ -2481,89 +2481,66 @@ exit; return preg_replace('/\\\[px]\{[a-z]\}{1,2}|(\/[a-z]*)u([a-z]*)$/i', "$1$2", $pattern); } + protected static $is_addons_up = true; public static function addonsRequest($request, $params = array()) { - $addons_url = 'api.addons.prestashop.com'; - $postData = ''; - $postDataArray = array( + if (!self::$is_addons_up) + return false; + + $postData = http_build_query(array( 'version' => isset($params['version']) ? $params['version'] : _PS_VERSION_, 'iso_lang' => Tools::strtolower(isset($params['iso_lang']) ? $params['iso_lang'] : Context::getContext()->language->iso_code), 'iso_code' => Tools::strtolower(isset($params['iso_country']) ? $params['iso_country'] : Country::getIsoById(Configuration::get('PS_COUNTRY_DEFAULT'))), - 'shop_url' => urlencode(isset($params['shop_url']) ? $params['shop_url'] : Tools::getShopDomain()), - 'mail' => urlencode(isset($params['email']) ? $params['email'] : Configuration::get('email')) - ); - foreach ($postDataArray as $postDataKey => $postDataValue) - $postData .= '&'.$postDataKey.'='.$postDataValue; - $postData = ltrim($postData, '&'); + 'shop_url' => isset($params['shop_url']) ? $params['shop_url'] : Tools::getShopDomain(), + 'mail' => isset($params['email']) ? $params['email'] : Configuration::get('email') + )); - // Config for each request - if ($request == 'native') + $protocols = array('https'); + switch ($request) { - // Define protocol accepted and post data values for this request - $protocolsList = array('https://' => 443, 'http://' => 80); - $postData .= '&method=listing&action=native'; - } - if ($request == 'must-have') - { - // Define protocol accepted and post data values for this request - $protocolsList = array('https://' => 443, 'http://' => 80); - $postData .= '&method=listing&action=must-have'; - } - if ($request == 'customer') - { - // Define protocol accepted and post data values for this request - $protocolsList = array('https://' => 443); - $postData .= '&method=listing&action=customer&username='.urlencode(trim(Context::getContext()->cookie->username_addons)).'&password='.urlencode(trim(Context::getContext()->cookie->password_addons)); - } - if ($request == 'check_customer') - { - // Define protocol accepted and post data values for this request - $protocolsList = array('https://' => 443); - $postData .= '&method=check_customer&username='.urlencode($params['username_addons']).'&password='.urlencode($params['password_addons']); - } - if ($request == 'module') - { - // Define protocol accepted and post data values for this request - if (isset($params['username_addons']) && isset($params['password_addons'])) - { - $protocolsList = array('https://' => 443); - $postData .= '&method=module&id_module='.urlencode($params['id_module']).'&username='.urlencode($params['username_addons']).'&password='.urlencode($params['password_addons']); - } - else - { - $protocolsList = array('https://' => 443, 'http://' => 80); + case 'native': + $protocols[] = 'http'; + $postData .= '&method=listing&action=native'; + break; + case 'must-have': + $protocols[] = 'http'; + $postData .= '&method=listing&action=must-have'; + break; + case 'customer': + $postData .= '&method=listing&action=customer&username='.urlencode(trim(Context::getContext()->cookie->username_addons)).'&password='.urlencode(trim(Context::getContext()->cookie->password_addons)); + break; + case 'check_customer': + $postData .= '&method=check_customer&username='.urlencode($params['username_addons']).'&password='.urlencode($params['password_addons']); + break; + case 'module': $postData .= '&method=module&id_module='.urlencode($params['id_module']); - } - } - - if ($request == 'install-modules') - { - // Define protocol accepted and post data values for this request - $protocolsList = array('https://' => 443, 'http://' => 80); - $postData .= '&method=listing&action=install-modules'; - + if (isset($params['username_addons']) && isset($params['password_addons'])) + $postData .= '&username='.urlencode($params['username_addons']).'&password='.urlencode($params['password_addons']); + else + $protocols[] = 'http'; + + break; + case 'install-modules': + $protocols[] = 'http'; + $postData .= '&method=listing&action=install-modules'; + break; + default: + return false; } - // Make the request - $opts = array( - 'http'=>array( + $context = stream_context_create(array( + 'http' => array( 'method'=> 'POST', 'content' => $postData, 'header' => 'Content-type: application/x-www-form-urlencoded', 'timeout' => 5, ) - ); - $context = stream_context_create($opts); - foreach ($protocolsList as $protocol => $port) - { - $content = Tools::file_get_contents($protocol.$addons_url, false, $context); - - // If content returned, we cache it - if ($content) + )); + foreach ($protocols as $protocol) + if ($content = Tools::file_get_contents($protocol.'://api.addons.prestashop.com', false, $context)) return $content; - } - // No content, return false + self::$is_addons_up = false; return false; } diff --git a/classes/cache/CacheApc.php b/classes/cache/CacheApc.php index e32c04ad6..275bc8f4b 100644 --- a/classes/cache/CacheApc.php +++ b/classes/cache/CacheApc.php @@ -34,9 +34,12 @@ class CacheApcCore extends Cache public function __construct() { $this->keys = array(); - $cache_info = apc_cache_info('user'); + $cache_info = apc_cache_info((extension_loaded('apcu') === true )? '' : 'user' ); foreach ($cache_info['cache_list'] as $entry) - $this->keys[$entry['info']] = $entry['ttl']; + if ( extension_loaded('apcu') === true ) + $this->keys[$entry['key']] = $entry['ttl']; + else + $this->keys[$entry['info']] = $entry['ttl']; } /** diff --git a/classes/cache/CacheMemcache.php b/classes/cache/CacheMemcache.php index 046d40529..8c4445a7f 100755 --- a/classes/cache/CacheMemcache.php +++ b/classes/cache/CacheMemcache.php @@ -49,7 +49,7 @@ class CacheMemcacheCore extends Cache if(is_array($servers) && count($servers) > 0) { - $this->keys = $this->memcache->get(_COOKIE_IV_); + $this->keys = @$this->memcache->get(_COOKIE_IV_); if (!is_array($this->keys)) $this->keys = array(); } diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index 0508ecaab..82465abf0 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -726,6 +726,8 @@ class AdminControllerCore extends Controller */ public function processAdd() { + if (!isset($this->className) || empty($this->className)) + return false; /* Checking fields validity */ $this->validateRules(); if (count($this->errors) <= 0) @@ -1142,6 +1144,8 @@ class AdminControllerCore extends Controller */ protected function loadObject($opt = false) { + if (!isset($this->className) || empty($this->className)) + return true; $id = (int)Tools::getValue($this->identifier); if ($id && Validate::isUnsignedId($id)) { @@ -1535,21 +1539,23 @@ class AdminControllerCore extends Controller protected function addToolBarModulesListButton() { - if (!$this->isFresh(Module::CACHE_FILE_DEFAULT_COUNTRY_MODULES_LIST, 86400)) file_put_contents(_PS_ROOT_DIR_.Module::CACHE_FILE_DEFAULT_COUNTRY_MODULES_LIST, Tools::addonsRequest('native')); - $country_module_list_xml = simplexml_load_file(_PS_ROOT_DIR_.Module::CACHE_FILE_DEFAULT_COUNTRY_MODULES_LIST); - $country_module_list = array(); + $country_module_list = file_get_contents(_PS_ROOT_DIR_.Module::CACHE_FILE_DEFAULT_COUNTRY_MODULES_LIST); + if (!empty($country_module_list) && $country_module_list_xml = simplexml_load_string($country_module_list)) + { + $country_module_list_array = array(); foreach ($country_module_list_xml->module as $k => $m) - $country_module_list[] = (string)$m->name; - $this->tab_modules_list['slider_list'] = array_intersect($this->tab_modules_list['slider_list'], $country_module_list); + $country_module_list_array[] = (string)$m->name; + $this->tab_modules_list['slider_list'] = array_intersect($this->tab_modules_list['slider_list'], $country_module_list_array); + } if (is_array($this->tab_modules_list['slider_list']) && count($this->tab_modules_list['slider_list'])) $this->toolbar_btn['modules-list'] = array( - 'href' => '#', - 'desc' => $this->l('Modules List') - ); + 'href' => '#', + 'desc' => $this->l('Modules List') + ); } /** @@ -2400,7 +2406,7 @@ class AdminControllerCore extends Controller public function getFieldValue($obj, $key, $id_lang = null) { if ($id_lang) - $default_value = ($obj->id && isset($obj->{$key}[$id_lang])) ? $obj->{$key}[$id_lang] : false; + $default_value = (isset($obj->id) && $obj->id && isset($obj->{$key}[$id_lang])) ? $obj->{$key}[$id_lang] : false; else $default_value = isset($obj->{$key}) ? $obj->{$key} : false; @@ -2939,21 +2945,17 @@ class AdminControllerCore extends Controller public function isFresh($file, $timeout = 604800000) { - if (file_exists(_PS_ROOT_DIR_.$file)) - { - if (filesize(_PS_ROOT_DIR_.$file) < 1) - return false; + if (file_exists(_PS_ROOT_DIR_.$file) && filesize(_PS_ROOT_DIR_.$file) > 0) return ((time() - filemtime(_PS_ROOT_DIR_.$file)) < $timeout); - } - else - return false; + return false; } + protected static $is_prestashop_up = true; public function refresh($file_to_refresh, $external_file) { - $content = Tools::file_get_contents($external_file); - if ($content) + if (self::$is_prestashop_up && $content = Tools::file_get_contents($external_file)) return (bool)file_put_contents(_PS_ROOT_DIR_.$file_to_refresh, $content); + self::$is_prestashop_up = false; return false; } diff --git a/classes/controller/FrontController.php b/classes/controller/FrontController.php old mode 100755 new mode 100644 index 4d34edf32..9725e99f1 --- a/classes/controller/FrontController.php +++ b/classes/controller/FrontController.php @@ -512,7 +512,7 @@ class FrontControllerCore extends Controller if (Configuration::get('PS_CSS_THEME_CACHE')) $this->css_files = Media::cccCSS($this->css_files); //JS compressor management - if (Configuration::get('PS_JS_THEME_CACHE')) + if (Configuration::get('PS_JS_THEME_CACHE') && !$this->context->getMobileDevice()) $this->js_files = Media::cccJs($this->js_files); } diff --git a/classes/module/Module.php b/classes/module/Module.php index 2e911e26d..d6a9c1142 100644 --- a/classes/module/Module.php +++ b/classes/module/Module.php @@ -299,7 +299,7 @@ abstract class ModuleCore $this->_errors[] = $upgrade_detail['number_upgrade_left'].' '.$this->l('upgrade left'); } - if ($upgrade_detail['duplicate']) + if (isset($upgrade_detail['duplicate']) && $upgrade_detail['duplicate']) $this->_errors[] = sprintf(Tools::displayError('Module %s cannot be upgraded this time: please refresh this page to update it.'), $this->name); else $this->_errors[] = $this->l('To prevent any problem, this module has been turned off'); @@ -1726,7 +1726,15 @@ abstract class ModuleCore '.(int)$this->need_instance.''.(isset($this->limited_countries) ? "\n\t".''.(count($this->limited_countries) == 1 ? $this->limited_countries[0] : '').'' : '').' '; if (is_writable(_PS_MODULE_DIR_.$this->name.'/')) - file_put_contents(_PS_MODULE_DIR_.$this->name.'/config.xml', $xml); + { + $file = _PS_MODULE_DIR_.$this->name.'/config.xml'; + if (!@file_put_contents($file, $xml)) + if (!is_writable($file)) + { + @unlink($file); + @file_put_contents($file, $xml); + } + } } /** diff --git a/classes/order/Order.php b/classes/order/Order.php index a4d4db1b0..42e5b42b0 100644 --- a/classes/order/Order.php +++ b/classes/order/Order.php @@ -712,11 +712,10 @@ class OrderCore extends ObjectModel } public function getCartRules() - { + { return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT * FROM `'._DB_PREFIX_.'order_cart_rule` ocr - LEFT JOIN `'._DB_PREFIX_.'cart_rule` cr ON cr.`id_cart_rule` = ocr.`id_cart_rule` WHERE ocr.`id_order` = '.(int)$this->id); } diff --git a/classes/order/OrderCartRule.php b/classes/order/OrderCartRule.php index 3eceb173d..dcc06203a 100644 --- a/classes/order/OrderCartRule.php +++ b/classes/order/OrderCartRule.php @@ -46,6 +46,9 @@ class OrderCartRuleCore extends ObjectModel /** @var float value (tax excl.) of voucher */ public $value_tax_excl; + + /** @var boolean value : voucher gives free shipping or not */ + public $free_shipping; /** * @see ObjectModel::$definition @@ -59,7 +62,8 @@ class OrderCartRuleCore extends ObjectModel 'id_order_invoice' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'), 'name' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'required' => true), 'value' => array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat', 'required' => true), - 'value_tax_excl' => array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat', 'required' => true) + 'value_tax_excl' => array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat', 'required' => true), + 'free_shipping' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool') ) ); diff --git a/classes/order/OrderSlip.php b/classes/order/OrderSlip.php index a9b38457d..527df4bb4 100644 --- a/classes/order/OrderSlip.php +++ b/classes/order/OrderSlip.php @@ -129,19 +129,6 @@ class OrderSlipCore extends ObjectModel { $products[$key] = $product; $products[$key]['product_quantity'] = $slip_quantity[$product['id_order_detail']]; - if (count($cart_rules)) - { - $order->setProductPrices($product); - $realProductPrice = $products[$key]['product_price']; - // Todo : must be updated to use the cart rules - foreach ($cart_rules as $cart_rule) - { - if ($cart_rule['reduction_percent']) - $products[$key]['product_price'] -= $realProductPrice * ($cart_rule['reduction_percent'] / 100); - elseif ($cart_rule['reduction_amount']) - $products[$key]['product_price'] -= (($cart_rule['reduction_amount'] * ($product['product_price_wt'] / $order->total_products_wt)) / (1.00 + ($product['tax_rate'] / 100))); - } - } } return $order->getProducts($products); } diff --git a/classes/webservice/WebserviceRequest.php b/classes/webservice/WebserviceRequest.php index 39ca28043..546370998 100644 --- a/classes/webservice/WebserviceRequest.php +++ b/classes/webservice/WebserviceRequest.php @@ -1260,40 +1260,40 @@ class WebserviceRequestCore if (!isset($this->urlFragments['display'])) $this->fieldsToDisplay = 'full'; - // Check if Object is accessible for this/those id_shop - $assoc = Shop::getAssoTable($this->resourceConfiguration['retrieveData']['table']); - if ($assoc !== false) - { - $check_shop_group = false; - - $sql = 'SELECT 1 - FROM `'.bqSQL(_DB_PREFIX_.$this->resourceConfiguration['retrieveData']['table']); - if ($assoc['type'] != 'fk_shop') - $sql .= '_'.$assoc['type']; - else - { - $def = ObjectModel::getDefinition($this->resourceConfiguration['retrieveData']['className']); - if (isset($def['fields']) && isset($def['fields']['id_shop_group'])) - $check_shop_group = true; - } - $sql .= '`'; - - foreach (self::$shopIDs as $id_shop) - $OR[] = ' (id_shop = '.(int)$id_shop.($check_shop_group ? ' OR (id_shop = 0 AND id_shop_group='.(int)Shop::getGroupFromShop((int)$id_shop).')' : '').') '; - - $check = ' WHERE ('.implode('OR', $OR).') AND `'.bqSQL($this->resourceConfiguration['fields']['id']['sqlId']).'` = '.(int)$this->urlSegment[1]; - if (!Db::getInstance()->getValue($sql.$check)) - $this->setError(403, 'Bad id_shop : You are not allowed to access this '.$this->resourceConfiguration['retrieveData']['className'].' ('.(int)$this->urlSegment[1].')', 131); - } - //get entity details $object = new $this->resourceConfiguration['retrieveData']['className']((int)$this->urlSegment[1]); if ($object->id) { $objects[] = $object; - return $objects; + // Check if Object is accessible for this/those id_shop + $assoc = Shop::getAssoTable($this->resourceConfiguration['retrieveData']['table']); + if ($assoc !== false) + { + $check_shop_group = false; + + $sql = 'SELECT 1 + FROM `'.bqSQL(_DB_PREFIX_.$this->resourceConfiguration['retrieveData']['table']); + if ($assoc['type'] != 'fk_shop') + $sql .= '_'.$assoc['type']; + else + { + $def = ObjectModel::getDefinition($this->resourceConfiguration['retrieveData']['className']); + if (isset($def['fields']) && isset($def['fields']['id_shop_group'])) + $check_shop_group = true; + } + $sql .= '`'; + + foreach (self::$shopIDs as $id_shop) + $OR[] = ' (id_shop = '.(int)$id_shop.($check_shop_group ? ' OR (id_shop = 0 AND id_shop_group='.(int)Shop::getGroupFromShop((int)$id_shop).')' : '').') '; + + $check = ' WHERE ('.implode('OR', $OR).') AND `'.bqSQL($this->resourceConfiguration['fields']['id']['sqlId']).'` = '.(int)$this->urlSegment[1]; + if (!Db::getInstance()->getValue($sql.$check)) + $this->setError(404, 'This '.$this->resourceConfiguration['retrieveData']['className'].' ('.(int)$this->urlSegment[1].') does not exists on this shop', 131); + else + return $objects; + } } - elseif (!count($this->errors)) + if (!count($this->errors)) { $this->objOutput->setStatus(404); $this->_outputEnabled = false; diff --git a/controllers/admin/AdminHomeController.php b/controllers/admin/AdminHomeController.php index 45797273e..96d37e035 100644 --- a/controllers/admin/AdminHomeController.php +++ b/controllers/admin/AdminHomeController.php @@ -503,7 +503,7 @@ class AdminHomeControllerCore extends AdminController // SHOW TIPS OF THE DAY $content = Tools::file_get_contents($protocol.'api.prestashop.com/partner/tipsoftheday/?iso_country='.$isoCountry.'&iso_lang='.Tools::strtolower($isoUser), false, $stream_context); - $content = explode('|', $content); + $content = explode('|', utf8_encode($content)); if ($content[0] == 'OK' && Validate::isCleanHtml($content[1])) $result['discover_prestashop'] .= '
'.$content[1].'
'; diff --git a/controllers/admin/AdminImagesController.php b/controllers/admin/AdminImagesController.php index fdacfe872..13b505f0f 100644 --- a/controllers/admin/AdminImagesController.php +++ b/controllers/admin/AdminImagesController.php @@ -641,7 +641,7 @@ class AdminImagesControllerCore extends AdminController public function initMoveImages() { $this->context->smarty->assign(array( - 'safe_mode' => ini_get('safe_mode'), + 'safe_mode' => Tools::getSafeModeStatus(), 'link_ppreferences' => 'index.php?tab=AdminPPreferences&token='.Tools::getAdminTokenLite('AdminPPreferences').'#PS_LEGACY_IMAGES_on', )); } diff --git a/controllers/admin/AdminImportController.php b/controllers/admin/AdminImportController.php index e00153fe8..b0bef57b6 100644 --- a/controllers/admin/AdminImportController.php +++ b/controllers/admin/AdminImportController.php @@ -2435,17 +2435,12 @@ class AdminImportControllerCore extends AdminController $discount_rate = (float)$info['discount_rate']; $tax_rate = (float)$info['tax_rate']; - // checks if one product is there only once - if (isset($product['id_product'])) - { - if ($product['id_product'] == $id_product_attribute) - $this->errors[] = sprintf($this->l('Product (%d/%D) cannot be added twice (at line %d).'), $id_product, - $id_product_attribute, $current_line + 1); - else - $product['id_product'] = $id_product_attribute; - } + // checks if one product/attribute is there only once + if (isset($products[$id_product][$id_product_attribute])) + $this->errors[] = sprintf($this->l('Product/Attribute (%d/%d) cannot be added twice (at line %d).'), $id_product, + $id_product_attribute, $current_line + 1); else - $product['id_product'] = 0; + $products[$id_product][$id_product_attribute] = $quantity_expected; // checks parameters if (false === ($supplier_reference = ProductSupplier::getProductSupplierReference($id_product, $id_product_attribute, $supply_order->id_supplier))) diff --git a/controllers/admin/AdminLocalizationController.php b/controllers/admin/AdminLocalizationController.php index c5158f9fa..882ad4e5e 100644 --- a/controllers/admin/AdminLocalizationController.php +++ b/controllers/admin/AdminLocalizationController.php @@ -28,9 +28,6 @@ class AdminLocalizationControllerCore extends AdminController { public function __construct() { - $this->className = 'Configuration'; - $this->table = 'configuration'; - parent::__construct(); $this->fields_options = array( diff --git a/controllers/admin/AdminLogsController.php b/controllers/admin/AdminLogsController.php index b1b33bdb7..5a4dc1255 100644 --- a/controllers/admin/AdminLogsController.php +++ b/controllers/admin/AdminLogsController.php @@ -64,10 +64,20 @@ class AdminLogsControllerCore extends AdminController $this->_join .= ' LEFT JOIN '._DB_PREFIX_.'employee e ON (a.id_employee = e.id_employee)'; parent::__construct(); } + + public function processDelete() + { + return Logger::eraseAllLogs(); + } public function initToolbar() { parent::initToolbar(); + $this->toolbar_btn['delete'] = array( + 'short' => 'Erase', + 'desc' => $this->l('Erase all'), + 'js' => 'if (confirm(\''.$this->l('Are you sure?').'\')) document.location = \''.$this->context->link->getAdminLink('AdminLogs').'&token='.$this->token.'&deletelog=1\';' + ); unset($this->toolbar_btn['new']); } diff --git a/controllers/admin/AdminManufacturersController.php b/controllers/admin/AdminManufacturersController.php index 2931ecd96..ebdb2ad1d 100644 --- a/controllers/admin/AdminManufacturersController.php +++ b/controllers/admin/AdminManufacturersController.php @@ -256,7 +256,7 @@ class AdminManufacturersControllerCore extends AdminController 'lang' => true, 'cols' => 60, 'rows' => 10, - 'class' => 'rte', + 'autoload_rte' => 'rte', //Enable TinyMCE editor for short description 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), array( @@ -266,7 +266,7 @@ class AdminManufacturersControllerCore extends AdminController 'lang' => true, 'cols' => 60, 'rows' => 10, - 'class' => 'rte', + 'autoload_rte' => 'rte', //Enable TinyMCE editor for description 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), array( @@ -730,4 +730,4 @@ class AdminManufacturersControllerCore extends AdminController { return true; } -} \ No newline at end of file +} diff --git a/controllers/admin/AdminModulesController.php b/controllers/admin/AdminModulesController.php index c9b6ae487..a9f19e379 100644 --- a/controllers/admin/AdminModulesController.php +++ b/controllers/admin/AdminModulesController.php @@ -778,7 +778,7 @@ class AdminModulesControllerCore extends AdminController } if (isset($_GET['update'])) - Tools::redirectAdmin(self::$currentIndex.'&token='.$this->token.'&updated=1tab_module='.$module->tab.'&module_name='.$module->name.'&anchor=anchor'.ucfirst($module->name).(isset($modules_list_save) ? '&modules_list='.$modules_list_save : '').$params); + Tools::redirectAdmin(self::$currentIndex.'&token='.$this->token.'&updated=1tab_module='.$module->tab.'&module_name='.$module->name.'&anchor=anchor'.ucfirst($module->name).(isset($modules_list_save) ? '&modules_list='.$modules_list_save : '')); } public function postProcess() diff --git a/controllers/admin/AdminPaymentController.php b/controllers/admin/AdminPaymentController.php index 8a09dda92..eba965fdd 100644 --- a/controllers/admin/AdminPaymentController.php +++ b/controllers/admin/AdminPaymentController.php @@ -213,6 +213,7 @@ class AdminPaymentControllerCore extends AdminController if ($name_id == 'country' && isset($module->limited_countries) && !empty($module->limited_countries) + && is_array($module->limited_countries) && !(in_array(strtoupper($item['iso_code']), array_map('strtoupper', $module->limited_countries)))) $list['items'][$key_item]['check_list'][$key_module] = null; } diff --git a/controllers/admin/AdminStatsTabController.php b/controllers/admin/AdminStatsTabController.php index 8f6895ba7..a143841a4 100644 --- a/controllers/admin/AdminStatsTabController.php +++ b/controllers/admin/AdminStatsTabController.php @@ -131,8 +131,13 @@ abstract class AdminStatsTabControllerCore extends AdminPreferencesControllerCor $modules = $this->getModules(); $module_instance = array(); - foreach ($modules as $module) + foreach ($modules as $m => $module) + { $module_instance[$module['name']] = Module::getInstanceByName($module['name']); + $modules[$m]['displayName'] = $module_instance[$module['name']]->displayName; + } + + uasort($modules, array($this, 'checkModulesNames')); $tpl->assign(array( 'current' => self::$currentIndex, @@ -143,6 +148,11 @@ abstract class AdminStatsTabControllerCore extends AdminPreferencesControllerCor return $tpl->fetch(); } + + public function checkModulesNames($a, $b) + { + return (bool)($a['displayName'] > $b['displayName']); + } protected function getModules() { diff --git a/controllers/admin/AdminSuppliersController.php b/controllers/admin/AdminSuppliersController.php index 22e30efb4..bfe5618a3 100644 --- a/controllers/admin/AdminSuppliersController.php +++ b/controllers/admin/AdminSuppliersController.php @@ -94,7 +94,8 @@ class AdminSuppliersControllerCore extends AdminController 'rows' => 10, 'lang' => true, 'hint' => $this->l('Invalid characters:').' <>;=#{}', - 'desc' => $this->l('Will appear in the supplier list') + 'desc' => $this->l('Will appear in the supplier list'), + 'autoload_rte' => 'rte' //Enable TinyMCE editor for short description ), array( 'type' => 'text', diff --git a/controllers/admin/AdminTranslationsController.php b/controllers/admin/AdminTranslationsController.php index 3bbb11dc0..52b178edc 100644 --- a/controllers/admin/AdminTranslationsController.php +++ b/controllers/admin/AdminTranslationsController.php @@ -460,7 +460,9 @@ class AdminTranslationsControllerCore extends AdminController if (!$default_language || !Validate::isLanguageIsoCode($default_language)) return false; // 1 - Scan mails files - $mails = scandir(_PS_MAIL_DIR_.$default_language.'/'); + $mails = array(); + if (Tools::file_exists_cache(_PS_MAIL_DIR_.$default_language.'/')) + $mails = scandir(_PS_MAIL_DIR_.$default_language.'/'); $mails_new_lang = array(); @@ -579,7 +581,9 @@ class AdminTranslationsControllerCore extends AdminController if (preg_match('#^translations\/'.$iso_code.'\/tabs.php#Ui', $file['filename'], $matches) && Validate::isLanguageIsoCode($iso_code)) { // Include array width new translations tabs - $tabs = include _PS_ROOT_DIR_.DIRECTORY_SEPARATOR.$file['filename']; + $tabs = array(); + if (Tools::file_exists_cache(_PS_ROOT_DIR_.DIRECTORY_SEPARATOR.$file['filename'])) + $tabs = include_once(_PS_ROOT_DIR_.DIRECTORY_SEPARATOR.$file['filename']); foreach ($tabs as $class_name => $translations) { diff --git a/controllers/front/ManufacturerController.php b/controllers/front/ManufacturerController.php index dbc2f3b2a..4cc8d6b62 100644 --- a/controllers/front/ManufacturerController.php +++ b/controllers/front/ManufacturerController.php @@ -134,4 +134,12 @@ class ManufacturerControllerCore extends FrontController else $this->context->smarty->assign('nbManufacturers', 0); } -} \ No newline at end of file + + /** + * Get instance of current manufacturer + */ + public function getManufacturer() + { + return $this->manufacturer; + } +} diff --git a/install-dev/data/db_structure.sql b/install-dev/data/db_structure.sql index d067ea6f0..4ad6974fc 100644 --- a/install-dev/data/db_structure.sql +++ b/install-dev/data/db_structure.sql @@ -936,7 +936,7 @@ CREATE TABLE `PREFIX_manufacturer_lang` ( `id_manufacturer` int(10) unsigned NOT NULL, `id_lang` int(10) unsigned NOT NULL, `description` text, - `short_description` varchar(254) default NULL, + `short_description` text, `meta_title` varchar(128) default NULL, `meta_keywords` varchar(255) default NULL, `meta_description` varchar(255) default NULL, diff --git a/install-dev/upgrade/php/block_category_1521.php b/install-dev/upgrade/php/block_category_1521.php index c6b1846f7..4ff4d086b 100644 --- a/install-dev/upgrade/php/block_category_1521.php +++ b/install-dev/upgrade/php/block_category_1521.php @@ -26,11 +26,11 @@ function block_category_1521() { - if (!Db::getInstance()->getValue('SELECT FROM `'._DB_PREFIX_.'configuration` WHERE `name` LIKE \'BLOCK_CATEG_MAX_DEPTH\' ')) + if (!Db::getInstance()->getValue('SELECT value FROM `'._DB_PREFIX_.'configuration` WHERE `name` LIKE \'BLOCK_CATEG_MAX_DEPTH\' ')) Db::getInstance()->Execute('INSERT INTO `'._DB_PREFIX_.'configuration` (`id_configuration` ,`id_shop_group` ,`id_shop` ,`name` ,`value` ,`date_add` ,`date_upd`) VALUES (NULL, NULL, NULL, \'BLOCK_CATEG_MAX_DEPTH\', 4, NOW(), NOW())'); - else if ($maxdepth = (int)Db::getInstance()->getValue('SELECT FROM `'._DB_PREFIX_.'configuration` WHERE `value` IS NOT NULL AND `value` <> 0')) - Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'configuration` SET `value` = '.($maxdepth + 1).' WHERE `name` LIKE\'BLOCK_CATEG_MAX_DEPTH\''); + else if ($maxdepth = (int)Db::getInstance()->getValue('SELECT value FROM `'._DB_PREFIX_.'configuration` WHERE `value` IS NOT NULL AND `value` <> 0 AND `name` LIKE \'BLOCK_CATEG_MAX_DEPTH\'')) + Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'configuration` SET `value` = '.($maxdepth + 1).' WHERE `name` LIKE \'BLOCK_CATEG_MAX_DEPTH\''); } \ No newline at end of file diff --git a/install-dev/upgrade/php/fix_download_product_feature_active.php b/install-dev/upgrade/php/fix_download_product_feature_active.php index 354b3e5f5..c8ffc103f 100644 --- a/install-dev/upgrade/php/fix_download_product_feature_active.php +++ b/install-dev/upgrade/php/fix_download_product_feature_active.php @@ -27,5 +27,5 @@ function fix_download_product_feature_active() { if (Db::getInstance()->getValue('SELECT COUNT(id_product_download) FROM `'._DB_PREFIX_.'product_download` WHERE `active` = 1 ;') > 0) - Configuration::updateGlobaleValue('PS_VIRTUAL_PROD_FEATURE_ACTIVE'); + Db::getInstance()->execute('UPDATE `'._DB_PREFIX_.'configuration` SET `value` = 1 WHERE `name` LIKE \'PS_VIRTUAL_PROD_FEATURE_ACTIVE\''); } \ No newline at end of file diff --git a/install-dev/upgrade/php/generate_ntree.php b/install-dev/upgrade/php/generate_ntree.php index 102d10e2c..a9c12ca4a 100644 --- a/install-dev/upgrade/php/generate_ntree.php +++ b/install-dev/upgrade/php/generate_ntree.php @@ -28,8 +28,9 @@ function generate_ntree() { $categories = Db::getInstance()->executeS('SELECT id_category, id_parent FROM '._DB_PREFIX_.'category ORDER BY id_parent ASC, position ASC'); $categoriesArray = array(); - foreach ($categories AS $category) - $categoriesArray[(int)$category['id_parent']]['subcategories'][(int)$category['id_category']] = 1; + if (is_array($categories)) + foreach ($categories AS $category) + $categoriesArray[(int)$category['id_parent']]['subcategories'][(int)$category['id_category']] = 1; $n = 1; generate_ntree_subTree($categoriesArray, 1, $n); } diff --git a/install-dev/upgrade/php/migrate_orders.php b/install-dev/upgrade/php/migrate_orders.php index 6929bd07d..3a716b47a 100644 --- a/install-dev/upgrade/php/migrate_orders.php +++ b/install-dev/upgrade/php/migrate_orders.php @@ -95,7 +95,8 @@ function migrate_orders() $reduction_amount_tax_incl = (float)$products['reduction_amount']; // cart::getTaxesAverageUsed equivalent - $sum_total_products += $products['total_wt']; + $sum_total_products += $products['total_price']; + $sum_tax_amount += $products['total_wt'] - $products['total_price']; $order_details['reduction_amount_tax_incl'] = $reduction_amount_tax_incl; @@ -119,12 +120,13 @@ function migrate_orders() $average_tax_used = 1; if ($sum_total_products > 0) - $average_tax_used += ($sum_tax_amount / $sum_total_products) * 0.01; - - $carrier_tax_rate = 1 + ((float)$order['carrier_tax_rate'] / 100); + $average_tax_used += $sum_tax_amount / $sum_total_products; + $average_tax_used = round($average_tax_used, 4); + $carrier_tax_rate = 1; + if (isset($order['carrier_tax_rate'])) + $carrier_tax_rate + ((float)$order['carrier_tax_rate'] / 100); $total_discount_tax_excl = $order['total_discounts'] / $average_tax_used; - $order['total_discounts_tax_incl'] = (float)$order['total_discounts']; $order['total_discounts_tax_excl'] = (float)$total_discount_tax_excl; @@ -321,5 +323,4 @@ function mo_setProductPrices($row, $tax_calculation_method) $row['total_price'] = $row['product_quantity'] * $row['product_price']; return $row; -} - +} \ No newline at end of file diff --git a/install-dev/upgrade/php/move_translations_module_file.php b/install-dev/upgrade/php/move_translations_module_file.php index 0fcf7e49f..441ed22db 100644 --- a/install-dev/upgrade/php/move_translations_module_file.php +++ b/install-dev/upgrade/php/move_translations_module_file.php @@ -44,14 +44,14 @@ function move_translations_module_file() foreach ($modules as $module_name) { // Check if is a good module - if (in_array($module_name, array('.', '..', '.svn', '.htaccess', 'index.php', 'autoupgrade'))) + if (in_array($module_name, array('.', '..', '.svn', '.htaccess', 'index.php', 'autoupgrade')) || !is_dir(_PS_MODULE_DIR_.'/'.$module_name)) continue; foreach ($languages as $lang) { // Name for the old file and the new file $old_file = _PS_MODULE_DIR_.$module_name.'/'.$lang['iso_code'].'.php'; - if (!file_exists($old_file)) + if (!@file_exists($old_file)) continue; $dir_translations = _PS_MODULE_DIR_.$module_name.'/translations/'; @@ -61,7 +61,7 @@ function move_translations_module_file() if (!is_dir($dir_translations)) $res &= mkdir($dir_translations, 0777); - if (!rename($old_file, $new_file)) + if (!@rename($old_file, $new_file)) { $error_list[] = $module_name.' - '.$lang['iso_code']."
\r\n"; $res &= false; diff --git a/install-dev/upgrade/php/p15015_blockadvertising_extension.php b/install-dev/upgrade/php/p15015_blockadvertising_extension.php index d7795f6b6..2847cb6ef 100644 --- a/install-dev/upgrade/php/p15015_blockadvertising_extension.php +++ b/install-dev/upgrade/php/p15015_blockadvertising_extension.php @@ -30,8 +30,8 @@ function p15015_blockadvertising_extension() define('_PS_ROOT_DIR_', realpath(INSTALL_PATH.'/../')); // Try to update with the extension of the image that exists in the module directory - if (file_exists(_PS_ROOT_DIR_.'modules/blockadvertising')) - foreach (scandir(_PS_ROOT_DIR_.'modules/blockadvertising') as $file) + if (@file_exists(_PS_ROOT_DIR_.'/modules/blockadvertising')) + foreach (@scandir(_PS_ROOT_DIR_.'/modules/blockadvertising') as $file) if (in_array($file, array('advertising.jpg', 'advertising.gif', 'advertising.png'))) Db::getInstance()->execute(' REPLACE INTO `'._DB_PREFIX_.'configuration` (name, value) diff --git a/install-dev/upgrade/php/p15018_change_image_types.php b/install-dev/upgrade/php/p15018_change_image_types.php index 37cc9c5d8..9e695a6fb 100644 --- a/install-dev/upgrade/php/p15018_change_image_types.php +++ b/install-dev/upgrade/php/p15018_change_image_types.php @@ -41,7 +41,7 @@ function p15018_change_image_types() ) ); - $option = (bool)Db::getInstance()->getValue('SELECT id_theme FROM `'._DB_PREFIX_.'theme` WHERE directory != "default"'); + $option = (bool)Db::getInstance()->getValue('SELECT id_theme FROM `'._DB_PREFIX_.'theme` WHERE directory != "default" AND directory != "prestashop"'); // If there is another theme than the default one, duplicate if ($option) diff --git a/install-dev/upgrade/php/update_genders_images.php b/install-dev/upgrade/php/update_genders_images.php index 20b060356..cee0ae6cd 100644 --- a/install-dev/upgrade/php/update_genders_images.php +++ b/install-dev/upgrade/php/update_genders_images.php @@ -26,12 +26,12 @@ function update_genders_images() { - if (file_exists(_PS_ROOT_DIR_.'/img/genders/Mr.jpg')) + if (@file_exists(_PS_ROOT_DIR_.'/img/genders/Mr.jpg')) @rename(_PS_ROOT_DIR_.'/img/genders/Mr.jpg', _PS_ROOT_DIR_.'/img/genders/1.jpg'); - if (file_exists(_PS_ROOT_DIR_.'/img/genders/Ms.jpg')) + if (@file_exists(_PS_ROOT_DIR_.'/img/genders/Ms.jpg')) @rename(_PS_ROOT_DIR_.'/img/genders/Ms.jpg', _PS_ROOT_DIR_.'/img/genders/2.jpg'); - if (file_exists(_PS_ROOT_DIR_.'/img/genders/Miss.jpg')) + if (@file_exists(_PS_ROOT_DIR_.'/img/genders/Miss.jpg')) @rename(_PS_ROOT_DIR_.'/img/genders/Miss.jpg', _PS_ROOT_DIR_.'/img/genders/3.jpg'); - if (file_exists(_PS_ROOT_DIR_.'genders/unknown.jpg')) + if (@file_exists(_PS_ROOT_DIR_.'/img/genders/unknown.jpg')) @rename(_PS_ROOT_DIR_.'/img/genders/unknown.jpg', _PS_ROOT_DIR_.'/img/genders/Unknown.jpg'); } \ No newline at end of file diff --git a/install-dev/upgrade/php/update_order_canada.php b/install-dev/upgrade/php/update_order_canada.php index 79413b8fe..1c23fa8b6 100644 --- a/install-dev/upgrade/php/update_order_canada.php +++ b/install-dev/upgrade/php/update_order_canada.php @@ -57,6 +57,7 @@ function update_order_canada() $default_price_display_method = Db::getInstance()->getValue('SELECT price_display_method FROM `'._DB_PREFIX_.'group` WHERE id_group=1'); $values = ''; + if (is_array($id_order_list)) foreach ($id_order_list as $order) { $amount = array(); diff --git a/install-dev/upgrade/php/update_order_messages.php b/install-dev/upgrade/php/update_order_messages.php index 369b753d5..29d4cc07e 100644 --- a/install-dev/upgrade/php/update_order_messages.php +++ b/install-dev/upgrade/php/update_order_messages.php @@ -29,17 +29,18 @@ function update_order_messages() $step = 3000; $count_messages = Db::getInstance()->getValue('SELECT count(id_message) FROM '._DB_PREFIX_.'message'); $nb_loop = $start = 0; + $pattern = ' 0) $nb_loop = ceil($count_messages / $step); for($i = 0; $i < $nb_loop; $i++) { - $sql = 'SELECT id_message, message FROM `'._DB_PREFIX_.'message` WHERE message REGEXP \'query($sql)) while ($message = Db::getInstance()->nextRow($messages)) { if(is_array($message)) { - $sql = 'UPDATE `'._DB_PREFIX_.'message` SET message = \''.pSQL(Tools::htmlentitiesDecodeUTF8(br2nl($message['message']))).'\' + $sql = 'UPDATE `'._DB_PREFIX_.'message` SET message = \''.pSQL(preg_replace('/'.$pattern.'/', '', Tools::htmlentitiesDecodeUTF8(br2nl($message['message'])))).'\' WHERE id_message = '.(int)$message['id_message']; $result = Db::getInstance()->execute($sql); } @@ -50,13 +51,13 @@ function update_order_messages() $nb_loop = ceil($count_messages / $step); for($i = 0; $i < $nb_loop; $i++) { - $sql = 'SELECT id_customer_message, message FROM `'._DB_PREFIX_.'customer_message` WHERE message REGEXP \'query($sql)) while ($message = Db::getInstance()->nextRow($messages)) { if(is_array($message)) { - $sql = 'UPDATE `'._DB_PREFIX_.'customer_message` SET message = \''.pSQL(Tools::htmlentitiesDecodeUTF8(str_replace('&', '&', $message['message']))).'\' + $sql = 'UPDATE `'._DB_PREFIX_.'customer_message` SET message = \''.pSQL(preg_replace('/'.$pattern.'/', '', Tools::htmlentitiesDecodeUTF8(str_replace('&', '&', $message['message'])))).'\' WHERE id_customer_message = '.(int)$message['id_customer_message']; Db::getInstance()->execute($sql); } diff --git a/install-dev/upgrade/sql/1.5.0.0.sql b/install-dev/upgrade/sql/1.5.0.0.sql index 94a1e36d6..12392446b 100755 --- a/install-dev/upgrade/sql/1.5.0.0.sql +++ b/install-dev/upgrade/sql/1.5.0.0.sql @@ -1,4 +1,7 @@ SET NAMES 'utf8'; + +DROP TABLE IF EXISTS `PREFIX_group_shop`; + CREATE TABLE IF NOT EXISTS `PREFIX_group_shop` ( `id_group_shop` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(64) CHARACTER SET utf8 NOT NULL, diff --git a/install-dev/upgrade/sql/1.5.0.10.sql b/install-dev/upgrade/sql/1.5.0.10.sql index 99860f0f5..82899d281 100644 --- a/install-dev/upgrade/sql/1.5.0.10.sql +++ b/install-dev/upgrade/sql/1.5.0.10.sql @@ -4,6 +4,8 @@ UPDATE `PREFIX_meta` SET `page` = 'contact' WHERE `page` = 'contact-form'; +DROP TABLE IF EXISTS `PREFIX_shop_group`; + RENAME TABLE `PREFIX_group_shop` TO `PREFIX_shop_group`; ALTER TABLE `PREFIX_shop_group` CHANGE `id_group_shop` `id_shop_group` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT; ALTER TABLE `PREFIX_shop` CHANGE `id_group_shop` `id_shop_group` INT( 11 ) UNSIGNED NOT NULL; diff --git a/install-dev/upgrade/sql/1.5.5.0.sql b/install-dev/upgrade/sql/1.5.5.0.sql index 04d4af493..c93e293ac 100644 --- a/install-dev/upgrade/sql/1.5.5.0.sql +++ b/install-dev/upgrade/sql/1.5.5.0.sql @@ -34,6 +34,6 @@ ALTER TABLE `PREFIX_product_shop` DROP INDEX `date_add`, ADD INDEX `date_add` (` UPDATE `PREFIX_hook` SET `live_edit` = '1' WHERE `name` LIKE 'leftcolumn'; -UPDATE `PREFIX_configuration` SET `name` = '0' WHERE `name` LIKE 'PS_LEGACY_IMAGES' AND `value` LIKE '1'; +UPDATE `PREFIX_configuration` SET `value` = '0' WHERE `name` LIKE 'PS_LEGACY_IMAGES' AND `value` = 1; INSERT INTO `PREFIX_configuration` (`name`, `value`, `date_add`, `date_upd`) VALUES('PS_SMARTY_CONSOLE_KEY', 'SMARTY_DEBUG', NOW(), NOW()); diff --git a/install-dev/upgrade/sql/1.5.6.0.sql b/install-dev/upgrade/sql/1.5.6.0.sql new file mode 100644 index 000000000..5f5521cff --- /dev/null +++ b/install-dev/upgrade/sql/1.5.6.0.sql @@ -0,0 +1 @@ +ALTER TABLE `PREFIX_manufacturer_lang` CHANGE `short_description` `short_description` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL; \ No newline at end of file diff --git a/js/tools.js b/js/tools.js index cc84ad854..4da024b8c 100644 --- a/js/tools.js +++ b/js/tools.js @@ -294,6 +294,44 @@ function removeQuotes(value) return value; } +/** + * Display a MessageBox + * @param {string} msg + * @param {string} title (optional) + */ +function fancyMsgBox(msg, title) +{ + if (title) msg = "

" + title + "

" + msg + "

"; + msg += "

"; + $.fancybox( msg, {'autoDimensions': false, 'width': 500, 'height': 'auto', 'transitionIn': 'none', 'transitionOut': 'none'} ); +} + +/** + * Display a messageDialog with different buttons including a callback for each one + * @param {string} question + * @param {mixed} title Optional title for the dialog box. Send false if you don't want any title + * @param {object} buttons Associative array containg a list of {buttonCaption: callbackFunctionName, ...}. Use an empty space instead of function name for no callback + * @param {mixed} otherParams Optional data sent to the callback function + */ +function fancyChooseBox(question, title, buttons, otherParams) +{ + var msg, funcName, action; + if (title) msg = "

" + title + "

" + question + "

"; + msg += "

"; + var i = 0; + for (var caption in buttons) { + if (!buttons.hasOwnProperty(caption)) continue; + funcName = buttons[caption]; + if (typeof otherParams == 'undefined') otherParams = 0; + otherParams = escape(JSON.stringify(otherParams)); + action = funcName ? "$.fancybox.close();window['" + funcName + "'](JSON.parse(unescape('" + otherParams + "')), " + i + ")" : "$.fancybox.close()"; + msg += ''; + i++; + } + msg += "

"; + $.fancybox( msg, {'autoDimensions': false, 'width': 500, 'height': 'auto', 'transitionIn': 'none', 'transitionOut': 'none'} ); +} + //On dom ready $().ready(function() { diff --git a/modules/blockcart/ajax-cart.js b/modules/blockcart/ajax-cart.js index b0de33fd0..97448ffef 100644 --- a/modules/blockcart/ajax-cart.js +++ b/modules/blockcart/ajax-cart.js @@ -214,26 +214,46 @@ var ajaxCart = { $element = $('#bigpic'); var $picture = $element.clone(); var pictureOffsetOriginal = $element.offset(); + pictureOffsetOriginal.right = $(window).innerWidth() - pictureOffsetOriginal.left - $element.width(); - if ($picture.size()) - $picture.css({'position': 'absolute', 'top': pictureOffsetOriginal.top, 'left': pictureOffsetOriginal.left}); + if ($picture.length) + { + $picture.css({ + position: 'absolute', + top: pictureOffsetOriginal.top, + right: pictureOffsetOriginal.right + }); + } var pictureOffset = $picture.offset(); - if ($('#cart_block')[0] && $('#cart_block').offset().top && $('#cart_block').offset().left) - var cartBlockOffset = $('#cart_block').offset(); - else - var cartBlockOffset = $('#shopping_cart').offset(); + var cartBlock = $('#cart_block'); + if (!$('#cart_block')[0] || !$('#cart_block').offset().top || !$('#cart_block').offset().left) + cartBlock = $('#shopping_cart'); + var cartBlockOffset = cartBlock.offset(); + cartBlockOffset.right = $(window).innerWidth() - cartBlockOffset.left - cartBlock.width(); // Check if the block cart is activated for the animation - if (cartBlockOffset != undefined && $picture.size()) + if (cartBlockOffset != undefined && $picture.length) { $picture.appendTo('body'); - $picture.css({ 'position': 'absolute', 'top': $picture.css('top'), 'left': $picture.css('left'), 'z-index': 4242 }) - .animate({ 'width': $element.attr('width')*0.66, 'height': $element.attr('height')*0.66, 'opacity': 0.2, 'top': cartBlockOffset.top + 30, 'left': cartBlockOffset.left + 15 }, 1000) - .fadeOut(100, function() { - ajaxCart.updateCartInformation(jsonData, addedFromProductPage); - $(this).remove(); - }); + $picture + .css({ + position: 'absolute', + top: pictureOffsetOriginal.top, + right: pictureOffsetOriginal.right, + zIndex: 4242 + }) + .animate({ + width: $element.attr('width')*0.66, + height: $element.attr('height')*0.66, + opacity: 0.2, + top: cartBlockOffset.top + 30, + right: cartBlockOffset.right + 15 + }, 1000) + .fadeOut(100, function() { + ajaxCart.updateCartInformation(jsonData, addedFromProductPage); + $(this).remove(); + }); } else ajaxCart.updateCartInformation(jsonData, addedFromProductPage); diff --git a/modules/blocklayered/blocklayered.php b/modules/blocklayered/blocklayered.php index 76c0aacaa..91ebe0cd2 100644 --- a/modules/blocklayered/blocklayered.php +++ b/modules/blocklayered/blocklayered.php @@ -445,10 +445,7 @@ class BlockLayered extends Module static $_MODULES = array(); global $_MODULE; - if (version_compare(_PS_VERSION_,'1.5','>')) $file = _PS_MODULE_DIR_.$this->name.'/translations/'.Language::getIsoById($id_lang).'.php'; - else - $file = _PS_MODULE_DIR_.$this->name.'/'.Language::getIsoById($id_lang).'.php'; if (!array_key_exists($id_lang, $_MODULES)) { @@ -2393,11 +2390,13 @@ class BlockLayered extends Module MAX(image_shop.`id_image`) id_image, il.legend, m.name manufacturer_name, - DATEDIFF('.$alias_where.'.`date_add`, DATE_SUB(NOW(), INTERVAL '.(int)$nb_day_new_product.' DAY)) > 0 AS new + DATEDIFF('.$alias_where.'.`date_add`, DATE_SUB(NOW(), INTERVAL '.(int)$nb_day_new_product.' DAY)) > 0 AS new, + stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity FROM `'._DB_PREFIX_.'category_product` cp LEFT JOIN '._DB_PREFIX_.'category c ON (c.id_category = cp.id_category) LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = cp.`id_product` '.Shop::addSqlAssociation('product', 'p').' + '.Product::sqlStock('p', null, false, Context::getContext()->shop).' LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = p.id_product'.Shop::addSqlRestrictionOnLang('pl').' AND pl.id_lang = '.(int)$cookie->id_lang.') LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'. Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').' diff --git a/modules/blocknewproducts/blocknewproducts.php b/modules/blocknewproducts/blocknewproducts.php index d5ca90eda..ae04a77ee 100644 --- a/modules/blocknewproducts/blocknewproducts.php +++ b/modules/blocknewproducts/blocknewproducts.php @@ -111,7 +111,10 @@ class BlockNewProducts extends Module { if (!$this->isCached('blocknewproducts.tpl', $this->getCacheId())) { - if (!Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY') && !($newProducts = Product::getNewProducts((int)$params['cookie']->id_lang, 0, (int)Configuration::get('NEW_PRODUCTS_NBR')))) + if (!Configuration::get('PS_BLOCK_NEWPRODUCTS_DISPLAY')) + return; + $newProducts = Product::getNewProducts((int) $params['cookie']->id_lang, 0, (int) Configuration::get('NEW_PRODUCTS_NBR')); + if (!$newProducts) return; $this->smarty->assign(array( @@ -151,4 +154,4 @@ class BlockNewProducts extends Module { $this->_clearCache('blocknewproducts.tpl'); } -} \ No newline at end of file +} diff --git a/modules/blocktopmenu/blocktopmenu.php b/modules/blocktopmenu/blocktopmenu.php index 724ea4da3..a5eb3b3c5 100644 --- a/modules/blocktopmenu/blocktopmenu.php +++ b/modules/blocktopmenu/blocktopmenu.php @@ -221,6 +221,8 @@ class Blocktopmenu extends Module // BEGIN SUPPLIER $this->_html .= ''; + // Option to show all Suppliers + $this->_html .= ''; $suppliers = Supplier::getSuppliers(false, $id_lang); foreach ($suppliers as $supplier) $this->_html .= ''; @@ -228,6 +230,8 @@ class Blocktopmenu extends Module // BEGIN Manufacturer $this->_html .= ''; + // Option to show all Manufacturers + $this->_html .= ''; $manufacturers = Manufacturer::getManufacturers(false, $id_lang); foreach ($manufacturers as $manufacturer) $this->_html .= ''; @@ -472,12 +476,22 @@ class Blocktopmenu extends Module $this->_html .= ''.PHP_EOL; break; + // Case to handle the option to show all Manufacturers + case 'ALLMAN': + $this->_html .= ''.PHP_EOL; + break; + case 'MAN': $manufacturer = new Manufacturer((int)$id, (int)$id_lang); if (Validate::isLoadedObject($manufacturer)) $this->_html .= ''.PHP_EOL; break; + // Case to handle the option to show all Suppliers + case 'ALLSUP': + $this->_html .= ''.PHP_EOL; + break; + case 'SUP': $supplier = new Supplier((int)$id, (int)$id_lang); if (Validate::isLoadedObject($supplier)) @@ -549,6 +563,16 @@ class Blocktopmenu extends Module } break; + // Case to handle the option to show all Manufacturers + case 'ALLMAN': + $link = new Link; + $this->_menu .= '
  • '.$this->l('All manufacturers').'
      '.PHP_EOL; + $manufacturers = Manufacturer::getManufacturers(); + foreach ($manufacturers as $key => $manufacturer) + $this->_menu .= '
    • '.$manufacturer['name'].'
    • '.PHP_EOL; + $this->_menu .= '
    '; + break; + case 'MAN': $selected = ($this->page_name == 'manufacturer' && (Tools::getValue('id_manufacturer') == $id)) ? ' class="sfHover"' : ''; $manufacturer = new Manufacturer((int)$id, (int)$id_lang); @@ -563,6 +587,16 @@ class Blocktopmenu extends Module } break; + // Case to handle the option to show all Suppliers + case 'ALLSUP': + $link = new Link; + $this->_menu .= '
  • '.$this->l('All suppliers').'
      '.PHP_EOL; + $suppliers = Supplier::getSuppliers(); + foreach ($suppliers as $key => $supplier) + $this->_menu .= '
    • '.$supplier['name'].'
    • '.PHP_EOL; + $this->_menu .= '
    '; + break; + case 'SUP': $selected = ($this->page_name == 'supplier' && (Tools::getValue('id_supplier') == $id)) ? ' class="sfHover"' : ''; $supplier = new Supplier((int)$id, (int)$id_lang); @@ -896,4 +930,4 @@ class Blocktopmenu extends Module } -} \ No newline at end of file +} diff --git a/modules/importerosc/importerosc.php b/modules/importerosc/importerosc.php index fba9a5371..25a5f1329 100644 --- a/modules/importerosc/importerosc.php +++ b/modules/importerosc/importerosc.php @@ -224,7 +224,7 @@ class importerosc extends ImportModule $keyLanguage = 'id_lang'; $identifier = 'id_category'; $categories = $this->executeS(' - SELECT c.categories_id as id_category, c.parent_id as id_parent, level as level_depth, cd.language_id as id_lang, cd.categories_name as name , 1 as active, categories_image as images + SELECT c.categories_id as id_category, c.parent_id as id_parent, level as level_depth, cd.language_id as id_lang, cd.categories_name as name , 1 as active, categories_image as images, c.date_added as date_add FROM `'.bqSQL($this->prefix).'categories` c LEFT JOIN `'.bqSQL($this->prefix).'categories_description` cd ON (c.categories_id = cd.categories_id) WHERE cd.categories_name IS NOT NULL AND cd.language_id IS NOT NULL diff --git a/modules/productcomments/js/productcomments.js b/modules/productcomments/js/productcomments.js index aa9ac386b..daebc3d0b 100644 --- a/modules/productcomments/js/productcomments.js +++ b/modules/productcomments/js/productcomments.js @@ -56,11 +56,11 @@ $(function() { e.preventDefault(); // Form element - + url_options = parseInt(productcomments_url_rewrite) ? '?' : '&'; $.ajax({ url: productcomments_controller_url + url_options + 'action=add_comment&secure_key=' + secure_key + '&rand=' + new Date().getTime(), - data: $('#fancybox-content form').serialize(), + data: $('#id_new_comment_form').serialize(), type: 'POST', headers: { "cache-control": "no-cache" }, dataType: "json", @@ -68,7 +68,9 @@ $(function() { if (data.result) { $.fancybox.close(); - document.location.href = document.location.href; + var buttons = {}; + buttons[productcomment_ok] = "productcommentRefreshPage"; + fancyChooseBox(productcomment_added, productcomment_title, buttons); } else { @@ -83,3 +85,7 @@ $(function() { return false; }); }); + +function productcommentRefreshPage() { + window.location.reload(); +} \ No newline at end of file diff --git a/modules/productcomments/productcomments.tpl b/modules/productcomments/productcomments.tpl index 036aadeeb..972096456 100644 --- a/modules/productcomments/productcomments.tpl +++ b/modules/productcomments/productcomments.tpl @@ -89,7 +89,7 @@ var productcomments_url_rewrite = '{$productcomments_url_rewriting_activated}';
    -
    +

    {l s='Write your review' mod='productcomments'}

    {$product->name|escape:html:'UTF-8'} @@ -102,7 +102,7 @@ var productcomments_url_rewrite = '{$productcomments_url_rewriting_activated}';

    {l s='Write your review' mod='productcomments'}

    -