// added selected categories in AdminProductsController & normalize

This commit is contained in:
lLefevre committed 2011-12-13 17:12:45 +00:00
1 parent 7e57a66ab2
commit 6d13acbb54
4 files changed
+130 -63

No files matched your search

+1 -1
View File
@@ -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 { 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 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 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;} #modulePosition { width:100%; float:left; clear:left; margin-right:270px;}
@@ -120,11 +120,10 @@
</div> </div>
<div style="float: left; margin-left: 60px;"> <div style="float: left; margin-left: 60px;">
<div> <div>
<select multiple name="attributes[]" id="attribute_group" style="width: 200px; height: 350px; margin-bottom: 10px;">'; <select multiple name="attributes[]" id="attribute_group" style="width: 200px; height: 350px; margin-bottom: 10px;">
{$attribute_groups|@var_dump}
{foreach $attribute_groups as $k => $attribute_group} {foreach $attribute_groups as $k => $attribute_group}
{if isset($attribute_js[$attribute_group['id_attribute_group']])} {if isset($attribute_js[$attribute_group['id_attribute_group']])}
<optgroup name="{$attribute_group['id_attribute_group']}" id="{$attribute_group['id_attribute_group']}" label="{$attribute_group['name']|escape:'htmlall':'UTF-8'}">'; <optgroup name="{$attribute_group['id_attribute_group']}" id="{$attribute_group['id_attribute_group']}" label="{$attribute_group['name']|escape:'htmlall':'UTF-8'}">
{foreach $attribute_js[$attribute_group['id_attribute_group']] as $k => $v} {foreach $attribute_js[$attribute_group['id_attribute_group']] as $k => $v}
<option name="{$k}" id="attr_{$k}" value="{$v|escape:'quotes':'UTF-8'}" title="{$v|escape:'quotes':'UTF-8'}">{$v|escape:'quotes':'UTF-8'}</option> <option name="{$k}" id="attr_{$k}" value="{$v|escape:'quotes':'UTF-8'}" title="{$v|escape:'quotes':'UTF-8'}">{$v|escape:'quotes':'UTF-8'}</option>
{/foreach} {/foreach}
@@ -35,25 +35,25 @@ class AdminAttributeGeneratorControllerCore extends AdminController
public function __construct() public function __construct()
{ {
$this->table = 'product_attribute'; $this->table = 'product_attribute';
$this->className = 'Product'; $this->className = 'Product';
parent::__construct(); parent::__construct();
} }
private function addAttribute($arr, $price = 0, $weight = 0) private function addAttribute($arr, $price = 0, $weight = 0)
{ {
foreach ($arr AS $attr) foreach ($arr as $attr)
{ {
$price += (float)($_POST['price_impact_'.(int)($attr)]); $price += (float)$_POST['price_impact_'.(int)$attr];
$weight += (float)($_POST['weight_impact'][(int)($attr)]); $weight += (float)$_POST['weight_impact'][(int)$attr];
} }
if ($this->product->id) if ($this->product->id)
{ {
return (array( return (array(
'id_product' => (int)($this->product->id), 'id_product' => (int)$this->product->id,
'price' => (float)($price), 'price' => (float)$price,
'weight' => (float)($weight), 'weight' => (float)$weight,
'ecotax' => 0, 'ecotax' => 0,
'quantity' => (int)($_POST['quantity']), 'quantity' => (int)$_POST['quantity'],
'reference' => pSQL($_POST['reference']), 'reference' => pSQL($_POST['reference']),
'default_on' => 0, 'default_on' => 0,
'available_date' => '0000-00-00')); 'available_date' => '0000-00-00'));
@@ -61,24 +61,24 @@ class AdminAttributeGeneratorControllerCore extends AdminController
return array(); return array();
} }
static private function createCombinations($list) private static function createCombinations($list)
{ {
if (sizeof($list) <= 1) if (count($list) <= 1)
return sizeof($list) ? array_map(create_function('$v', 'return (array($v));'), $list[0]) : $list; return count($list) ? array_map(create_function('$v', 'return (array($v));'), $list[0]) : $list;
$res = array(); $res = array();
$first = array_pop($list); $first = array_pop($list);
foreach ($first AS $attribute) foreach ($first as $attribute)
{ {
$tab = self::createCombinations($list); $tab = self::createCombinations($list);
foreach ($tab AS $toAdd) foreach ($tab as $to_add)
$res[] = is_array($toAdd) ? array_merge($toAdd, array($attribute)) : array($toAdd, $attribute); $res[] = is_array($to_add) ? array_merge($to_add, array($attribute)) : array($to_add, $attribute);
} }
return $res; return $res;
} }
public function postProcess() 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'])) if (isset($_POST['generate']))
{ {
@@ -87,7 +87,7 @@ class AdminAttributeGeneratorControllerCore extends AdminController
else else
{ {
$tab = array_values($_POST['options']); $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); self::setAttributesImpacts($this->product->id, $tab);
$this->combinations = array_values(self::createCombinations($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.'); $this->_errors[] = Tools::displayError('Unable to initialize parameters, combination is missing or object cannot be loaded.');
} }
} }
elseif (isset($_POST['back'])) else if (isset($_POST['back']))
Tools::redirectAdmin(self::$currentIndex.'&id_product='.(int)(Tools::getValue('id_product')).'&addproduct'.'&tabs=3&token='.Tools::getValue('token')); Tools::redirectAdmin(self::$currentIndex.'&id_product='.(int)Tools::getValue('id_product').'&addproduct'.'&tabs=3&token='.Tools::getValue('token'));
parent::postProcess(); parent::postProcess();
} }
private static function displayAndReturnAttributeJs() private static function displayAndReturnAttributeJs()
{ {
$attributes = Attribute::getAttributes(Context::getContext()->language->id, true); $attributes = Attribute::getAttributes(Context::getContext()->language->id, true);
$attributeJs = array(); $attribute_js = array();
foreach ($attributes AS $k => $attribute) foreach ($attributes as $k => $attribute)
$attributeJs[$attribute['id_attribute_group']][$attribute['id_attribute']] = $attribute['name']; $attribute_js[$attribute['id_attribute_group']][$attribute['id_attribute']] = $attribute['name'];
echo ' echo '
<script type="text/javascript"> <script type="text/javascript">
var attrs = new Array(); var attrs = new Array();
attrs[0] = new Array(0, \'---\');'; attrs[0] = new Array(0, \'---\');';
foreach ($attributeJs AS $idgrp => $group) foreach ($attribute_js as $idgrp => $group)
{ {
echo ' echo '
attrs['.$idgrp.'] = new Array(0, \'---\' '; attrs['.$idgrp.'] = new Array(0, \'---\' ';
foreach ($group AS $idattr => $attrname) foreach ($group as $idattr => $attrname)
echo ', '.$idattr.', \''.addslashes(($attrname)).'\''; echo ', '.$idattr.', \''.addslashes(($attrname)).'\'';
echo ');'; echo ');';
} }
echo ' echo '
</script>'; </script>';
return $attributeJs; return $attribute_js;
} }
private static function setAttributesImpacts($id_product, $tab) private static function setAttributesImpacts($id_product, $tab)
{ {
$attributes = array(); $attributes = array();
foreach ($tab AS $group) foreach ($tab as $group)
foreach ($group AS $attribute) foreach ($group as $attribute)
$attributes[] = '('.(int)($id_product).', '.(int)($attribute).', '.(float)($_POST['price_impact_'.(int)($attribute)]).', '.(float)($_POST['weight_impact'][(int)($attribute)]).')'; $attributes[] = '('.(int)$id_product.', '.(int)$attribute.', '.(float)$_POST['price_impact_'.(int)$attribute].', '.(float)$_POST['weight_impact'][(int)$attribute].')';
return Db::getInstance()->execute( return Db::getInstance()->execute(
'INSERT INTO `'._DB_PREFIX_.'attribute_impact` (`id_product`, `id_attribute`, `price`, `weight`) 'INSERT INTO `'._DB_PREFIX_.'attribute_impact` (`id_product`, `id_attribute`, `price`, `weight`)
@@ -149,32 +149,32 @@ class AdminAttributeGeneratorControllerCore extends AdminController
$result = Db::getInstance()->executeS( $result = Db::getInstance()->executeS(
'SELECT ai.`id_attribute`, ai.`price`, ai.`weight` 'SELECT ai.`id_attribute`, ai.`price`, ai.`weight`
FROM `'._DB_PREFIX_.'attribute_impact` ai FROM `'._DB_PREFIX_.'attribute_impact` ai
WHERE ai.`id_product` = '.(int)($id_product)); WHERE ai.`id_product` = '.(int)$id_product);
if (!$result) if (!$result)
return array(); return array();
foreach ($result AS $impact) foreach ($result as $impact)
{ {
$tab[$impact['id_attribute']]['price'] = (float)($impact['price']); $tab[$impact['id_attribute']]['price'] = (float)$impact['price'];
$tab[$impact['id_attribute']]['weight'] = (float)($impact['weight']); $tab[$impact['id_attribute']]['weight'] = (float)$impact['weight'];
} }
return $tab; return $tab;
} }
public function initGroupTable() public function initGroupTable()
{ {
$combinationsGroups = $this->product->getAttributesGroups($this->context->language->id); $combinations_groups = $this->product->getAttributesGroups($this->context->language->id);
$attributes = array(); $attributes = array();
$impacts = self::getAttributesImpacts($this->product->id); $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 = &$attributes[$combination['id_attribute_group']][$combination['id_attribute']];
$target = $combination; $target = $combination;
if (isset($impacts[$combination['id_attribute']])) if (isset($impacts[$combination['id_attribute']]))
{ {
$target['price'] = $impacts[$combination['id_attribute']]['price']; $target['price'] = $impacts[$combination['id_attribute']]['price'];
$target['weight'] = $impacts[$combination['id_attribute']]['weight']; $target['weight'] = $impacts[$combination['id_attribute']]['weight'];
} }
} }
$this->context->smarty->assign(array( $this->context->smarty->assign(array(
'currency_sign' => $this->context->currency->sign, 'currency_sign' => $this->context->currency->sign,
'weight_unit' => Configuration::get('PS_WEIGHT_UNIT'), 'weight_unit' => Configuration::get('PS_WEIGHT_UNIT'),
@@ -194,7 +194,9 @@ class AdminAttributeGeneratorControllerCore extends AdminController
{ {
if (!Combination::isFeatureActive()) if (!Combination::isFeatureActive())
{ {
$this->displayWarning($this->l('This feature has been disabled, you can active this feature at this page:').' <a href="index.php?tab=AdminPerformance&token='.Tools::getAdminTokenLite('AdminPerformance').'#featuresDetachables">'.$this->l('Performances').'</a>'); $this->displayWarning($this->l('This feature has been disabled, you can active this feature at this page:').'
<a href="index.php?tab=AdminPerformance&token='.Tools::getAdminTokenLite('AdminPerformance').'#featuresDetachables">'.
$this->l('Performances').'</a>');
return; return;
} }
@@ -206,15 +208,15 @@ class AdminAttributeGeneratorControllerCore extends AdminController
$js_attributes = self::displayAndReturnAttributeJs(); $js_attributes = self::displayAndReturnAttributeJs();
$attribute_groups = AttributeGroup::getAttributesGroups($this->context->language->id); $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( $this->context->smarty->assign(array(
'tax_rates' => $this->product->getTaxesRate(), '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), 'combinations_size' => count($this->combinations),
'product_name' => $this->product->name[$this->context->language->id], 'product_name' => $this->product->name[$this->context->language->id],
'product_reference' => $this->product->reference, '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_groups' => $attribute_groups,
'attribute_js' => $js_attributes, 'attribute_js' => $js_attributes,
'toolbar_btn' => $this->toolbar_btn, 'toolbar_btn' => $this->toolbar_btn,
+83 -17
View File
@@ -81,21 +81,80 @@ class AdminProductsControllerCore extends AdminController
$this->context = Context::getContext(); $this->context = Context::getContext();
$this->_defaultOrderBy = 'position'; $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( $this->fieldsDisplay = array(
'id_product' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 20), 'id_product' => array(
'image' => array('title' => $this->l('Photo'), 'align' => 'center', 'image' => 'p', 'title' => $this->l('ID'),
'width' => 70, 'orderby' => false, 'filter' => false, 'search' => false), 'align' => 'center',
'name' => array('title' => $this->l('Name'), 'filter_key' => 'b!name'), 'width' => 20
'reference' => array('title' => $this->l('Reference'), 'align' => 'center', 'width' => 80), ),
'name_category' => array('title' => $this->l('Category'), 'width' => 100, 'filter_key' => 'cl!name'), 'image' => array(
'price' => array('title' => $this->l('Base price'), 'width' => 70, 'title' => $this->l('Photo'),
'type' => 'price', 'align' => 'right', 'filter_key' => 'a!price'), 'align' => 'center',
'price_final' => array('title' => $this->l('Final price'), 'width' => 70, 'image' => 'p',
'type' => 'price', 'align' => 'right', 'havingFilter' => true, 'orderby' => false), 'width' => 70,
'active' => array('title' => $this->l('Displayed'), 'width' => 70, 'active' => 'status', 'orderby' => false,
'filter_key' => 'a!active', 'align' => 'center', 'type' => 'bool', 'orderby' => false), 'filter' => false,
'position' => array('title' => $this->l('Position'), 'width' => 70,'filter_key' => 'cp!position', 'search' => false
'align' => 'center', 'position' => 'position'), ),
'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 // @since 1.5 : translations for tabs
@@ -116,11 +175,18 @@ class AdminProductsControllerCore extends AdminController
); );
/* Join categories table */ /* 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); $this->_category = new Category($id_category);
else else
$this->_category = new Category(); $this->_category = new Category();
$this->_join = ' $this->_join = '
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (a.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang`) LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (a.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang`)
LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = a.`id_product` AND i.`cover` = 1) LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = a.`id_product` AND i.`cover` = 1)
@@ -130,7 +196,7 @@ class AdminProductsControllerCore extends AdminController
LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)'; LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)';
// if no category selected, display all products // 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->_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'; $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) 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; return false;
$preview_url = $this->context->link->getProductLink( $preview_url = $this->context->link->getProductLink(