diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 29f1cdfdc..9673f5b4e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,7 +1,7 @@ Contributing ------------ -PrestaShop is an open-source e-commerce solution - To contribute to our project, you can make pull requests on the development branch. +PrestaShop is an open-source e-commerce solution - To contribute to our project, you can make pull requests on the bootstrap branch. If you need some help to make a [pull-request][1] All contributions must respect [the coding norm][2] and [the commit norm][3] in your pull-request. All core files you commit in your pull request must have Open Software License (OSL 3.0) diff --git a/admin-dev/themes/default/js/tree.js b/admin-dev/themes/default/js/tree.js index 976492e39..e9b440542 100644 --- a/admin-dev/themes/default/js/tree.js +++ b/admin-dev/themes/default/js/tree.js @@ -13,7 +13,7 @@ Tree.prototype = { var that = $(this); - this.$element.find("label.tree-toggler").click( + this.$element.find("label.tree-toggler, .icon-folder-close, .icon-folder-open").click( function () { if ($(this).parent().parent().children("ul.tree").is(":visible")) diff --git a/admin-dev/themes/default/template/controllers/dashboard/helpers/view/view.tpl b/admin-dev/themes/default/template/controllers/dashboard/helpers/view/view.tpl index dd7ff85a1..b9c8759ad 100644 --- a/admin-dev/themes/default/template/controllers/dashboard/helpers/view/view.tpl +++ b/admin-dev/themes/default/template/controllers/dashboard/helpers/view/view.tpl @@ -132,11 +132,11 @@

{l s="Simulation Mode"}

- + - + diff --git a/admin-dev/themes/default/template/controllers/products/helpers/form/form.tpl b/admin-dev/themes/default/template/controllers/products/helpers/form/form.tpl index eb63cf057..b4c39b412 100644 --- a/admin-dev/themes/default/template/controllers/products/helpers/form/form.tpl +++ b/admin-dev/themes/default/template/controllers/products/helpers/form/form.tpl @@ -146,6 +146,9 @@ // if the tab has not already been loaded, load it now tabs_manager.display(id, true); + if (btn_name == 'Associations') + handleSaveButtons(); + tabs_manager.onLoad(id, function(){ $("#product-tab-content-"+id).show(0, function(){ $(this).trigger('displayed'); @@ -169,7 +172,8 @@ { $('#desc-product-newCombination').hide(); // if pack is enabled, save button are visible only if pack is valid - handleSaveButtons(); + if (btn_name != 'Informations') + handleSaveButtons(); } hideOtherLanguage(default_language); $('.label-tooltip').tooltip(); @@ -181,10 +185,6 @@ if ($('#product-tab-content-Associations').hasClass('not-loaded')) disableSave(); - tabs_manager.onLoad('Associations', function(){ - handleSaveButtons(); - }); - $('.confirm_leave').live('click', function(){ // Double quotes are necessary when the translated string has single quotes return confirm("{l s='You will lose all unsaved modifications. Are you sure that you\'d like to proceed?' js=1}"); diff --git a/admin-dev/themes/default/template/controllers/products/helpers/tree/tree_associated_categories.tpl b/admin-dev/themes/default/template/controllers/products/helpers/tree/tree_associated_categories.tpl index 0239a9894..d55869f9f 100644 --- a/admin-dev/themes/default/template/controllers/products/helpers/tree/tree_associated_categories.tpl +++ b/admin-dev/themes/default/template/controllers/products/helpers/tree/tree_associated_categories.tpl @@ -38,6 +38,14 @@ function() { $(this).prop("checked", true); + + $('select#id_category_default').append(''); + if ($('select#id_category_default option').length > 0) + { + $('select#id_category_default').closest('.form-group').show(); + $('#no_default_category').hide(); + } + $(this).parent().addClass("tree-selected"); } ); @@ -49,6 +57,14 @@ function() { $(this).prop("checked", false); + + $('select#id_category_default option[value='+$(this).val()+']').remove(); + if ($('select#id_category_default option').length == 0) + { + $('select#id_category_default').closest('.form-group').hide(); + $('#no_default_category').show(); + } + $(this).parent().removeClass("tree-selected"); } ); @@ -112,5 +128,29 @@ } ); {/if} + + $("#{$id}").find(":input[type=checkbox]").click( + function() + { + if ($(this).prop("checked")) + { + $('select#id_category_default').append(''); + if ($('select#id_category_default option').length > 0) + { + $('select#id_category_default').closest('.form-group').show(); + $('#no_default_category').hide(); + } + } + else + { + $('select#id_category_default option[value='+$(this).val()+']').remove(); + if ($('select#id_category_default option').length == 0) + { + $('select#id_category_default').closest('.form-group').hide(); + $('#no_default_category').show(); + } + } + } + ); }); \ No newline at end of file diff --git a/admin-dev/themes/default/template/controllers/shop/helpers/form/form.tpl b/admin-dev/themes/default/template/controllers/shop/helpers/form/form.tpl index f5b9aa1e0..5f76d4f67 100644 --- a/admin-dev/themes/default/template/controllers/shop/helpers/form/form.tpl +++ b/admin-dev/themes/default/template/controllers/shop/helpers/form/form.tpl @@ -57,7 +57,7 @@ }, function(res) { - $('#categories-treeview').parent().html(res); + $('#categories-tree').parent().parent().html(res); } ); }); diff --git a/admin-dev/themes/default/template/helpers/tree/tree_node_item_checkbox.tpl b/admin-dev/themes/default/template/helpers/tree/tree_node_item_checkbox.tpl index ca0235597..f7f6f17d8 100644 --- a/admin-dev/themes/default/template/helpers/tree/tree_node_item_checkbox.tpl +++ b/admin-dev/themes/default/template/helpers/tree/tree_node_item_checkbox.tpl @@ -23,9 +23,9 @@ * International Registered Trademark & Property of PrestaShop SA *}
  • - + + + + +
  • \ No newline at end of file diff --git a/classes/FileUploader.php b/classes/FileUploader.php index 695217189..6bfd71e25 100755 --- a/classes/FileUploader.php +++ b/classes/FileUploader.php @@ -248,9 +248,13 @@ class QqUploadedFileXhr public function getSize() { - if (isset($_SERVER['CONTENT_LENGTH'])) - return (int)$_SERVER['CONTENT_LENGTH']; - else - throw new Exception('Getting content length is not supported.'); + if (isset($_SERVER['CONTENT_LENGTH']) || isset($_SERVER['HTTP_CONTENT_LENGTH'])) + { + if (isset($_SERVER['HTTP_CONTENT_LENGTH'])) + return (int)$_SERVER['HTTP_CONTENT_LENGTH']; + else + return (int)$_SERVER['CONTENT_LENGTH']; + } + return false; } -} +} \ No newline at end of file diff --git a/classes/helper/Helper.php b/classes/helper/Helper.php index fe2f4af50..041f6cc60 100755 --- a/classes/helper/Helper.php +++ b/classes/helper/Helper.php @@ -87,9 +87,9 @@ class HelperCore $override_tpl_path = _PS_MODULE_DIR_.$this->module->name.'/views/templates/admin/_configure/'.$this->override_folder.$this->base_folder.$tpl_name; else { - if (file_exists($this->context->smarty->getTemplateDir(1).DIRECTORY_SEPARATOR.$this->override_folder.$this->base_folder.$tpl_name)) - $override_tpl_path = $this->context->smarty->getTemplateDir(1).DIRECTORY_SEPARATOR.$this->override_folder.$this->base_folder.$tpl_name; - else if (file_exists($this->context->smarty->getTemplateDir(0).DIRECTORY_SEPARATOR.'controllers'.DIRECTORY_SEPARATOR.$this->override_folder.$this->base_folder.$tpl_name)) + if (file_exists($this->context->smarty->getTemplateDir(1).$this->override_folder.$this->base_folder.$tpl_name)) + $override_tpl_path = $this->context->smarty->getTemplateDir(1).$this->override_folder.$this->base_folder.$tpl_name; + else if (file_exists($this->context->smarty->getTemplateDir(0).'controllers'.DIRECTORY_SEPARATOR.$this->override_folder.$this->base_folder.$tpl_name)) $override_tpl_path = $this->context->smarty->getTemplateDir(0).'controllers'.DIRECTORY_SEPARATOR.$this->override_folder.$this->base_folder.$tpl_name; } diff --git a/controllers/admin/AdminAttributesGroupsController.php b/controllers/admin/AdminAttributesGroupsController.php index b8eb2051a..68c3e79a2 100644 --- a/controllers/admin/AdminAttributesGroupsController.php +++ b/controllers/admin/AdminAttributesGroupsController.php @@ -527,6 +527,10 @@ class AdminAttributesGroupsControllerCore extends AdminController 'desc' => $this->l('Add New Attributes') ); } + $this->toolbar_btn['import'] = array( + 'href' => $this->context->link->getAdminLink('AdminImport', true).'&import_type=combinations', + 'desc' => $this->l('Import') + ); } public function initToolbarTitle() diff --git a/controllers/admin/AdminCustomersController.php b/controllers/admin/AdminCustomersController.php index 6cd78c84e..133cf38d6 100644 --- a/controllers/admin/AdminCustomersController.php +++ b/controllers/admin/AdminCustomersController.php @@ -60,8 +60,11 @@ class AdminCustomersControllerCore extends AdminController $titles_array[$gender->id_gender] = $gender->name; $this->_select = ' - a.date_add, gl.name as title, - IF (YEAR(`birthday`) = 0, "-", (YEAR(CURRENT_DATE)-YEAR(`birthday`)) - (RIGHT(CURRENT_DATE, 5) < RIGHT(birthday, 5))) AS `age`, ( + a.date_add, gl.name as title, ( + SELECT SUM(total_paid_tax_excl / conversion_rate) FROM '._DB_PREFIX_.'orders o + WHERE o.id_customer = a.id_customer + AND active = 1 + ) as total_spent, ( SELECT c.date_add FROM '._DB_PREFIX_.'guest g LEFT JOIN '._DB_PREFIX_.'connections c ON c.id_guest = g.id_guest WHERE g.id_customer = a.id_customer @@ -92,10 +95,12 @@ class AdminCustomersControllerCore extends AdminController 'email' => array( 'title' => $this->l('Email address') ), - 'age' => array( - 'title' => $this->l('Age'), + 'total_spent' => array( + 'title' => $this->l('Sales'), + 'type' => 'price', 'search' => false, - 'align' => 'center' + 'havingFilter' => true, + 'align' => 'right' ), 'active' => array( 'title' => $this->l('Enabled'), diff --git a/controllers/admin/AdminDashboardController.php b/controllers/admin/AdminDashboardController.php index 47fa4106f..015e417af 100644 --- a/controllers/admin/AdminDashboardController.php +++ b/controllers/admin/AdminDashboardController.php @@ -236,6 +236,7 @@ class AdminDashboardControllerCore extends AdminController 'new_version_url' => Tools::getCurrentUrlProtocolPrefix().'api.prestashop.com/version/check_version.php?v='._PS_VERSION_.'&lang='.$this->context->language->iso_code, 'dashboard_use_push' => Configuration::get('PS_DASHBOARD_USE_PUSH'), 'calendar' => $calendar_helper->generate(), + 'PS_DASHBOARD_SIMULATION' => Configuration::get('PS_DASHBOARD_SIMULATION'), 'datepickerFrom' => Tools::getValue('datepickerFrom', $this->context->employee->stats_date_from), 'datepickerTo' => Tools::getValue('datepickerTo', $this->context->employee->stats_date_to) ); diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index c121de902..9234c00fd 100755 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -46,10 +46,14 @@ class AdminOrdersControllerCore extends AdminController CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) AS `customer`, osl.`name` AS `osname`, os.`color`, - IF((SELECT COUNT(so.id_order) FROM `'._DB_PREFIX_.'orders` so WHERE so.id_customer = a.id_customer) > 1, 0, 1) as new'; + IF((SELECT COUNT(so.id_order) FROM `'._DB_PREFIX_.'orders` so WHERE so.id_customer = a.id_customer) > 1, 0, 1) as new, + country_lang.name as cname'; $this->_join = ' LEFT JOIN `'._DB_PREFIX_.'customer` c ON (c.`id_customer` = a.`id_customer`) + INNER JOIN `'._DB_PREFIX_.'address` address ON address.id_address = a.id_address_delivery + INNER JOIN `'._DB_PREFIX_.'country` country ON address.id_country = country.id_country + INNER JOIN `'._DB_PREFIX_.'country_lang` country_lang ON (country.`id_country` = country_lang.`id_country` AND country_lang.`id_lang` = '.(int)$this->context->language->id.') LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (os.`id_order_state` = a.`current_state`) LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.(int)$this->context->language->id.')'; $this->_orderBy = 'id_order'; @@ -115,6 +119,34 @@ class AdminOrdersControllerCore extends AdminController 'search' => false, 'remove_onclick' => true) ); + + if (Country::isCurrentlyUsed('country', true)) + { + $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + SELECT DISTINCT c.id_country, cl.`name` + FROM `'._DB_PREFIX_.'orders` o + '.Shop::addSqlAssociation('orders', 'o').' + INNER JOIN `'._DB_PREFIX_.'address` a ON a.id_address = o.id_address_delivery + INNER JOIN `'._DB_PREFIX_.'country` c ON a.id_country = c.id_country + INNER JOIN `'._DB_PREFIX_.'country_lang` cl ON (c.`id_country` = cl.`id_country` AND cl.`id_lang` = '.(int)$this->context->language->id.') + ORDER BY cl.name ASC'); + + $country_array = array(); + foreach ($result as $row) + $country_array[$row['id_country']] = $row['name']; + + $part1 = array_slice($this->fields_list, 0, 3); + $part2 = array_slice($this->fields_list, 3); + $part1['cname'] = array( + 'title' => $this->l('Delivery'), + 'type' => 'select', + 'list' => $country_array, + 'filter_key' => 'country!id_country', + 'filter_type' => 'int', + 'order_key' => 'cname' + ); + $this->fields_list = array_merge($part1, $part2); + } $this->shopLinkType = 'shop'; $this->shopShareDatas = Shop::SHARE_ORDER; diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index 69aebd564..34ef4b96e 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -2479,6 +2479,11 @@ class AdminProductsControllerCore extends AdminController 'class' => 'toolbar-new' ); } + else + $this->toolbar_btn['import'] = array( + 'href' => $this->context->link->getAdminLink('AdminImport', true).'&import_type=products', + 'desc' => $this->l('Import') + ); $this->context->smarty->assign('toolbar_scroll', 1); $this->context->smarty->assign('show_toolbar', 1); diff --git a/controllers/admin/AdminShopController.php b/controllers/admin/AdminShopController.php index 1fcea5901..7481cd218 100755 --- a/controllers/admin/AdminShopController.php +++ b/controllers/admin/AdminShopController.php @@ -203,8 +203,9 @@ class AdminShopControllerCore extends AdminController $children = Category::getChildren($root_category['id_category'], $this->context->language->id); foreach ($children as $child) $selected_cat[] = $child['id_category']; - $helper = new Helper(); - $this->content = $helper->renderCategoryTree($root_category, $selected_cat); + + $helper = new HelperTreeCategories('categories-tree', null, $root_category['id_category']); + $this->content = $helper->setSelectedCategories($selected_cat)->setUseSearch(true)->setUseCheckBox(true)->render(); } parent::displayAjax(); } diff --git a/docs/csv_import/categories_import.csv b/docs/csv_import/categories_import.csv index 96024f6e5..8a2e353b9 100644 --- a/docs/csv_import/categories_import.csv +++ b/docs/csv_import/categories_import.csv @@ -1,4 +1,4 @@ -ID;Active (0/1);Name *;Parent category;Root category (0/1) ;Description;Meta title;Meta keywords;Meta description;URL rewritten;Image URL +ID;Active (0/1);Name *;Parent category;Root category (0/1);Description;Meta title;Meta keywords;Meta description;URL rewritten;Image URL 10;1;iPods;Home;0;Now that you can buy movies from the iTunes Store and sync them to your iPod, the whole world is your theater.;Meta title-iPods;Meta keywords-iPods;Meta description-iPods;music-ipods;http://yourlinktotheimage.com/img1000.jpg 11;1;Accessories;Home;0;Wonderful accessories for your iPod;Meta title-Accessories;Meta keywords-Accessories;Meta description-Accessories;accessories-ipod;http://yourlinktotheimage.com/img1001.jpg 12;1;Laptops;Home;0;The latest Intel processor, a bigger hard drive, plenty of memory, and even more new features all fit inside just one liberating inch. The new Mac laptops have the performance, power, and connectivity of a desktop computer. Without the desk part.;Meta title-Laptops;Meta keywords-Laptops;Meta description-Laptops;laptops;http://yourlinktotheimage.com/img1002.jpg diff --git a/docs/csv_import/combinations_import.csv b/docs/csv_import/combinations_import.csv index e8373297b..ffdcc861f 100644 --- a/docs/csv_import/combinations_import.csv +++ b/docs/csv_import/combinations_import.csv @@ -1,4 +1,4 @@ -Product ID*;Attribute (Name:Type:Position)*;Value (Value:Position)*;Supplier reference;Reference;EAN13;UPC;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Image position;Image URL;Delete existing images (0 = No, 1 = Yes);ID / Name of shop  +Product ID*;Attribute (Name:Type:Position)*;Value (Value:Position)*;Supplier reference;Reference;EAN13;UPC;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Image position;Image URL;Delete existing images (0 = No, 1 = Yes);ID / Name of shop 1;Color:color:0, Disk space:select:1;Blue:0, 16GB:1;RF-Nano-Blue-16GB;RP-Nano-Blue-16GB;0000080446392;;100;40;;10;1;0;0;1;http://youdomain.com/img.jpg;1; 1;Color:color:0, Disk space:select:1;Blue:0, 8GB:1;RF-Nano-Blue-8GB;RP-Nano-Blue-8GB;0000080446393;;80;0;;10;1;0;0;2;http://youdomain.com/img.jpg;1; 1;Color:color:0, Disk space:select:1;Yellow:0, 16GB:1;RF-Nano-Yellow-16GB;RP-Nano-Yellow-16GB;0000080446394;;100;40;;10;1;0;0;3;http://youdomain.com/img.jpg;1; diff --git a/docs/csv_import/products_import.csv b/docs/csv_import/products_import.csv index 2757ec186..ed03aaa89 100644 --- a/docs/csv_import/products_import.csv +++ b/docs/csv_import/products_import.csv @@ -1,4 +1,4 @@ -ID;Active (0/1);Name *;Categories (x,y,z...);Price tax excluded or Price tax included;Tax rules ID;Wholesale price;On sale (0/1);Discount amount;Discount percent;Discount from (yyyy-mm-dd);Discount to (yyyy-mm-dd);Reference #;Supplier reference #;Supplier;Manufacturer;EAN13;UPC;Ecotax;;;;Weight;Quantity;;;;;;Short description;Description;Tags (x,y,z...);Meta title;Meta keywords;Meta description;URL rewritten;Text when in stock;Text when backorder allowed;Available for order (0 = No, 1 = Yes);Product available date;Product creation date;Show price (0 = No, 1 = Yes);Image URLs (x,y,z...);Delete existing images (0 = No, 1 = Yes);Feature(Name:Value:Position);Available online only (0 = No, 1 = Yes);Condition;Customizable (0 = No, 1 = Yes);Uploadable files (0 = No, 1 = Yes);Text fields (0 = No, 1 = Yes);Out_of_stock;Advanced stock management;ID / Name of shop  +ID;Active (0/1);Name *;Categories (x,y,z...);Price tax excluded or Price tax included;Tax rules ID;Wholesale price;On sale (0/1);Discount amount;Discount percent;Discount from (yyyy-mm-dd);Discount to (yyyy-mm-dd);Reference #;Supplier reference #;Supplier;Manufacturer;EAN13;UPC;Ecotax;Width;Height;Depth;Weight;Quantity;Minimal quantity;Visibility;Additional shipping cost;Unity;Unit price ratio;Short description;Description;Tags (x,y,z...);Meta title;Meta keywords;Meta description;URL rewritten;Text when in stock;Text when backorder allowed;Available for order (0 = No, 1 = Yes);Product available date;Product creation date;Show price (0 = No, 1 = Yes);Image URLs (x,y,z...);Delete existing images (0 = No, 1 = Yes);Feature(Name:Value:Position);Available online only (0 = No, 1 = Yes);Condition;Customizable (0 = No, 1 = Yes);Uploadable files (0 = No, 1 = Yes);Text fields (0 = No, 1 = Yes);Out_of_stock;Advanced stock management;ID / Name of shop 1;1;iPod Nano;iPods;100;1;80;1;;5.5;2013-06-01;2018-12-31;RP-demo_1;RF-demo_1;Applestore;Apple;1234567890123;;1;0.6;0.2;0.4;0.068357;160;1;;;;;

    New design.

    ;

    New design.

    ;apple, ipod, nano;Meta title-Nano;Meta keywords-Nano;Meta description-Nano;iPod-Nano;In Stock;Current supply. Ordering availlable;1;2013-03-01;2013-01-01;1;http://localhost/prestashop_1.5.6.0/img/p/1/5/15.jpg;0;;0;new;0;0;0;0;0; 2;1;iPod shuffle;iPods;60;1;40;1;;;2013-06-01;2018-12-31;RP-demo_2;RF-demo_2;Applestore;Apple;1234567890123;;1;0.1;0.1;0.1;0.027563;120;1;both;;;;

    New design.

    ;

    New design.

    ;ipod, shuffle;Meta title-Shuffle;Meta keywords-Shuffle;Meta description-Shuffle;iPod-shuffle;In Stock;Current supply. Ordering availlable;1;2013-03-01;2013-01-02;1;http://localhost/prestashop_1.5.6.0/img/p/2/3/23.jpg;0;;0;new;0;0;0;0;0; 3;1;MacBook Air;Laptops;1500;1;1000;1;100;;2013-06-01;2018-12-31;RP-demo_3;RF-demo_3;Applestore;Apple;1234567890123;;2;1.31;0.3;1;2.976846;400;1;catalog;;;;

    New design.

    ;

    New design.

    ;MacBook, Air;Meta title-McBookAir;Meta keywords-McBookAir;Meta description-McBookAir;MacBook-Air;In Stock;Current supply. Ordering availlable;1;2013-03-01;2013-01-03;1;http://localhost/prestashop_1.5.6.0/img/p/1/1.jpg;1;;0;new;0;0;0;0;0; diff --git a/docs/csv_import/suppliers_import.csv b/docs/csv_import/suppliers_import.csv index e69397b22..e833edf36 100644 --- a/docs/csv_import/suppliers_import.csv +++ b/docs/csv_import/suppliers_import.csv @@ -1,4 +1,4 @@ -ID;Active (0/1);Name *;Description;Short description;Meta title;Meta keywords;Meta description -1;1;Applestore;

    The Apple Store is a chain of retail stores owned and operated by Apple Inc., dealing in computers and consumer electronics. The stores sell Macintosh personal computers, software, iPods, iPads, iPhones, third-party accessories, and other consumer electronics such as Apple TV. Some high profile stores feature a Theatre for presentations and workshops and a Studio for training with Apple products; all stores offer a Genius Bar for technical support and repairs, as well as free workshops available to the public. Under the leadership of Ron Johnson, the former Senior Vice President of Retail Operations, the Apple Stores have, according to an article in the New York Times, been responsible for "[turning] the boring computer sales floor into a sleek playroom filled with gadgets".

    ;;Meta title-Applestore;Meta keywords-Applestore;Meta description-Applestore -2;1;Shure Online Store;

    - No description -

    ;;Meta title-Shure Online Store;Meta keywords-Shure Online Store;Meta description-Shure Online Store -3;1;Nippon Electronic Import;

    - No description -

    ;;Meta title-Nippon Electronic Import;Meta keywords-Nippon Electronic Import;Meta description-Nippon Electronic Import +ID;Active (0/1);Name *;Description;Short description;Meta title;Meta keywords;Meta description;Image URL +1;1;Applestore;

    The Apple Store is a chain of retail stores owned and operated by Apple Inc., dealing in computers and consumer electronics. The stores sell Macintosh personal computers, software, iPods, iPads, iPhones, third-party accessories, and other consumer electronics such as Apple TV. Some high profile stores feature a Theatre for presentations and workshops and a Studio for training with Apple products; all stores offer a Genius Bar for technical support and repairs, as well as free workshops available to the public. Under the leadership of Ron Johnson, the former Senior Vice President of Retail Operations, the Apple Stores have, according to an article in the New York Times, been responsible for "[turning] the boring computer sales floor into a sleek playroom filled with gadgets".

    ;Meta title-Applestore;Meta keywords-Applestore;Meta description-Applestore;http://localhost/prestashop/img/su/Pic-of-this-supplier.jpg +2;1;Shure Online Store;

    - No description -

    ;

    - No description -

    ;Meta title-Shure Online Store;Meta keywords-Shure Online Store;Meta description-Shure Online Store;http://localhost/prestashop/img/su/Pic-of-this-supplier-2.jpg +3;1;Nippon Electronic Import;

    - No description -

    ;

    - No description -

    ;Meta title-Nippon Electronic Import;Meta keywords-Nippon Electronic Import;Meta description-Nippon Electronic Import;http://localhost/prestashop/img/su/Pic-of-this-supplier-3.jpg diff --git a/install-dev/controllers/http/system.php b/install-dev/controllers/http/system.php index 72f7377a4..1f0c04462 100644 --- a/install-dev/controllers/http/system.php +++ b/install-dev/controllers/http/system.php @@ -74,6 +74,9 @@ class InstallControllerHttpSystem extends InstallControllerHttp if (!isset($this->tests['optional'])) $this->tests['optional'] = $this->model_system->checkOptionalTests(); + if (!is_callable('getenv') || !($user = @getenv('APACHE_RUN_USER'))) + $user = 'Apache'; + // Generate display array $this->tests_render = array( 'required' => array( @@ -96,21 +99,21 @@ class InstallControllerHttpSystem extends InstallControllerHttp ) ), array( - 'title' => $this->l('Recursive write permissions on files and folders:'), + 'title' => $this->l('Permissions on files and folders'), 'success' => 1, 'checks' => array( - 'config_dir' => '~/config/', - 'cache_dir' => '~/cache/', - 'log_dir' => '~/log/', - 'img_dir' => '~/img/', - 'mails_dir' => '~/mails/', - 'module_dir' => '~/modules/', - 'theme_lang_dir' => '~/themes/default/lang/', - 'theme_pdf_lang_dir' => '~/themes/default/pdf/lang/', - 'theme_cache_dir' => '~/themes/default/cache/', - 'translations_dir' => '~/translations/', - 'customizable_products_dir' => '~/upload/', - 'virtual_products_dir' => '~/download/' + 'config_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/config/'), + 'cache_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/cache/'), + 'log_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/log/'), + 'img_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/img/'), + 'mails_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/mails/'), + 'module_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/modules/'), + 'theme_lang_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/themes/default/lang/'), + 'theme_pdf_lang_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/themes/default/pdf/lang/'), + 'theme_cache_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/themes/default/cache/'), + 'translations_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/translations/'), + 'customizable_products_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/upload/'), + 'virtual_products_dir' => $this->l('Recursive write permissions for %1$s user on %2$s', $user, '~/download/') ) ), ), diff --git a/js/admin-products.js b/js/admin-products.js index d2bb9d835..f4ed2d7e5 100644 --- a/js/admin-products.js +++ b/js/admin-products.js @@ -145,7 +145,6 @@ product_tabs['Combinations'] = new function(){ this.bindDefault = function(){ $('table[id=combinations-list]').delegate('a.default', 'click', function(e){ e.preventDefault(); - console.log('ok'); self.defaultProductAttribute(this.href, this); }); }; diff --git a/modules/blocklayered/blocklayered.js b/modules/blocklayered/blocklayered.js index e1ec5b2de..0a2301555 100644 --- a/modules/blocklayered/blocklayered.js +++ b/modules/blocklayered/blocklayered.js @@ -123,7 +123,7 @@ $(document).ready(function() hideFilterValueAction(this); }); - // To be sure there is no other events attached to the selectPrductSort, change the ID + // To be sure there is no other events attached to the selectProductSort, change the ID var id = 1; while ($('#selectPrductSort').length) { // Because ids are duplicated // Unbind event change on #selectPrductSort @@ -134,8 +134,18 @@ $(document).ready(function() $('label[for=selectPrductSort]').attr('for', 'selectPrductSort'+id); id++; } + + while ($('#selectProductSort').length) { // Because ids are duplicated + // Unbind event change on #selectProductSort + $('#selectProductSort').unbind('change'); + $('#selectProductSort').attr('onchange', ''); + $('#selectProductSort').addClass('selectProductSort'); + $('#selectProductSort').attr('id', 'selectProductSort'+id); + $('label[for=selectProductSort]').attr('for', 'selectProductSort'+id); + id++; + } - // Since 1.5, event is add to .selectProductSort and not to #selectPrductSort + // Since 1.5, event is add to .selectProductSort and not to #selectProductSort setTimeout(function() { $('.selectProductSort').unbind('change'); }, 100); diff --git a/modules/blocklayered/blocklayered.php b/modules/blocklayered/blocklayered.php index 5bba0bbe3..3ec7fa4b1 100644 --- a/modules/blocklayered/blocklayered.php +++ b/modules/blocklayered/blocklayered.php @@ -1347,7 +1347,9 @@ class BlockLayered extends Module $this->context->controller->addJS(($this->_path).'blocklayered.js'); - $this->context->controller->addJQueryUI('ui.slider'); + $this->context->controller->addJS(_PS_JS_DIR_.'jquery/jquery-ui-1.8.10.custom.min.js'); + $this->context->controller->addJQueryUI('ui.slider'); + $this->context->controller->addCSS(_PS_CSS_DIR_.'jquery-ui-1.8.10.custom.css"'); $this->context->controller->addCSS(($this->_path).'blocklayered-15.css', 'all'); $this->context->controller->addJQueryPlugin('scrollTo'); @@ -1435,7 +1437,7 @@ class BlockLayered extends Module //shop->id.' and cl.id_lang = '.$id_lang.') WHERE c.nleft > '.(int)$parent->nleft.' AND c.nright < '.(int)$parent->nright.' '.($depth ? 'AND c.level_depth <= '.($parent->level_depth+(int)$depth) : '').' @@ -3166,6 +3168,23 @@ class BlockLayered extends Module if (isset($selected_filters['id_feature'][$feature['id_feature_value']])) $feature_array[$feature['id_feature']]['values'][$feature['id_feature_value']]['checked'] = true; } + + //Natural sort + foreach ($feature_array as $key => $value) + { + $temp = array(); + foreach ($feature_array[$key]['values'] as $keyint => $valueint) + $temp[$keyint] = $valueint['name']; + + natcasesort($temp); + $temp2 = array(); + + foreach ($temp as $keytemp => $valuetemp) + $temp2[$keytemp] = $feature_array[$key]['values'][$keytemp]; + + $feature_array[$key]['values'] = $temp2; + } + $filter_blocks = array_merge($filter_blocks, $feature_array); } break; diff --git a/modules/blocklayered/blocklayered.tpl b/modules/blocklayered/blocklayered.tpl index f514f7231..006d6dab8 100644 --- a/modules/blocklayered/blocklayered.tpl +++ b/modules/blocklayered/blocklayered.tpl @@ -94,7 +94,7 @@ param_product_url = ''; {if $value.nbr || !$hide_0_values}
  • {if isset($filter.is_color_group) && $filter.is_color_group} - + {if isset($value.checked) && $value.checked}{/if} {else} @@ -115,7 +115,7 @@ param_product_url = ''; {if $value.nbr || !$hide_0_values}
  • {if isset($filter.is_color_group) && $filter.is_color_group} - + {if isset($value.checked) && $value.checked}{/if} {else} diff --git a/modules/blockwishlist/blockwishlist.php b/modules/blockwishlist/blockwishlist.php index 2eb63f795..074e72b61 100644 --- a/modules/blockwishlist/blockwishlist.php +++ b/modules/blockwishlist/blockwishlist.php @@ -38,7 +38,7 @@ class BlockWishList extends Module { $this->name = 'blockwishlist'; $this->tab = 'front_office_features'; - $this->version = 0.3; + $this->version = 0.4; $this->author = 'PrestaShop'; $this->need_instance = 0; @@ -258,7 +258,7 @@ class BlockWishList extends Module $this->_html .= ' - '.htmlentities($product['name'], ENT_COMPAT, 'UTF-8').' + '.htmlentities($product['name'], ENT_COMPAT, 'UTF-8').' '.$product['name']; if (isset($product['attributes_small'])) $this->_html .= '
    '.htmlentities($product['attributes_small'], ENT_COMPAT, 'UTF-8').''; @@ -409,7 +409,7 @@ class BlockWishList extends Module foreach ($products as $key => $val) { $image = Image::getCover($val['id_product']); - $products[$key]['image'] = $this->context->link->getImageLink($val['link_rewrite'], $image['id_image'], 'small'); + $products[$key]['image'] = $this->context->link->getImageLink($val['link_rewrite'], $image['id_image'], ImageType::getFormatedName('small')); } $fields_list = array( diff --git a/modules/blockwishlist/config.xml b/modules/blockwishlist/config.xml index 43c96a918..1bd0cf514 100755 --- a/modules/blockwishlist/config.xml +++ b/modules/blockwishlist/config.xml @@ -2,7 +2,7 @@ blockwishlist - + diff --git a/modules/blockwishlist/managewishlist.tpl b/modules/blockwishlist/managewishlist.tpl index 171cbae10..82990caba 100644 --- a/modules/blockwishlist/managewishlist.tpl +++ b/modules/blockwishlist/managewishlist.tpl @@ -52,7 +52,7 @@
    diff --git a/modules/blockwishlist/view.tpl b/modules/blockwishlist/view.tpl index 24f1b5971..5d10b5717 100644 --- a/modules/blockwishlist/view.tpl +++ b/modules/blockwishlist/view.tpl @@ -46,7 +46,7 @@
    diff --git a/themes/default-bootstrap/header.tpl b/themes/default-bootstrap/header.tpl index bbc681892..6fc22eade 100644 --- a/themes/default-bootstrap/header.tpl +++ b/themes/default-bootstrap/header.tpl @@ -62,11 +62,11 @@ var priceDisplayMethod = {$priceDisplay}; var roundMode = {$roundMode}; - - - - - + + + + + {if isset($css_files)} @@ -79,18 +79,18 @@ {/foreach} {/if} - + - - - - - - - + + + + + + + {$HOOK_HEADER} diff --git a/themes/default-bootstrap/js/jquery/jquery.uniform-modify.js b/themes/default-bootstrap/js/jquery/jquery.uniform-modify.js index 301991aa8..1344cf021 100644 --- a/themes/default-bootstrap/js/jquery/jquery.uniform-modify.js +++ b/themes/default-bootstrap/js/jquery/jquery.uniform-modify.js @@ -1073,6 +1073,8 @@ $(window).load(function () { $("select.form-control,input[type='checkbox']:not(.comparator), input[type='radio'],input#id_carrier2, input[type='file']").uniform(); $("#uniform-selectPrductSort1").innerWidth(0); $("#uniform-selectPrductSort1 span").innerWidth(0); + $("#uniform-selectProductSort1").innerWidth(0); + $("#uniform-selectProductSort1 span").innerWidth(0); }); diff --git a/themes/default-bootstrap/js/modules/blocklayered/blocklayered.js b/themes/default-bootstrap/js/modules/blocklayered/blocklayered.js index 8c43c4c55..c79358722 100644 --- a/themes/default-bootstrap/js/modules/blocklayered/blocklayered.js +++ b/themes/default-bootstrap/js/modules/blocklayered/blocklayered.js @@ -123,7 +123,7 @@ $(document).ready(function() hideFilterValueAction(this); }); - // To be sure there is no other events attached to the selectPrductSort, change the ID + // To be sure there is no other events attached to the selectProductSort, change the ID var id = 1; while ($('#selectPrductSort').length) { // Because ids are duplicated // Unbind event change on #selectPrductSort @@ -134,6 +134,16 @@ $(document).ready(function() $('label[for=selectPrductSort]').attr('for', 'selectPrductSort'+id); id++; } + + while ($('#selectProductSort').length) { // Because ids are duplicated + // Unbind event change on #selectProductSort + $('#selectProductSort').unbind('change'); + $('#selectProductSort').attr('onchange', ''); + $('#selectProductSort').addClass('selectProductSort'); + $('#selectProductSort').attr('id', 'selectProductSort'+id); + $('label[for=selectProductSort]').attr('for', 'selectProductSort'+id); + id++; + } // Since 1.5, event is add to .selectProductSort and not to #selectPrductSort setTimeout(function() { diff --git a/themes/default-bootstrap/mobile/category-product-sort.tpl b/themes/default-bootstrap/mobile/category-product-sort.tpl index 0b94a2f8e..81c6ca23d 100644 --- a/themes/default-bootstrap/mobile/category-product-sort.tpl +++ b/themes/default-bootstrap/mobile/category-product-sort.tpl @@ -40,7 +40,7 @@ //
    - {if !$PS_CATALOG_MODE} diff --git a/themes/default-bootstrap/product-sort.tpl b/themes/default-bootstrap/product-sort.tpl index 18a75b361..2f1a9fb01 100644 --- a/themes/default-bootstrap/product-sort.tpl +++ b/themes/default-bootstrap/product-sort.tpl @@ -60,8 +60,8 @@ $(document).ready(function(){ {/if}
    - - {if !$PS_CATALOG_MODE}