diff --git a/admin-dev/themes/default/admin.css b/admin-dev/themes/default/admin.css index 04de1a479..e4413bc5e 100644 --- a/admin-dev/themes/default/admin.css +++ b/admin-dev/themes/default/admin.css @@ -368,7 +368,7 @@ form#product_form h4 { font-size:18px; font-weight:normal;} .blocLiveEdit { float:right; clear:right; background-color: #EBEDF4; border: 1px solid #C2C4D9;display: block; width:250px;} .blocLiveEdit h2 { background: transparent url(live_edit.png) no-repeat scroll 10px 10px; height: 40px; line-height: 50px;margin: 0; padding: 0 10px; text-indent: 40px;} .blocLiveEdit p { padding: 0 10px;} -.blocLiveEdit a.button {�float: left; margin:10px; display: inline-block;} +.blocLiveEdit a.button {float: left; margin:10px; display: inline-block;} #modulePosition { width:100%; float:left; clear:left; margin-right:270px;} diff --git a/admin-dev/themes/template/attribute_generator/content.tpl b/admin-dev/themes/template/attribute_generator/content.tpl index a8959943b..4d7558662 100644 --- a/admin-dev/themes/template/attribute_generator/content.tpl +++ b/admin-dev/themes/template/attribute_generator/content.tpl @@ -120,11 +120,10 @@
- {foreach $attribute_groups as $k => $attribute_group} {if isset($attribute_js[$attribute_group['id_attribute_group']])} - '; + {foreach $attribute_js[$attribute_group['id_attribute_group']] as $k => $v} {/foreach} diff --git a/controllers/admin/AdminAttributeGeneratorController.php b/controllers/admin/AdminAttributeGeneratorController.php index b7696ce15..0bde8609a 100644 --- a/controllers/admin/AdminAttributeGeneratorController.php +++ b/controllers/admin/AdminAttributeGeneratorController.php @@ -35,25 +35,25 @@ class AdminAttributeGeneratorControllerCore extends AdminController public function __construct() { $this->table = 'product_attribute'; - $this->className = 'Product'; + $this->className = 'Product'; parent::__construct(); } private function addAttribute($arr, $price = 0, $weight = 0) { - foreach ($arr AS $attr) + foreach ($arr as $attr) { - $price += (float)($_POST['price_impact_'.(int)($attr)]); - $weight += (float)($_POST['weight_impact'][(int)($attr)]); + $price += (float)$_POST['price_impact_'.(int)$attr]; + $weight += (float)$_POST['weight_impact'][(int)$attr]; } if ($this->product->id) { return (array( - 'id_product' => (int)($this->product->id), - 'price' => (float)($price), - 'weight' => (float)($weight), + 'id_product' => (int)$this->product->id, + 'price' => (float)$price, + 'weight' => (float)$weight, 'ecotax' => 0, - 'quantity' => (int)($_POST['quantity']), + 'quantity' => (int)$_POST['quantity'], 'reference' => pSQL($_POST['reference']), 'default_on' => 0, 'available_date' => '0000-00-00')); @@ -61,24 +61,24 @@ class AdminAttributeGeneratorControllerCore extends AdminController return array(); } - static private function createCombinations($list) + private static function createCombinations($list) { - if (sizeof($list) <= 1) - return sizeof($list) ? array_map(create_function('$v', 'return (array($v));'), $list[0]) : $list; + if (count($list) <= 1) + return count($list) ? array_map(create_function('$v', 'return (array($v));'), $list[0]) : $list; $res = array(); $first = array_pop($list); - foreach ($first AS $attribute) + foreach ($first as $attribute) { $tab = self::createCombinations($list); - foreach ($tab AS $toAdd) - $res[] = is_array($toAdd) ? array_merge($toAdd, array($attribute)) : array($toAdd, $attribute); + foreach ($tab as $to_add) + $res[] = is_array($to_add) ? array_merge($to_add, array($attribute)) : array($to_add, $attribute); } return $res; } public function postProcess() { - $this->product = new Product((int)(Tools::getValue('id_product'))); + $this->product = new Product((int)Tools::getValue('id_product')); if (isset($_POST['generate'])) { @@ -87,7 +87,7 @@ class AdminAttributeGeneratorControllerCore extends AdminController else { $tab = array_values($_POST['options']); - if (sizeof($tab) AND Validate::isLoadedObject($this->product)) + if (count($tab) && Validate::isLoadedObject($this->product)) { self::setAttributesImpacts($this->product->id, $tab); $this->combinations = array_values(self::createCombinations($tab)); @@ -101,40 +101,40 @@ class AdminAttributeGeneratorControllerCore extends AdminController $this->_errors[] = Tools::displayError('Unable to initialize parameters, combination is missing or object cannot be loaded.'); } } - elseif (isset($_POST['back'])) - Tools::redirectAdmin(self::$currentIndex.'&id_product='.(int)(Tools::getValue('id_product')).'&addproduct'.'&tabs=3&token='.Tools::getValue('token')); + else if (isset($_POST['back'])) + Tools::redirectAdmin(self::$currentIndex.'&id_product='.(int)Tools::getValue('id_product').'&addproduct'.'&tabs=3&token='.Tools::getValue('token')); parent::postProcess(); } private static function displayAndReturnAttributeJs() { $attributes = Attribute::getAttributes(Context::getContext()->language->id, true); - $attributeJs = array(); - foreach ($attributes AS $k => $attribute) - $attributeJs[$attribute['id_attribute_group']][$attribute['id_attribute']] = $attribute['name']; + $attribute_js = array(); + foreach ($attributes as $k => $attribute) + $attribute_js[$attribute['id_attribute_group']][$attribute['id_attribute']] = $attribute['name']; echo ' '; - return $attributeJs; + return $attribute_js; } private static function setAttributesImpacts($id_product, $tab) { $attributes = array(); - foreach ($tab AS $group) - foreach ($group AS $attribute) - $attributes[] = '('.(int)($id_product).', '.(int)($attribute).', '.(float)($_POST['price_impact_'.(int)($attribute)]).', '.(float)($_POST['weight_impact'][(int)($attribute)]).')'; + foreach ($tab as $group) + foreach ($group as $attribute) + $attributes[] = '('.(int)$id_product.', '.(int)$attribute.', '.(float)$_POST['price_impact_'.(int)$attribute].', '.(float)$_POST['weight_impact'][(int)$attribute].')'; return Db::getInstance()->execute( 'INSERT INTO `'._DB_PREFIX_.'attribute_impact` (`id_product`, `id_attribute`, `price`, `weight`) @@ -149,32 +149,32 @@ class AdminAttributeGeneratorControllerCore extends AdminController $result = Db::getInstance()->executeS( 'SELECT ai.`id_attribute`, ai.`price`, ai.`weight` FROM `'._DB_PREFIX_.'attribute_impact` ai - WHERE ai.`id_product` = '.(int)($id_product)); + WHERE ai.`id_product` = '.(int)$id_product); if (!$result) return array(); - foreach ($result AS $impact) + foreach ($result as $impact) { - $tab[$impact['id_attribute']]['price'] = (float)($impact['price']); - $tab[$impact['id_attribute']]['weight'] = (float)($impact['weight']); + $tab[$impact['id_attribute']]['price'] = (float)$impact['price']; + $tab[$impact['id_attribute']]['weight'] = (float)$impact['weight']; } return $tab; } public function initGroupTable() { - $combinationsGroups = $this->product->getAttributesGroups($this->context->language->id); + $combinations_groups = $this->product->getAttributesGroups($this->context->language->id); $attributes = array(); $impacts = self::getAttributesImpacts($this->product->id); - foreach ($combinationsGroups as &$combination) - { + foreach ($combinations_groups as &$combination) + { $target = &$attributes[$combination['id_attribute_group']][$combination['id_attribute']]; $target = $combination; if (isset($impacts[$combination['id_attribute']])) { - $target['price'] = $impacts[$combination['id_attribute']]['price']; - $target['weight'] = $impacts[$combination['id_attribute']]['weight']; - } - } + $target['price'] = $impacts[$combination['id_attribute']]['price']; + $target['weight'] = $impacts[$combination['id_attribute']]['weight']; + } + } $this->context->smarty->assign(array( 'currency_sign' => $this->context->currency->sign, 'weight_unit' => Configuration::get('PS_WEIGHT_UNIT'), @@ -194,7 +194,9 @@ class AdminAttributeGeneratorControllerCore extends AdminController { if (!Combination::isFeatureActive()) { - $this->displayWarning($this->l('This feature has been disabled, you can active this feature at this page:').' '.$this->l('Performances').''); + $this->displayWarning($this->l('This feature has been disabled, you can active this feature at this page:').' + '. + $this->l('Performances').''); return; } @@ -206,15 +208,15 @@ class AdminAttributeGeneratorControllerCore extends AdminController $js_attributes = self::displayAndReturnAttributeJs(); $attribute_groups = AttributeGroup::getAttributesGroups($this->context->language->id); - $this->product = new Product((int)(Tools::getValue('id_product'))); + $this->product = new Product((int)Tools::getValue('id_product')); $this->context->smarty->assign(array( 'tax_rates' => $this->product->getTaxesRate(), - 'generate' => isset($_POST['generate']) AND !sizeof($this->_errors), + 'generate' => isset($_POST['generate']) && !count($this->_errors), 'combinations_size' => count($this->combinations), 'product_name' => $this->product->name[$this->context->language->id], 'product_reference' => $this->product->reference, - 'url_generator' => self::$currentIndex.'&id_product='.(int)(Tools::getValue('id_product')).'&attributegenerator&token='.Tools::getValue('token'), + 'url_generator' => self::$currentIndex.'&id_product='.(int)Tools::getValue('id_product').'&attributegenerator&token='.Tools::getValue('token'), 'attribute_groups' => $attribute_groups, 'attribute_js' => $js_attributes, 'toolbar_btn' => $this->toolbar_btn, diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index 5649603b7..7e0e82295 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -81,21 +81,80 @@ class AdminProductsControllerCore extends AdminController $this->context = Context::getContext(); $this->_defaultOrderBy = 'position'; + $categoriesArray = array(); + $categories = Category::getSimpleCategories($this->context->language->id); + + foreach ($categories AS $categorie) + $categoriesArray[$categorie['id_category']] = $categorie['name']; + $this->fieldsDisplay = array( - 'id_product' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 20), - 'image' => array('title' => $this->l('Photo'), 'align' => 'center', 'image' => 'p', - 'width' => 70, 'orderby' => false, 'filter' => false, 'search' => false), - 'name' => array('title' => $this->l('Name'), 'filter_key' => 'b!name'), - 'reference' => array('title' => $this->l('Reference'), 'align' => 'center', 'width' => 80), - 'name_category' => array('title' => $this->l('Category'), 'width' => 100, 'filter_key' => 'cl!name'), - 'price' => array('title' => $this->l('Base price'), 'width' => 70, - 'type' => 'price', 'align' => 'right', 'filter_key' => 'a!price'), - 'price_final' => array('title' => $this->l('Final price'), 'width' => 70, - 'type' => 'price', 'align' => 'right', 'havingFilter' => true, 'orderby' => false), - 'active' => array('title' => $this->l('Displayed'), 'width' => 70, 'active' => 'status', - 'filter_key' => 'a!active', 'align' => 'center', 'type' => 'bool', 'orderby' => false), - 'position' => array('title' => $this->l('Position'), 'width' => 70,'filter_key' => 'cp!position', - 'align' => 'center', 'position' => 'position'), + 'id_product' => array( + 'title' => $this->l('ID'), + 'align' => 'center', + 'width' => 20 + ), + 'image' => array( + 'title' => $this->l('Photo'), + 'align' => 'center', + 'image' => 'p', + 'width' => 70, + 'orderby' => false, + 'filter' => false, + 'search' => false + ), + 'name' => array( + 'title' => $this->l('Name'), + 'filter_key' => 'b!name' + ), + 'reference' => array( + 'title' => $this->l('Reference'), + 'align' => 'center', + 'width' => 80 + ), + /*'name_category' => array( + 'title' => $this->l('Category'), + 'width' => 100, + 'filter_key' => 'cl!name' + ),*/ + 'name_category' => array( + 'title' => $this->l('Category'), + 'width' => 230, + 'type' => 'select', + 'list' => $categoriesArray, + 'filter_key' => 'cl!name', + 'filter_type' => 'int' + ), + 'price' => array( + 'title' => $this->l('Base price'), + 'width' => 70, + 'type' => 'price', + 'align' => 'right', + 'filter_key' => 'a!price' + ), + 'price_final' => array( + 'title' => $this->l('Final price'), + 'width' => 70, + 'type' => 'price', + 'align' => 'right', + 'havingFilter' => true, + 'orderby' => false + ), + 'active' => array( + 'title' => $this->l('Displayed'), + 'width' => 70, + 'active' => 'status', + 'filter_key' => 'a!active', + 'align' => 'center', + 'type' => 'bool', + 'orderby' => false + ), + 'position' => array( + 'title' => $this->l('Position'), + 'width' => 70, + 'filter_key' => 'cp!position', + 'align' => 'center', + 'position' => 'position' + ) ); // @since 1.5 : translations for tabs @@ -116,10 +175,17 @@ class AdminProductsControllerCore extends AdminController ); /* Join categories table */ - if ($id_category = Tools::getvalue('id_category')) + + if ($id_category = (int)Tools::getValue('productFilter_cl!name')) + { + $this->_category = new Category($id_category); + $_POST['productFilter_cl!name'] = $this->_category->name[$this->context->language->id]; + } + else if ($id_category = Tools::getvalue('id_category')) $this->_category = new Category($id_category); else $this->_category = new Category(); + $this->_join = ' LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (a.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang`) @@ -130,7 +196,7 @@ class AdminProductsControllerCore extends AdminController LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)'; // if no category selected, display all products - if (Validate::isLoadedObject($this->_category)) + if (Validate::isLoadedObject($this->_category) && empty($this->_filter)) $this->_filter = 'AND cp.`id_category` = '.(int)$this->_category->id; $this->_select = 'cl.name `name_category`, cp.`position`, i.`id_image`, (a.`price` * ((100 + (t.`rate`))/100)) AS price_final'; @@ -1978,7 +2044,7 @@ class AdminProductsControllerCore extends AdminController public function getPreviewUrl(Product $product) { - if (!(bool)$this->context->shop->virtual_uri) + if (!(bool)$this->context->shop->virtual_uri && $this->context->shop->theme_name != 'default') return false; $preview_url = $this->context->link->getProductLink(