[-] All : Class Product, error in SQL request

// some normalization is class product (all is not done)
This commit is contained in:
mDeflotte
2011-09-30 09:29:36 +00:00
parent d32dfba988
commit f302e2e2cf
+146 -140
View File
@@ -97,7 +97,7 @@ class ProductCore extends ObjectModel
public $online_only = false; public $online_only = false;
/** @var string unity */ /** @var string unity */
public $unity = NULL; public $unity = null;
/** @var float price for product's unity */ /** @var float price for product's unity */
public $unit_price; public $unit_price;
@@ -157,7 +157,7 @@ class ProductCore extends ObjectModel
public $customizable; public $customizable;
/** @var boolean Product is new */ /** @var boolean Product is new */
public $new = NULL; public $new = null;
/** @var integer Number of uploadable files (concerning customizable products) */ /** @var integer Number of uploadable files (concerning customizable products) */
public $uploadable_files; public $uploadable_files;
@@ -307,7 +307,7 @@ class ProductCore extends ObjectModel
const CUSTOMIZE_FILE = 0; const CUSTOMIZE_FILE = 0;
const CUSTOMIZE_TEXTFIELD = 1; const CUSTOMIZE_TEXTFIELD = 1;
public function __construct($id_product = NULL, $full = false, $id_lang = NULL, $id_shop = NULL, Context $context = NULL) public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
{ {
parent::__construct($id_product, $id_lang, $id_shop); parent::__construct($id_product, $id_lang, $id_shop);
if (!$context) if (!$context)
@@ -321,14 +321,14 @@ class ProductCore extends ObjectModel
$this->supplier_name = Supplier::getNameById((int)$this->id_supplier); $this->supplier_name = Supplier::getNameById((int)$this->id_supplier);
self::$_tax_rules_group[$this->id] = $this->id_tax_rules_group; self::$_tax_rules_group[$this->id] = $this->id_tax_rules_group;
$address = NULL; $address = null;
if (is_object($context->cart) AND $context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')} != NULL) if (is_object($context->cart) AND $context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')} != null)
$address = $context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}; $address = $context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')};
$this->tax_rate = $this->getTaxesRate(new Address($address)); $this->tax_rate = $this->getTaxesRate(new Address($address));
$this->new = $this->isNew(); $this->new = $this->isNew();
$this->price = Product::getPriceStatic((int)($this->id), false, NULL, 6, NULL, false, true, 1, false, NULL, NULL, NULL, $this->specificPrice); $this->price = Product::getPriceStatic((int)($this->id), false, null, 6, null, false, true, 1, false, null, null, null, $this->specificPrice);
$this->unit_price = ($this->unit_price_ratio != 0 ? $this->price / $this->unit_price_ratio : 0); $this->unit_price = ($this->unit_price_ratio != 0 ? $this->price / $this->unit_price_ratio : 0);
if ($this->id) if ($this->id)
$this->tags = Tag::getProductTags((int)$this->id); $this->tags = Tag::getProductTags((int)$this->id);
@@ -425,7 +425,7 @@ class ProductCore extends ObjectModel
)); ));
} }
public static function initPricesComputation($id_customer = NULL) public static function initPricesComputation($id_customer = null)
{ {
if ($id_customer) if ($id_customer)
{ {
@@ -440,7 +440,7 @@ class ProductCore extends ObjectModel
self::$_taxCalculationMethod = Group::getDefaultPriceDisplayMethod(); self::$_taxCalculationMethod = Group::getDefaultPriceDisplayMethod();
} }
public static function getTaxCalculationMethod($id_customer = NULL) public static function getTaxCalculationMethod($id_customer = null)
{ {
if ($id_customer) if ($id_customer)
self::initPricesComputation((int)($id_customer)); self::initPricesComputation((int)($id_customer));
@@ -463,7 +463,7 @@ class ProductCore extends ObjectModel
)) ))
return false; return false;
foreach ($res AS $product) foreach ($res as $product)
if ((int)($product['id_product']) == (int)($this->id)) if ((int)($product['id_product']) == (int)($this->id))
$movedProduct = $product; $movedProduct = $product;
@@ -502,7 +502,7 @@ class ProductCore extends ObjectModel
FROM `'._DB_PREFIX_.'category_product` FROM `'._DB_PREFIX_.'category_product`
WHERE `id_category` = '.(int)($id_category).' WHERE `id_category` = '.(int)($id_category).'
ORDER BY `position`'); ORDER BY `position`');
$sizeof = sizeof($result); $sizeof = count($result);
for ($i = 0; $i < $sizeof; $i++) for ($i = 0; $i < $sizeof; $i++)
$return &= Db::getInstance()->Execute(' $return &= Db::getInstance()->Execute('
@@ -615,7 +615,7 @@ class ProductCore extends ObjectModel
public function deleteSelection($products) public function deleteSelection($products)
{ {
$return = 1; $return = 1;
foreach ($products AS $id_product) foreach ($products as $id_product)
{ {
$product = new Product((int)($id_product)); $product = new Product((int)($id_product));
$return &= $product->delete(); $return &= $product->delete();
@@ -635,9 +635,9 @@ class ProductCore extends ObjectModel
return false; return false;
if (!is_array($categories)) if (!is_array($categories))
$categories=array($categories); $categories = array($categories);
if (!sizeof($categories)) if (!count($categories))
return false; return false;
$currentCategories = $this->getCategories(); $currentCategories = $this->getCategories();
@@ -649,20 +649,18 @@ class ProductCore extends ObjectModel
WHERE `id_category` IN('.implode(',', array_map('intval', $categories)).') WHERE `id_category` IN('.implode(',', array_map('intval', $categories)).')
GROUP BY id_category'); GROUP BY id_category');
foreach ($resCategNewPos as $array) foreach ($resCategNewPos as $array)
{
$newCategories[$array['id_category']] = $array['newPos']; $newCategories[$array['id_category']] = $array['newPos'];
}
$newCategPos=array(); $newCategPos = array();
foreach ($categories as $id_category) foreach ($categories as $id_category)
$newCategPos[$id_category] = isset($newCategories[$id_category])?$newCategories[$id_category]:0; $newCategPos[$id_category] = isset($newCategories[$id_category])?$newCategories[$id_category]:0;
$productCats = array(); $productCats = array();
foreach ($categories as $newIdCateg) foreach ($categories as $newIdCateg)
if (!in_array($newIdCateg,$currentCategories)) if (!in_array($newIdCateg, $currentCategories))
$productCats[] = '('. $newIdCateg.', '. $this->id.', '. $newCategPos[$newIdCateg].')'; $productCats[] = '('.$newIdCateg.', '.$this->id.', '.$newCategPos[$newIdCateg].')';
if (sizeof($productCats)) if (count($productCats))
return Db::getInstance()->Execute(' return Db::getInstance()->Execute('
INSERT INTO `'._DB_PREFIX_.'category_product` (`id_category`, `id_product`, `position`) INSERT INTO `'._DB_PREFIX_.'category_product` (`id_category`, `id_product`, `position`)
VALUES '.implode(',', $productCats)); VALUES '.implode(',', $productCats));
@@ -686,10 +684,9 @@ class ProductCore extends ObjectModel
$result = Db::getInstance()->ExecuteS('SELECT `id_category` $result = Db::getInstance()->ExecuteS('SELECT `id_category`
FROM `'._DB_PREFIX_.'category_product` FROM `'._DB_PREFIX_.'category_product`
WHERE `id_category` NOT IN('.implode(',', array_map('intval', $categories)).') WHERE `id_category` NOT IN('.implode(',', array_map('intval', $categories)).')
AND id_product = '. $this->id .''); AND id_product = '.$this->id.'');
foreach ($result as $categToDelete){ foreach ($result as $categToDelete)
$this->deleteCategory($categToDelete['id_category']); $this->deleteCategory($categToDelete['id_category']);
}
// if none are found, it's an error // if none are found, it's an error
if (!is_array($result)) if (!is_array($result))
return (false); return (false);
@@ -712,10 +709,10 @@ class ProductCore extends ObjectModel
*/ */
public function deleteCategory($id_category, $cleanPositions = true) public function deleteCategory($id_category, $cleanPositions = true)
{ {
$result = Db::getInstance()->ExecuteS('SELECT `id_category` FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.(int)($this->id) . ' AND id_category = '.(int)$id_category .''); $result = Db::getInstance()->ExecuteS('SELECT `id_category` FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.(int)($this->id).' AND id_category = '.(int)$id_category.'');
$return = Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.(int)($this->id).' AND id_category = '.(int)$id_category .'' ); $return = Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.(int)($this->id).' AND id_category = '.(int)$id_category.'');
if ($cleanPositions === true) if ($cleanPositions === true)
foreach ($result AS $row) foreach ($result as $row)
$this->cleanPositions((int)$row['id_category']); $this->cleanPositions((int)$row['id_category']);
return $return; return $return;
} }
@@ -732,7 +729,7 @@ class ProductCore extends ObjectModel
if ($cleanPositions === true) if ($cleanPositions === true)
{ {
$result = Db::getInstance()->ExecuteS('SELECT `id_category` FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.(int)($this->id)); $result = Db::getInstance()->ExecuteS('SELECT `id_category` FROM `'._DB_PREFIX_.'category_product` WHERE `id_product` = '.(int)($this->id));
foreach($result AS $row) foreach ($result as $row)
$this->cleanPositions((int)($row['id_category'])); $this->cleanPositions((int)($row['id_category']));
} }
return $return; return $return;
@@ -773,7 +770,7 @@ class ProductCore extends ObjectModel
$status = true; $status = true;
if ($result) if ($result)
foreach($result as $row) foreach ($result as $row)
{ {
$image = new Image($row['id_image']); $image = new Image($row['id_image']);
$status &= $image->delete(); $status &= $image->delete();
@@ -809,9 +806,9 @@ class ProductCore extends ObjectModel
die (Tools::displayError()); die (Tools::displayError());
if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add') if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add')
$orderByPrefix = 'p'; $orderByPrefix = 'p';
elseif ($orderBy == 'name') else if ($orderBy == 'name')
$orderByPrefix = 'pl'; $orderByPrefix = 'pl';
elseif ($orderBy == 'position') else if ($orderBy == 'position')
$orderByPrefix = 'c'; $orderByPrefix = 'c';
$sql = 'SELECT p.*, pl.* , t.`rate` AS tax_rate, m.`name` AS manufacturer_name, s.`name` AS supplier_name $sql = 'SELECT p.*, pl.* , t.`rate` AS tax_rate, m.`name` AS manufacturer_name, s.`name` AS supplier_name
@@ -831,8 +828,8 @@ class ProductCore extends ObjectModel
ORDER BY '.(isset($orderByPrefix) ? pSQL($orderByPrefix).'.' : '').'`'.pSQL($orderBy).'` '.pSQL($orderWay). ORDER BY '.(isset($orderByPrefix) ? pSQL($orderByPrefix).'.' : '').'`'.pSQL($orderBy).'` '.pSQL($orderWay).
($limit > 0 ? ' LIMIT '.(int)$start.','.(int)$limit : ''); ($limit > 0 ? ' LIMIT '.(int)$start.','.(int)$limit : '');
$rq = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); $rq = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql);
if($orderBy == 'price') if ($orderBy == 'price')
Tools::orderbyPrice($rq,$orderWay); Tools::orderbyPrice($rq, $orderWay);
return ($rq); return ($rq);
} }
@@ -856,9 +853,10 @@ class ProductCore extends ObjectModel
SELECT id_product FROM `'._DB_PREFIX_.'product` p SELECT id_product FROM `'._DB_PREFIX_.'product` p
WHERE 1 WHERE 1
AND id_product = '.(int)($this->id).' AND id_product = '.(int)($this->id).'
AND DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AND DATEDIFF(p.`date_add`,
DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0
'); ');
return sizeof($result) > 0; return count($result) > 0;
} }
public function productAttributeExists($attributesList, $currentProductAttribute = false) public function productAttributeExists($attributesList, $currentProductAttribute = false)
@@ -874,11 +872,11 @@ class ProductCore extends ObjectModel
return false; return false;
/* Product attributes simulation */ /* Product attributes simulation */
$productAttributes = array(); $productAttributes = array();
foreach ($result AS $productAttribute) foreach ($result as $productAttribute)
$productAttributes[$productAttribute['id_product_attribute']][] = $productAttribute['id_attribute']; $productAttributes[$productAttribute['id_product_attribute']][] = $productAttribute['id_attribute'];
/* Checking product's attribute existence */ /* Checking product's attribute existence */
foreach ($productAttributes AS $key => $productAttribute) foreach ($productAttributes as $key => $productAttribute)
if (sizeof($productAttribute) == sizeof($attributesList)) if (count($productAttribute) == count($attributesList))
{ {
$diff = false; $diff = false;
for ($i = 0; $diff == false AND isset($productAttribute[$i]); $i++) for ($i = 0; $diff == false AND isset($productAttribute[$i]); $i++)
@@ -905,7 +903,7 @@ class ProductCore extends ObjectModel
* @param boolean $default Is default attribute for product * @param boolean $default Is default attribute for product
* @return mixed $id_product_attribute or false * @return mixed $id_product_attribute or false
*/ */
public function addProductAttribute($price, $weight, $unit_impact, $ecotax, $quantity, $id_images, $reference, $supplier_reference, $ean13, $default, $location = NULL, $upc = NULL) public function addProductAttribute($price, $weight, $unit_impact, $ecotax, $quantity, $id_images, $reference, $supplier_reference, $ean13, $default, $location = null, $upc = null)
{ {
if (!$this->id) if (!$this->id)
return; return;
@@ -940,7 +938,7 @@ class ProductCore extends ObjectModel
if (empty($id_images)) if (empty($id_images))
return (int)($id_product_attribute); return (int)($id_product_attribute);
$query = 'INSERT INTO `'._DB_PREFIX_.'product_attribute_image` (`id_product_attribute`, `id_image`) VALUES '; $query = 'INSERT INTO `'._DB_PREFIX_.'product_attribute_image` (`id_product_attribute`, `id_image`) VALUES ';
foreach ($id_images AS $id_image) foreach ($id_images as $id_image)
$query .= '('.(int)($id_product_attribute).', '.(int)($id_image).'), '; $query .= '('.(int)($id_product_attribute).', '.(int)($id_image).'), ';
$query = trim($query, ', '); $query = trim($query, ', ');
if (!Db::getInstance()->Execute($query)) if (!Db::getInstance()->Execute($query))
@@ -948,7 +946,7 @@ class ProductCore extends ObjectModel
return (int)($id_product_attribute); return (int)($id_product_attribute);
} }
public function addCombinationEntity($wholesale_price, $price, $weight, $unit_impact, $ecotax, $quantity, $id_images, $reference, $supplier_reference, $ean13, $default, $location = NULL, $upc = NULL) public function addCombinationEntity($wholesale_price, $price, $weight, $unit_impact, $ecotax, $quantity, $id_images, $reference, $supplier_reference, $ean13, $default, $location = null, $upc = null)
{ {
$id_product_attribute = $this->addProductAttribute($price, $weight, $unit_impact, $ecotax, $quantity, $id_images, $reference, $supplier_reference, $ean13, $default, $location, $upc); $id_product_attribute = $this->addProductAttribute($price, $weight, $unit_impact, $ecotax, $quantity, $id_images, $reference, $supplier_reference, $ean13, $default, $location, $upc);
$result = Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'product_attribute` SET `wholesale_price` = '.(float)$wholesale_price.' WHERE `id_product_attribute` = '.(int)$id_product_attribute); $result = Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'product_attribute` SET `wholesale_price` = '.(float)$wholesale_price.' WHERE `id_product_attribute` = '.(int)$id_product_attribute);
@@ -963,16 +961,16 @@ class ProductCore extends ObjectModel
$keys = array(); $keys = array();
$fields = array(); $fields = array();
$default_value = 1; $default_value = 1;
foreach ($attributes AS &$attribute) foreach ($attributes as &$attribute)
foreach ($attribute AS $key => $value) foreach ($attribute as $key => $value)
if ($value != "") if ($value != '')
$fields[$key] = $key; $fields[$key] = $key;
foreach ($attributes AS &$attribute) foreach ($attributes as &$attribute)
{ {
$k = array(); $k = array();
$v = array(); $v = array();
foreach ($attribute AS $key => $value) foreach ($attribute as $key => $value)
{ {
if (in_array($key, $fields)) if (in_array($key, $fields))
{ {
@@ -986,10 +984,10 @@ class ProductCore extends ObjectModel
$v[] = '\''.$default_value.'\''; $v[] = '\''.$default_value.'\'';
$default_value = 0; $default_value = 0;
} }
$values[] = '(' . implode(', ', $v).')'; $values[] = '('.implode(', ', $v).')';
$keys[] = implode(', ', $k); $keys[] = implode(', ', $k);
} }
Db::getInstance()->Execute('INSERT INTO `'._DB_PREFIX_.'product_attribute` ('. $keys[0].') VALUES '.implode(', ', $values)); Db::getInstance()->Execute('INSERT INTO `'._DB_PREFIX_.'product_attribute` ('.$keys[0].') VALUES '.implode(', ', $values));
return (array_map(create_function('$elem', 'return $elem[\'id_product_attribute\'];'), return (array_map(create_function('$elem', 'return $elem[\'id_product_attribute\'];'),
Db::getInstance()->ExecuteS(' Db::getInstance()->ExecuteS('
@@ -1036,7 +1034,7 @@ class ProductCore extends ObjectModel
* @param string $minimal_quantity Minimal quantity * @param string $minimal_quantity Minimal quantity
* @return array Update result * @return array Update result
*/ */
public function updateProductAttribute($id_product_attribute, $wholesale_price, $price, $weight, $unit, $ecotax, $quantity, $id_images, $reference, $supplier_reference, $ean13, $default, $location = NULL, $upc = NULL, $minimal_quantity, $available_date) public function updateProductAttribute($id_product_attribute, $wholesale_price, $price, $weight, $unit, $ecotax, $quantity, $id_images, $reference, $supplier_reference, $ean13, $default, $location = null, $upc = null, $minimal_quantity, $available_date)
{ {
Db::getInstance()->Execute(' Db::getInstance()->Execute('
DELETE FROM `'._DB_PREFIX_.'product_attribute_combination` DELETE FROM `'._DB_PREFIX_.'product_attribute_combination`
@@ -1074,7 +1072,7 @@ class ProductCore extends ObjectModel
if (empty($id_images)) if (empty($id_images))
return true; return true;
$query = 'INSERT INTO `'._DB_PREFIX_.'product_attribute_image` (`id_product_attribute`, `id_image`) VALUES '; $query = 'INSERT INTO `'._DB_PREFIX_.'product_attribute_image` (`id_product_attribute`, `id_image`) VALUES ';
foreach ($id_images AS $id_image) foreach ($id_images as $id_image)
$query .= '('.(int)($id_product_attribute).', '.(int)($id_image).'), '; $query .= '('.(int)($id_product_attribute).', '.(int)($id_image).'), ';
$query = trim($query, ', '); $query = trim($query, ', ');
return Db::getInstance()->Execute($query); return Db::getInstance()->Execute($query);
@@ -1092,7 +1090,7 @@ class ProductCore extends ObjectModel
SELECT SUM(`quantity`) SELECT SUM(`quantity`)
FROM `'._DB_PREFIX_.'product_attribute` FROM `'._DB_PREFIX_.'product_attribute`
WHERE `id_product` = '.(int)($this->id).' WHERE `id_product` = '.(int)($this->id).'
), \'0\' ) ), \'0\')
WHERE `id_product` = '.(int)($this->id)); WHERE `id_product` = '.(int)($this->id));
} }
/** /**
@@ -1154,7 +1152,8 @@ class ProductCore extends ObjectModel
{ {
return return
Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field` WHERE `id_product` = '.(int)($this->id)) && Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field` WHERE `id_product` = '.(int)($this->id)) &&
Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field_lang` WHERE `id_customization_field` NOT IN (SELECT id_customization_field FROM `'._DB_PREFIX_.'customization_field`)'); Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field_lang`
WHERE `id_customization_field` NOT IN (SELECT id_customization_field FROM `'._DB_PREFIX_.'customization_field`)');
} }
/** /**
@@ -1210,10 +1209,10 @@ class ProductCore extends ObjectModel
{ {
if (!is_array($attributes)) if (!is_array($attributes))
die(Tools::displayError()); die(Tools::displayError());
if (!sizeof($attributes)) if (!count($attributes))
return false; return false;
$attributesList = ''; $attributesList = '';
foreach ($attributes AS $id_attribute) foreach ($attributes as $id_attribute)
$attributesList .= '('.(int)$id_product_attribute.','.(int)$id_attribute.'),'; $attributesList .= '('.(int)$id_product_attribute.','.(int)$id_attribute.'),';
$attributesList = rtrim($attributesList, ','); $attributesList = rtrim($attributesList, ',');
@@ -1227,9 +1226,9 @@ class ProductCore extends ObjectModel
public function addAttributeCombinationMultiple($id_attributes, $combinations) public function addAttributeCombinationMultiple($id_attributes, $combinations)
{ {
$attributesList = ''; $attributesList = '';
foreach ($id_attributes AS $nb => $id_product_attribute) foreach ($id_attributes as $nb => $id_product_attribute)
if (isset($combinations[$nb])) if (isset($combinations[$nb]))
foreach ($combinations[$nb] AS $id_attribute) foreach ($combinations[$nb] as $id_attribute)
$attributesList .= '('.(int)($id_product_attribute).','.(int)($id_attribute).'),'; $attributesList .= '('.(int)($id_product_attribute).','.(int)($id_attribute).'),';
$attributesList = rtrim($attributesList, ','); $attributesList = rtrim($attributesList, ',');
return Db::getInstance()->Execute('INSERT INTO `'._DB_PREFIX_.'product_attribute_combination` (`id_product_attribute`, `id_attribute`) VALUES '.$attributesList); return Db::getInstance()->Execute('INSERT INTO `'._DB_PREFIX_.'product_attribute_combination` (`id_product_attribute`, `id_attribute`) VALUES '.$attributesList);
@@ -1322,7 +1321,7 @@ class ProductCore extends ObjectModel
if (!$productAttributes = Db::getInstance()->ExecuteS('SELECT `id_product_attribute` FROM `'._DB_PREFIX_.'product_attribute` WHERE `id_product` = '.(int)($this->id))) if (!$productAttributes = Db::getInstance()->ExecuteS('SELECT `id_product_attribute` FROM `'._DB_PREFIX_.'product_attribute` WHERE `id_product` = '.(int)($this->id)))
return false; return false;
$ids = array(); $ids = array();
foreach ($productAttributes AS $productAttribute) foreach ($productAttributes as $productAttribute)
$ids[] = (int)($productAttribute['id_product_attribute']); $ids[] = (int)($productAttribute['id_product_attribute']);
if (!$result = Db::getInstance()->ExecuteS(' if (!$result = Db::getInstance()->ExecuteS('
SELECT pai.`id_image`, pai.`id_product_attribute`, il.`legend` SELECT pai.`id_image`, pai.`id_product_attribute`, il.`legend`
@@ -1332,7 +1331,7 @@ class ProductCore extends ObjectModel
WHERE pai.`id_product_attribute` IN ('.implode(', ', $ids).') AND il.`id_lang` = '.(int)($id_lang).' ORDER by i.`position`')) WHERE pai.`id_product_attribute` IN ('.implode(', ', $ids).') AND il.`id_lang` = '.(int)($id_lang).' ORDER by i.`position`'))
return false; return false;
$images = array(); $images = array();
foreach ($result AS $row) foreach ($result as $row)
$images[$row['id_product_attribute']][] = $row; $images[$row['id_product_attribute']][] = $row;
return $images; return $images;
} }
@@ -1360,7 +1359,7 @@ class ProductCore extends ObjectModel
* @param integer $nbProducts Number of products to return (optional) * @param integer $nbProducts Number of products to return (optional)
* @return array New products * @return array New products
*/ */
public static function getNewProducts($id_lang, $pageNumber = 0, $nbProducts = 10, $count = false, $orderBy = NULL, $orderWay = NULL, Context $context = null) public static function getNewProducts($id_lang, $pageNumber = 0, $nbProducts = 10, $count = false, $orderBy = null, $orderWay = null, Context $context = null)
{ {
if (!$context) if (!$context)
$context = Context::getContext(); $context = Context::getContext();
@@ -1371,7 +1370,7 @@ class ProductCore extends ObjectModel
if (empty($orderWay)) $orderWay = 'DESC'; if (empty($orderWay)) $orderWay = 'DESC';
if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add') if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add')
$orderByPrefix = 'p'; $orderByPrefix = 'p';
elseif ($orderBy == 'name') else if ($orderBy == 'name')
$orderByPrefix = 'pl'; $orderByPrefix = 'pl';
if (!Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay)) if (!Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay))
die(Tools::displayError()); die(Tools::displayError());
@@ -1385,7 +1384,8 @@ class ProductCore extends ObjectModel
FROM `'._DB_PREFIX_.'product` p FROM `'._DB_PREFIX_.'product` p
'.$context->shop->sqlAsso('product', 'p').' '.$context->shop->sqlAsso('product', 'p').'
WHERE `active` = 1 WHERE `active` = 1
AND DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AND DATEDIFF(p.`date_add`,
DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0
AND p.`id_product` IN ( AND p.`id_product` IN (
SELECT cp.`id_product` SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg FROM `'._DB_PREFIX_.'category_group` cg
@@ -1514,7 +1514,7 @@ class ProductCore extends ObjectModel
* @param boolean $count Only in order to get total number (optional) * @param boolean $count Only in order to get total number (optional)
* @return array Prices drop * @return array Prices drop
*/ */
public static function getPricesDrop($id_lang, $pageNumber = 0, $nbProducts = 10, $count = false, $orderBy = NULL, $orderWay = NULL, $beginning = false, $ending = false, Context $context = null) public static function getPricesDrop($id_lang, $pageNumber = 0, $nbProducts = 10, $count = false, $orderBy = null, $orderWay = null, $beginning = false, $ending = false, Context $context = null)
{ {
if (!Validate::isBool($count)) if (!Validate::isBool($count))
die(Tools::displayError()); die(Tools::displayError());
@@ -1526,7 +1526,7 @@ class ProductCore extends ObjectModel
if (empty($orderWay)) $orderWay = 'DESC'; if (empty($orderWay)) $orderWay = 'DESC';
if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add') if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add')
$orderByPrefix = 'p'; $orderByPrefix = 'p';
elseif ($orderBy == 'name') else if ($orderBy == 'name')
$orderByPrefix = 'pl'; $orderByPrefix = 'pl';
if (!Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay)) if (!Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay))
die (Tools::displayError()); die (Tools::displayError());
@@ -1543,7 +1543,7 @@ class ProductCore extends ObjectModel
'.$context->shop->sqlAsso('product', 'p').' '.$context->shop->sqlAsso('product', 'p').'
WHERE p.`active` = 1 WHERE p.`active` = 1
AND p.`show_price` = 1 AND p.`show_price` = 1
'.((!$beginning AND !$ending) ? ' AND p.`id_product` IN('.((is_array($ids_product) AND sizeof($ids_product)) ? implode(', ', array_map('intval', $ids_product)) : 0).')' : '').' '.((!$beginning AND !$ending) ? ' AND p.`id_product` IN('.((is_array($ids_product) AND count($ids_product)) ? implode(', ', array_map('intval', $ids_product)) : 0).')' : '').'
AND p.`id_product` IN ( AND p.`id_product` IN (
SELECT cp.`id_product` SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg FROM `'._DB_PREFIX_.'category_group` cg
@@ -1570,7 +1570,7 @@ class ProductCore extends ObjectModel
LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`) LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
WHERE p.`active` = 1 WHERE p.`active` = 1
AND p.`show_price` = 1 AND p.`show_price` = 1
'.((!$beginning AND !$ending) ? ' AND p.`id_product` IN ('.((is_array($ids_product) AND sizeof($ids_product)) ? implode(', ', $ids_product) : 0).')' : '').' '.((!$beginning AND !$ending) ? ' AND p.`id_product` IN ('.((is_array($ids_product) AND count($ids_product)) ? implode(', ', $ids_product) : 0).')' : '').'
AND p.`id_product` IN ( AND p.`id_product` IN (
SELECT cp.`id_product` SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg FROM `'._DB_PREFIX_.'category_group` cg
@@ -1580,8 +1580,8 @@ class ProductCore extends ObjectModel
ORDER BY '.(isset($orderByPrefix) ? pSQL($orderByPrefix).'.' : '').'`'.pSQL($orderBy).'`'.' '.pSQL($orderWay).' ORDER BY '.(isset($orderByPrefix) ? pSQL($orderByPrefix).'.' : '').'`'.pSQL($orderBy).'`'.' '.pSQL($orderWay).'
LIMIT '.(int)($pageNumber * $nbProducts).', '.(int)($nbProducts); LIMIT '.(int)($pageNumber * $nbProducts).', '.(int)($nbProducts);
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql);
if($orderBy == 'price') if ($orderBy == 'price')
Tools::orderbyPrice($result,$orderWay); Tools::orderbyPrice($result, $orderWay);
if (!$result) if (!$result)
return false; return false;
return Product::getProductsProperties($id_lang, $result); return Product::getProductsProperties($id_lang, $result);
@@ -1598,8 +1598,7 @@ class ProductCore extends ObjectModel
$ret = array(); $ret = array();
if ($row = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' if ($row = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT `id_category` FROM `'._DB_PREFIX_.'category_product` SELECT `id_category` FROM `'._DB_PREFIX_.'category_product`
WHERE `id_product` = '.(int)$id_product) WHERE `id_product` = '.(int)$id_product))
)
foreach ($row as $val) foreach ($row as $val)
$ret[] = $val['id_category']; $ret[] = $val['id_category'];
return $ret; return $ret;
@@ -1685,8 +1684,8 @@ class ProductCore extends ObjectModel
* @param boolean $with_ecotax insert ecotax in price output. * @param boolean $with_ecotax insert ecotax in price output.
* @return float Product price * @return float Product price
*/ */
public static function getPriceStatic($id_product, $usetax = true, $id_product_attribute = NULL, $decimals = 6, $divisor = NULL, $only_reduc = false, public static function getPriceStatic($id_product, $usetax = true, $id_product_attribute = null, $decimals = 6, $divisor = null, $only_reduc = false,
$usereduc = true, $quantity = 1, $forceAssociatedTax = false, $id_customer = NULL, $id_cart = NULL, $id_address = NULL, &$specificPriceOutput = NULL, $with_ecotax = true, $use_groupReduction = true, Context $context = null) $usereduc = true, $quantity = 1, $forceAssociatedTax = false, $id_customer = null, $id_cart = null, $id_address = null, &$specificPriceOutput = null, $with_ecotax = true, $use_groupReduction = true, Context $context = null)
{ {
if (!$context) if (!$context)
$context = Context::getContext(); $context = Context::getContext();
@@ -1718,13 +1717,13 @@ class ProductCore extends ObjectModel
$condition = ''; $condition = '';
$cache_name = (int)($id_cart).'_'.(int)($id_product); $cache_name = (int)($id_cart).'_'.(int)($id_product);
if(Configuration::get('PS_QTY_DISCOUNT_ON_COMBINATION')) if (Configuration::get('PS_QTY_DISCOUNT_ON_COMBINATION'))
{ {
$cache_name = (int)($id_cart).'_'.(int)($id_product).'_'.(int)($id_product_attribute); $cache_name = (int)($id_cart).'_'.(int)($id_product).'_'.(int)($id_product_attribute);
$condition = ' AND `id_product_attribute` = '.(int)($id_product_attribute); $condition = ' AND `id_product_attribute` = '.(int)($id_product_attribute);
} }
if (!isset(self::$_cart_quantity[$cache_name]) OR self::$_cart_quantity[$cache_name] != (int)($quantity)) if (!isset(self::$_cart_quantity[$cache_name]) || self::$_cart_quantity[$cache_name] != (int)($quantity))
{ {
self::$_cart_quantity[$cache_name] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' self::$_cart_quantity[$cache_name] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT SUM(`quantity`) SELECT SUM(`quantity`)
@@ -1757,7 +1756,7 @@ class ProductCore extends ObjectModel
$zipcode = $address_infos['postcode']; $zipcode = $address_infos['postcode'];
} }
} }
elseif (isset($context->customer->geoloc_id_country)) else if (isset($context->customer->geoloc_id_country))
{ {
$id_country = (int)$context->customer->geoloc_id_country; $id_country = (int)$context->customer->geoloc_id_country;
$id_state = (int)$context->customer->id_state; $id_state = (int)$context->customer->id_state;
@@ -1797,8 +1796,8 @@ class ProductCore extends ObjectModel
public static function priceCalculation($id_shop, $id_product, $id_product_attribute, $id_country, $id_state, $zipcode, $id_currency, $id_group, $quantity, $use_tax, $decimals, $only_reduc, $use_reduc, $with_ecotax, &$specific_price, $use_groupReduction) public static function priceCalculation($id_shop, $id_product, $id_product_attribute, $id_country, $id_state, $zipcode, $id_currency, $id_group, $quantity, $use_tax, $decimals, $only_reduc, $use_reduc, $with_ecotax, &$specific_price, $use_groupReduction)
{ {
// Caching // Caching
if ($id_product_attribute === NULL) if ($id_product_attribute === null)
$product_attribute_label = 'NULL'; $product_attribute_label = 'null';
else else
$product_attribute_label = ($id_product_attribute === false ? 'false' : $id_product_attribute); $product_attribute_label = ($id_product_attribute === false ? 'false' : $id_product_attribute);
$cacheId = $id_product.'-'.$id_shop.'-'.$id_currency.'-'.$id_country.'-'.$id_state.'-'.$zipcode.'-'.$id_group.'-'.$quantity.'-'.$product_attribute_label.'-'.($use_tax?'1':'0').'-'.$decimals.'-'.($only_reduc?'1':'0').'-'.($use_reduc?'1':'0').'-'.$with_ecotax; $cacheId = $id_product.'-'.$id_shop.'-'.$id_currency.'-'.$id_country.'-'.$id_state.'-'.$zipcode.'-'.$id_group.'-'.$quantity.'-'.$product_attribute_label.'-'.($use_tax?'1':'0').'-'.$decimals.'-'.($only_reduc?'1':'0').'-'.($use_reduc?'1':'0').'-'.$with_ecotax;
@@ -1955,7 +1954,7 @@ class ProductCore extends ObjectModel
* @param integer $divisor Util when paying many time without fees (optional) * @param integer $divisor Util when paying many time without fees (optional)
* @return float Product price in euros * @return float Product price in euros
*/ */
public function getPrice($tax = true, $id_product_attribute = NULL, $decimals = 6, $divisor = NULL, $only_reduc = false, $usereduc = true, $quantity = 1) public function getPrice($tax = true, $id_product_attribute = null, $decimals = 6, $divisor = null, $only_reduc = false, $usereduc = true, $quantity = 1)
{ {
return Product::getPriceStatic((int)($this->id), $tax, $id_product_attribute, $decimals, $divisor, $only_reduc, $usereduc, $quantity); return Product::getPriceStatic((int)($this->id), $tax, $id_product_attribute, $decimals, $divisor, $only_reduc, $usereduc, $quantity);
} }
@@ -1975,7 +1974,7 @@ class ProductCore extends ObjectModel
public function getPriceWithoutReduct($notax = false, $id_product_attribute = false) public function getPriceWithoutReduct($notax = false, $id_product_attribute = false)
{ {
return Product::getPriceStatic((int)($this->id), !$notax, $id_product_attribute, 6, NULL, false, false); return Product::getPriceStatic((int)($this->id), !$notax, $id_product_attribute, 6, null, false, false);
} }
/** /**
@@ -1985,7 +1984,7 @@ class ProductCore extends ObjectModel
* @object $smarty Smarty object * @object $smarty Smarty object
* @return string Price with right format and currency * @return string Price with right format and currency
*/ */
static function convertPrice($params, &$smarty) public static function convertPrice($params, &$smarty)
{ {
return Tools::displayPrice($params['price'], $smarty->ps_currency); return Tools::displayPrice($params['price'], $smarty->ps_currency);
} }
@@ -1997,14 +1996,14 @@ class ProductCore extends ObjectModel
* @param object $smarty DEPRECATED * @param object $smarty DEPRECATED
* @return Ambigous <string, mixed, Ambigous <number, string>> * @return Ambigous <string, mixed, Ambigous <number, string>>
*/ */
static function convertPriceWithCurrency($params, &$smarty) public static function convertPriceWithCurrency($params, &$smarty)
{ {
if (!isset($params['convert'])) if (!isset($params['convert']))
$params['convert'] = true; $params['convert'] = true;
return Tools::displayPrice($params['price'], $params['currency'], false); return Tools::displayPrice($params['price'], $params['currency'], false);
} }
static function displayWtPrice($params, &$smarty) public static function displayWtPrice($params, &$smarty)
{ {
return Tools::displayPrice($params['p'], $smarty->ps_currency); return Tools::displayPrice($params['p'], $smarty->ps_currency);
} }
@@ -2016,7 +2015,7 @@ class ProductCore extends ObjectModel
* @param object DEPRECATED $smarty * @param object DEPRECATED $smarty
* @return Ambigous <string, mixed, Ambigous <number, string>> * @return Ambigous <string, mixed, Ambigous <number, string>>
*/ */
static function displayWtPriceWithCurrency($params, &$smarty) public static function displayWtPriceWithCurrency($params, &$smarty)
{ {
return Tools::displayPrice($params['price'], $params['currency'], false); return Tools::displayPrice($params['price'], $params['currency'], false);
} }
@@ -2028,10 +2027,10 @@ class ProductCore extends ObjectModel
* @param integer $id_product_attribute Product attribute id (optional) * @param integer $id_product_attribute Product attribute id (optional)
* @return integer Available quantities * @return integer Available quantities
*/ */
public static function getQuantity($id_product, $id_product_attribute = NULL, $cache_is_pack = NULL) public static function getQuantity($id_product, $id_product_attribute = null, $cache_is_pack = null)
{ {
$lang = Configuration::get('PS_LANG_DEFAULT'); $lang = Configuration::get('PS_LANG_DEFAULT');
if (((int)$cache_is_pack OR ($cache_is_pack === NULL AND Pack::isPack((int)$id_product, (int)$lang))) AND !Pack::isInStock((int)$id_product, (int)$lang)) if (((int)$cache_is_pack OR ($cache_is_pack === null AND Pack::isPack((int)$id_product, (int)$lang))) AND !Pack::isInStock((int)$id_product, (int)$lang))
return 0; return 0;
$product = new Product($id_product); $product = new Product($id_product);
@@ -2080,7 +2079,7 @@ class ProductCore extends ObjectModel
else if (is_string($productAttribute)) else if (is_string($productAttribute))
$sql .= ' AND stock.id_product_attribute = IFNULL('.pSQL($productAttribute).'.id_product_attribute, 0)'; $sql .= ' AND stock.id_product_attribute = IFNULL('.pSQL($productAttribute).'.id_product_attribute, 0)';
} }
$sql .= $shop->sqlRestriction(Shop::SHARE_STOCK, 'stock') . ' '; $sql .= $shop->sqlRestriction(Shop::SHARE_STOCK, 'stock').' ';
} }
return $sql; return $sql;
@@ -2098,7 +2097,7 @@ class ProductCore extends ObjectModel
public function setStock($quantity, $id_product_attribute = 0, $update = false, Context $context = null) public function setStock($quantity, $id_product_attribute = 0, $update = false, Context $context = null)
{ {
if (!$this->id) if (!$this->id)
return ; return;
if (!$context) if (!$context)
$context = Context::getContext(); $context = Context::getContext();
$shop = $context->shop; $shop = $context->shop;
@@ -2131,7 +2130,7 @@ class ProductCore extends ObjectModel
if ($id_stock = Stock::getStockId($this->id, $id_product_attribute, $shop->getID(true))) if ($id_stock = Stock::getStockId($this->id, $id_product_attribute, $shop->getID(true)))
{ {
$sql = 'UPDATE '._DB_PREFIX_.'stock $sql = 'UPDATE '._DB_PREFIX_.'stock
SET quantity = '.(($update) ? 'quantity + '. $quantity : $quantity).' SET quantity = '.(($update) ? 'quantity + '.$quantity : $quantity).'
WHERE id_stock = '.$id_stock; WHERE id_stock = '.$id_stock;
Db::getInstance()->Execute($sql); Db::getInstance()->Execute($sql);
} }
@@ -2148,7 +2147,7 @@ class ProductCore extends ObjectModel
if ($id_stock = Stock::getStockId($this->id, 0, $shop->getID(true))) if ($id_stock = Stock::getStockId($this->id, 0, $shop->getID(true)))
{ {
$sql = 'UPDATE '._DB_PREFIX_.'stock $sql = 'UPDATE '._DB_PREFIX_.'stock
SET quantity = '.(($update) ? 'quantity + '. $quantity : $quantity).' SET quantity = '.(($update) ? 'quantity + '.$quantity : $quantity).'
WHERE id_stock = '.$id_stock; WHERE id_stock = '.$id_stock;
Db::getInstance()->Execute($sql); Db::getInstance()->Execute($sql);
} }
@@ -2198,7 +2197,7 @@ class ProductCore extends ObjectModel
* @param array $product Array with ordered product (quantity, id_product_attribute if applicable) * @param array $product Array with ordered product (quantity, id_product_attribute if applicable)
* @return mixed Query result * @return mixed Query result
*/ */
public static function updateQuantity($product, $id_order = NULL) public static function updateQuantity($product, $id_order = null)
{ {
if (!is_array($product)) if (!is_array($product))
die (Tools::displayError()); die (Tools::displayError());
@@ -2209,7 +2208,7 @@ class ProductCore extends ObjectModel
if (Pack::isPack((int)($product['id_product']))) if (Pack::isPack((int)($product['id_product'])))
{ {
$products_pack = Pack::getItems((int)($product['id_product']), (int)(Configuration::get('PS_LANG_DEFAULT'))); $products_pack = Pack::getItems((int)($product['id_product']), (int)(Configuration::get('PS_LANG_DEFAULT')));
foreach($products_pack AS $product_pack) foreach ($products_pack as $product_pack)
{ {
$tab_product_pack['id_product'] = (int)($product_pack->id); $tab_product_pack['id_product'] = (int)($product_pack->id);
$tab_product_pack['id_product_attribute'] = self::getDefaultAttribute($tab_product_pack['id_product'], 1); $tab_product_pack['id_product_attribute'] = self::getDefaultAttribute($tab_product_pack['id_product'], 1);
@@ -2219,7 +2218,7 @@ class ProductCore extends ObjectModel
} }
$productObj = new Product((int)$product['id_product'], false, (int)Configuration::get('PS_LANG_DEFAULT')); $productObj = new Product((int)$product['id_product'], false, (int)Configuration::get('PS_LANG_DEFAULT'));
return $productObj->addStockMvt(-(int)$product['cart_quantity'], (int)_STOCK_MOVEMENT_ORDER_REASON_, (int)$product['id_product_attribute'], (int)$id_order, NULL); return $productObj->addStockMvt(-(int)$product['cart_quantity'], (int)_STOCK_MOVEMENT_ORDER_REASON_, (int)$product['id_product_attribute'], (int)$id_order, null);
} }
public static function reinjectQuantities(&$orderDetail, $quantity, Context $context = null) public static function reinjectQuantities(&$orderDetail, $quantity, Context $context = null)
@@ -2232,7 +2231,7 @@ class ProductCore extends ObjectModel
if (Pack::isPack((int)($orderDetail->product_id))) if (Pack::isPack((int)($orderDetail->product_id)))
{ {
$products_pack = Pack::getItems((int)($orderDetail->product_id), (int)(Configuration::get('PS_LANG_DEFAULT'))); $products_pack = Pack::getItems((int)($orderDetail->product_id), (int)(Configuration::get('PS_LANG_DEFAULT')));
foreach($products_pack AS $product_pack) foreach ($products_pack as $product_pack)
if (!$product_pack->addStockMvt((int)($product_pack->pack_quantity * $quantity), _STOCK_MOVEMENT_ORDER_REASON_, (int)$product_pack->id_product_attribute, (int)$orderDetail->id_order, (int)$context->employee->id)) if (!$product_pack->addStockMvt((int)($product_pack->pack_quantity * $quantity), _STOCK_MOVEMENT_ORDER_REASON_, (int)$product_pack->id_product_attribute, (int)$orderDetail->id_order, (int)$context->employee->id))
return false; return false;
} }
@@ -2538,10 +2537,9 @@ class ProductCore extends ObjectModel
$sql->leftJoin('product p ON p.`id_product` = cp.`id_product`'); $sql->leftJoin('product p ON p.`id_product` = cp.`id_product`');
$sql->join($context->shop->sqlAsso('product', 'p')); $sql->join($context->shop->sqlAsso('product', 'p'));
$sql->leftJoin('product_lang pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)$id_lang.$context->shop->sqlLang('pl').')'); $sql->leftJoin('product_lang pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)$id_lang.$context->shop->sqlLang('pl').')');
$sql->leftJoin('manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer`'); $sql->leftJoin('manufacturer m ON m.`id_manufacturer` = p.`id_manufacturer`');
$where = 'pl.`name` LIKE \'%'.pSQL($query).'%\' OR p.`reference` LIKE \'%'.pSQL($query).'%\' OR p.`supplier_reference` LIKE \'%'.pSQL($query).'%\''; $where = 'pl.`name` LIKE \'%'.pSQL($query).'%\' OR p.`reference` LIKE \'%'.pSQL($query).'%\' OR p.`supplier_reference` LIKE \'%'.pSQL($query).'%\'';
$sql->where();
$sql->groupBy('`id_product`'); $sql->groupBy('`id_product`');
$sql->orderBy('pl.`name` ASC'); $sql->orderBy('pl.`name` ASC');
@@ -2559,9 +2557,9 @@ class ProductCore extends ObjectModel
return false; return false;
$resultsArray = array(); $resultsArray = array();
foreach ($result AS $row) foreach ($result as $row)
{ {
$row['price'] = Product::getPriceStatic($row['id_product'], true, NULL, 2); $row['price'] = Product::getPriceStatic($row['id_product'], true, null, 2);
$resultsArray[] = $row; $resultsArray[] = $row;
} }
return $resultsArray; return $resultsArray;
@@ -2600,7 +2598,7 @@ class ProductCore extends ObjectModel
$combinationImages['old'][$id_product_attribute_old] = $resultImages; $combinationImages['old'][$id_product_attribute_old] = $resultImages;
$combinationImages['new'][$id_product_attribute_new] = $resultImages; $combinationImages['new'][$id_product_attribute_new] = $resultImages;
} }
foreach ($result2 AS $row2) foreach ($result2 as $row2)
{ {
$row2['id_product_attribute'] = $id_product_attribute_new; $row2['id_product_attribute'] = $id_product_attribute_new;
$return &= Db::getInstance()->AutoExecute(_DB_PREFIX_.'product_attribute_combination', $row2, 'INSERT'); $return &= Db::getInstance()->AutoExecute(_DB_PREFIX_.'product_attribute_combination', $row2, 'INSERT');
@@ -2621,7 +2619,7 @@ class ProductCore extends ObjectModel
SELECT `id_image` SELECT `id_image`
FROM `'._DB_PREFIX_.'product_attribute_image` FROM `'._DB_PREFIX_.'product_attribute_image`
WHERE `id_product_attribute` = '.(int)($id_product_attribute)); WHERE `id_product_attribute` = '.(int)($id_product_attribute));
foreach ($data AS $row) foreach ($data as $row)
$combinationImages[] = (int)($row['id_image']); $combinationImages[] = (int)($row['id_image']);
return $combinationImages; return $combinationImages;
} }
@@ -2650,7 +2648,7 @@ class ProductCore extends ObjectModel
if (!Db::getInstance()->NumRows()) if (!Db::getInstance()->NumRows())
return true; return true;
$query = 'INSERT INTO `'._DB_PREFIX_.'product_tag` (`id_product`, `id_tag`) VALUES'; $query = 'INSERT INTO `'._DB_PREFIX_.'product_tag` (`id_product`, `id_tag`) VALUES';
foreach($tags as $tag) foreach ($tags as $tag)
$query .= ' ('.(int)($id_product_new).', '.(int)($tag['id_tag']).'),'; $query .= ' ('.(int)($id_product_new).', '.(int)($tag['id_tag']).'),';
$query = rtrim($query, ','); $query = rtrim($query, ',');
return Db::getInstance()->Execute($query); return Db::getInstance()->Execute($query);
@@ -2732,7 +2730,7 @@ class ProductCore extends ObjectModel
if (empty($customizations['fields'])) if (empty($customizations['fields']))
return array(); return array();
$customizationFieldIds = array(); $customizationFieldIds = array();
foreach ($customizations['fields'] AS $customizationField) foreach ($customizations['fields'] as $customizationField)
$customizationFieldIds[] = (int)($customizationField['id_customization_field']); $customizationFieldIds[] = (int)($customizationField['id_customization_field']);
if (($customizationLabels = Db::getInstance()->ExecuteS(' if (($customizationLabels = Db::getInstance()->ExecuteS('
SELECT `id_customization_field`, `id_lang`, `name` SELECT `id_customization_field`, `id_lang`, `name`
@@ -2740,7 +2738,7 @@ class ProductCore extends ObjectModel
WHERE `id_customization_field` IN ('.implode(', ', $customizationFieldIds).') WHERE `id_customization_field` IN ('.implode(', ', $customizationFieldIds).')
ORDER BY `id_customization_field`')) === false) ORDER BY `id_customization_field`')) === false)
return false; return false;
foreach ($customizationLabels AS $customizationLabel) foreach ($customizationLabels as $customizationLabel)
$customizations['labels'][$customizationLabel['id_customization_field']][] = $customizationLabel; $customizations['labels'][$customizationLabel['id_customization_field']][] = $customizationLabel;
return $customizations; return $customizations;
} }
@@ -2762,7 +2760,7 @@ class ProductCore extends ObjectModel
return false; return false;
if (empty($customizations)) if (empty($customizations))
return true; return true;
foreach ($customizations['fields'] AS $customizationField) foreach ($customizations['fields'] as $customizationField)
{ {
/* The new datas concern the new product */ /* The new datas concern the new product */
$customizationField['id_product'] = (int)($productId); $customizationField['id_product'] = (int)($productId);
@@ -2773,7 +2771,7 @@ class ProductCore extends ObjectModel
if (isset($customizations['labels'])) if (isset($customizations['labels']))
{ {
$query = 'INSERT INTO `'._DB_PREFIX_.'customization_field_lang` (`id_customization_field`, `id_lang`, `name`) VALUES '; $query = 'INSERT INTO `'._DB_PREFIX_.'customization_field_lang` (`id_customization_field`, `id_lang`, `name`) VALUES ';
foreach ($customizations['labels'][$oldCustomizationFieldId] AS $customizationLabel) foreach ($customizations['labels'][$oldCustomizationFieldId] as $customizationLabel)
$query .= '('.(int)($customizationFieldId).', '.(int)($customizationLabel['id_lang']).', \''.pSQL($customizationLabel['name']).'\'), '; $query .= '('.(int)($customizationFieldId).', '.(int)($customizationLabel['id_lang']).', \''.pSQL($customizationLabel['name']).'\'), ';
$query = rtrim($query, ', '); $query = rtrim($query, ', ');
if (!Db::getInstance()->Execute($query)) if (!Db::getInstance()->Execute($query))
@@ -2802,7 +2800,7 @@ class ProductCore extends ObjectModel
return ''; return '';
$result = ''; $result = '';
foreach ($this->tags[$id_lang] AS $tagName) foreach ($this->tags[$id_lang] as $tagName)
$result .= $tagName.', '; $result .= $tagName.', ';
return rtrim($result, ', '); return rtrim($result, ', ');
} }
@@ -2823,10 +2821,9 @@ class ProductCore extends ObjectModel
// Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it: consider adding it in order to avoid unnecessary queries // Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it: consider adding it in order to avoid unnecessary queries
$row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']); $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']);
if (Combination::isFeatureActive() AND (!isset($row['id_product_attribute']) OR !$row['id_product_attribute']) if (Combination::isFeatureActive() && (!isset($row['id_product_attribute']) || !$row['id_product_attribute'])
AND ((isset($row['cache_default_attribute']) AND ($ipa_default = $row['cache_default_attribute']) !== NULL) && ((isset($row['cache_default_attribute']) && ($ipa_default = $row['cache_default_attribute']) !== null)
OR ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp']))) || ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp']))))
)
$row['id_product_attribute'] = $ipa_default; $row['id_product_attribute'] = $ipa_default;
if (!Combination::isFeatureActive() OR !isset($row['id_product_attribute'])) if (!Combination::isFeatureActive() OR !isset($row['id_product_attribute']))
$row['id_product_attribute'] = 0; $row['id_product_attribute'] = 0;
@@ -2842,26 +2839,26 @@ class ProductCore extends ObjectModel
$row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)($id_lang)); $row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)($id_lang));
$row['link'] = $context->link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']); $row['link'] = $context->link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']);
$row['attribute_price'] = (isset($row['id_product_attribute']) AND $row['id_product_attribute']) ? (float)(Product::getProductAttributePrice($row['id_product_attribute'])) : 0; $row['attribute_price'] = (isset($row['id_product_attribute']) AND $row['id_product_attribute']) ? (float)(Product::getProductAttributePrice($row['id_product_attribute'])) : 0;
$row['price_tax_exc'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), (self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6)); $row['price_tax_exc'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : null), (self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6));
if (self::$_taxCalculationMethod == PS_TAX_EXC) if (self::$_taxCalculationMethod == PS_TAX_EXC)
{ {
$row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2); $row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2);
$row['price'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 6); $row['price'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : null), 6);
$row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 2, NULL, false, false); $row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : null), 2, null, false, false);
} }
else else
{ {
$row['price'] = Tools::ps_round(Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 2), 2); $row['price'] = Tools::ps_round(Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : null), 2), 2);
$row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 6, NULL, false, false); $row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : null), 6, null, false, false);
} }
$row['reduction'] = Product::getPriceStatic((int)($row['id_product']), (bool)$usetax, (int)($row['id_product_attribute']), 6, NULL, true, true, 1, true, NULL, NULL, NULL, $specific_prices); $row['reduction'] = Product::getPriceStatic((int)($row['id_product']), (bool)$usetax, (int)($row['id_product_attribute']), 6, null, true, true, 1, true, null, null, null, $specific_prices);
$row['specific_prices'] = $specific_prices; $row['specific_prices'] = $specific_prices;
if ($row['id_product_attribute']) if ($row['id_product_attribute'])
{ {
$row['quantity_all_versions'] = $row['quantity']; $row['quantity_all_versions'] = $row['quantity'];
$row['quantity'] = Product::getQuantity((int)$row['id_product'], $row['id_product_attribute'], isset($row['cache_is_pack']) ? $row['cache_is_pack'] : NULL); $row['quantity'] = Product::getQuantity((int)$row['id_product'], $row['id_product_attribute'], isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null);
} }
$row['id_image'] = Product::defineProductImage($row, $id_lang); $row['id_image'] = Product::defineProductImage($row, $id_lang);
$row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']); $row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']);
@@ -2881,8 +2878,8 @@ class ProductCore extends ObjectModel
public static function getProductsProperties($id_lang, $query_result) public static function getProductsProperties($id_lang, $query_result)
{ {
$resultsArray = array(); $resultsArray = array();
if(is_array($query_result)) if (is_array($query_result))
foreach ($query_result AS $row) foreach ($query_result as $row)
if ($row2 = Product::getProductProperties($id_lang, $row)) if ($row2 = Product::getProductProperties($id_lang, $row))
$resultsArray[] = $row2; $resultsArray[] = $row2;
return $resultsArray; return $resultsArray;
@@ -2957,11 +2954,12 @@ class ProductCore extends ObjectModel
ORDER BY `id_product`, `id_product_attribute`, `type`, `index`')) ORDER BY `id_product`, `id_product_attribute`, `type`, `index`'))
return false; return false;
$customizedDatas = array(); $customizedDatas = array();
foreach ($result AS $row) foreach ($result as $row)
$customizedDatas[(int)($row['id_product'])][(int)($row['id_product_attribute'])][(int)($row['id_customization'])]['datas'][(int)($row['type'])][] = $row; $customizedDatas[(int)($row['id_product'])][(int)($row['id_product_attribute'])][(int)($row['id_customization'])]['datas'][(int)($row['type'])][] = $row;
if (!$result = Db::getInstance()->ExecuteS('SELECT `id_product`, `id_product_attribute`, `id_customization`, `quantity`, `quantity_refunded`, `quantity_returned` FROM `'._DB_PREFIX_.'customization` WHERE `id_cart` = '.(int)($id_cart).($only_in_cart ? ' AND `in_cart` = 1' : ''))) if (!$result = Db::getInstance()->ExecuteS('SELECT `id_product`, `id_product_attribute`, `id_customization`, `quantity`, `quantity_refunded`, `quantity_returned`
FROM `'._DB_PREFIX_.'customization` WHERE `id_cart` = '.(int)($id_cart).($only_in_cart ? ' AND `in_cart` = 1' : '')))
return false; return false;
foreach ($result AS $row) foreach ($result as $row)
{ {
$customizedDatas[(int)($row['id_product'])][(int)($row['id_product_attribute'])][(int)($row['id_customization'])]['quantity'] = (int)($row['quantity']); $customizedDatas[(int)($row['id_product'])][(int)($row['id_product_attribute'])][(int)($row['id_customization'])]['quantity'] = (int)($row['quantity']);
$customizedDatas[(int)($row['id_product'])][(int)($row['id_product_attribute'])][(int)($row['id_customization'])]['quantity_refunded'] = (int)($row['quantity_refunded']); $customizedDatas[(int)($row['id_product'])][(int)($row['id_product_attribute'])][(int)($row['id_customization'])]['quantity_refunded'] = (int)($row['quantity_refunded']);
@@ -2972,7 +2970,7 @@ class ProductCore extends ObjectModel
public static function addCustomizationPrice(&$products, &$customizedDatas) public static function addCustomizationPrice(&$products, &$customizedDatas)
{ {
foreach ($products AS &$productUpdate) foreach ($products as &$productUpdate)
{ {
if (!Customization::isFeatureActive()) if (!Customization::isFeatureActive())
{ {
@@ -2992,7 +2990,7 @@ class ProductCore extends ObjectModel
$price = isset($productUpdate['price']) ? $productUpdate['price'] : $productUpdate['product_price']; $price = isset($productUpdate['price']) ? $productUpdate['price'] : $productUpdate['product_price'];
$priceWt = $price * (1 + ((isset($productUpdate['tax_rate']) ? $productUpdate['tax_rate'] : $productUpdate['rate']) * 0.01)); $priceWt = $price * (1 + ((isset($productUpdate['tax_rate']) ? $productUpdate['tax_rate'] : $productUpdate['rate']) * 0.01));
if (isset($customizedDatas[$productId][$productAttributeId])) if (isset($customizedDatas[$productId][$productAttributeId]))
foreach ($customizedDatas[$productId][$productAttributeId] AS $customization) foreach ($customizedDatas[$productId][$productAttributeId] as $customization)
{ {
$customizationQuantity += (int)($customization['quantity']); $customizationQuantity += (int)($customization['quantity']);
$customizationQuantityRefunded += (int)($customization['quantity_refunded']); $customizationQuantityRefunded += (int)($customization['quantity_refunded']);
@@ -3030,25 +3028,32 @@ class ProductCore extends ObjectModel
{ {
$max = array(Product::CUSTOMIZE_FILE => (int)(Tools::getValue('uploadable_files')), Product::CUSTOMIZE_TEXTFIELD => (int)(Tools::getValue('text_fields'))); $max = array(Product::CUSTOMIZE_FILE => (int)(Tools::getValue('uploadable_files')), Product::CUSTOMIZE_TEXTFIELD => (int)(Tools::getValue('text_fields')));
/* Get customization field ids */ /* Get customization field ids */
if (($result = Db::getInstance()->ExecuteS('SELECT `id_customization_field`, `type` FROM `'._DB_PREFIX_.'customization_field` WHERE `id_product` = '.(int)($this->id).' ORDER BY `id_customization_field`')) === false) if (($result = Db::getInstance()->ExecuteS('SELECT `id_customization_field`, `type` FROM `'._DB_PREFIX_.'customization_field` WHERE `id_product` = '.(int)($this->id).'
ORDER BY `id_customization_field`')) === false)
return false; return false;
if (empty($result)) if (empty($result))
return true; return true;
$customizationFields = array(Product::CUSTOMIZE_FILE => array(), Product::CUSTOMIZE_TEXTFIELD => array()); $customizationFields = array(Product::CUSTOMIZE_FILE => array(), Product::CUSTOMIZE_TEXTFIELD => array());
foreach ($result AS $row) foreach ($result as $row)
$customizationFields[(int)($row['type'])][] = (int)($row['id_customization_field']); $customizationFields[(int)($row['type'])][] = (int)($row['id_customization_field']);
$extraFile = count($customizationFields[Product::CUSTOMIZE_FILE]) - $max[Product::CUSTOMIZE_FILE]; $extraFile = count($customizationFields[Product::CUSTOMIZE_FILE]) - $max[Product::CUSTOMIZE_FILE];
$extraText = count($customizationFields[Product::CUSTOMIZE_TEXTFIELD]) - $max[Product::CUSTOMIZE_TEXTFIELD]; $extraText = count($customizationFields[Product::CUSTOMIZE_TEXTFIELD]) - $max[Product::CUSTOMIZE_TEXTFIELD];
/* If too much inside the database, deletion */ /* If too much inside the database, deletion */
if ($extraFile > 0 AND count($customizationFields[Product::CUSTOMIZE_FILE]) - $extraFile >= 0 AND if ($extraFile > 0 && count($customizationFields[Product::CUSTOMIZE_FILE]) - $extraFile >= 0 &&
(!Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field` WHERE `id_product` = '.(int)($this->id).' AND `type` = '.Product::CUSTOMIZE_FILE.' AND `id_customization_field` >= '.(int)($customizationFields[Product::CUSTOMIZE_FILE][count($customizationFields[Product::CUSTOMIZE_FILE]) - $extraFile])) (!Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field`
OR !Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field_lang` WHERE `id_customization_field` NOT IN (SELECT `id_customization_field` FROM `'._DB_PREFIX_.'customization_field`)'))) WHERE `id_product` = '.(int)($this->id).' AND `type` = '.Product::CUSTOMIZE_FILE.'
AND `id_customization_field` >= '.(int)($customizationFields[Product::CUSTOMIZE_FILE][count($customizationFields[Product::CUSTOMIZE_FILE]) - $extraFile]))
|| !Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field_lang`
WHERE `id_customization_field` NOT IN (SELECT `id_customization_field` FROM `'._DB_PREFIX_.'customization_field`)')))
return false; return false;
if ($extraText > 0 AND count($customizationFields[Product::CUSTOMIZE_TEXTFIELD]) - $extraText >= 0 AND if ($extraText > 0 && count($customizationFields[Product::CUSTOMIZE_TEXTFIELD]) - $extraText >= 0 &&
(!Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field` WHERE `id_product` = '.(int)($this->id).' AND `type` = '.Product::CUSTOMIZE_TEXTFIELD.' AND `id_customization_field` >= '.(int)($customizationFields[Product::CUSTOMIZE_TEXTFIELD][count($customizationFields[Product::CUSTOMIZE_TEXTFIELD]) - $extraText])) (!Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field`
OR !Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field_lang` WHERE `id_customization_field` NOT IN (SELECT `id_customization_field` FROM `'._DB_PREFIX_.'customization_field`)'))) WHERE `id_product` = '.(int)($this->id).' AND `type` = '.Product::CUSTOMIZE_TEXTFIELD.'
AND `id_customization_field` >= '.(int)($customizationFields[Product::CUSTOMIZE_TEXTFIELD][count($customizationFields[Product::CUSTOMIZE_TEXTFIELD]) - $extraText]))
|| !Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization_field_lang`
WHERE `id_customization_field` NOT IN (SELECT `id_customization_field` FROM `'._DB_PREFIX_.'customization_field`)')))
return false; return false;
// Refresh cache of feature detachable // Refresh cache of feature detachable
@@ -3062,13 +3067,13 @@ class ProductCore extends ObjectModel
// Label insertion // Label insertion
if (!Db::getInstance()->Execute(' if (!Db::getInstance()->Execute('
INSERT INTO `'._DB_PREFIX_.'customization_field` (`id_product`, `type`, `required`) INSERT INTO `'._DB_PREFIX_.'customization_field` (`id_product`, `type`, `required`)
VALUES ('.(int)$this->id.', '.(int)($type).', 0)') OR VALUES ('.(int)$this->id.', '.(int)($type).', 0)') ||
!$id_customization_field = (int)(Db::getInstance()->Insert_ID())) !$id_customization_field = (int)(Db::getInstance()->Insert_ID()))
return false; return false;
// Multilingual label name creation // Multilingual label name creation
$values = ''; $values = '';
foreach ($languages AS $language) foreach ($languages as $language)
$values .= '('.(int)($id_customization_field).', '.(int)($language['id_lang']).', \'\'), '; $values .= '('.(int)($id_customization_field).', '.(int)($language['id_lang']).', \'\'), ';
$values = rtrim($values, ', '); $values = rtrim($values, ', ');
if (!Db::getInstance()->Execute(' if (!Db::getInstance()->Execute('
@@ -3099,7 +3104,7 @@ class ProductCore extends ObjectModel
public function updateLabels() public function updateLabels()
{ {
$hasRequiredFields = 0; $hasRequiredFields = 0;
foreach ($_POST AS $field => $value) foreach ($_POST as $field => $value)
/* Label update */ /* Label update */
if (strncmp($field, 'label_', 6) == 0) if (strncmp($field, 'label_', 6) == 0)
{ {
@@ -3117,7 +3122,7 @@ class ProductCore extends ObjectModel
if (!Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'customization_field` SET `required` = '.(int)($isRequired).' WHERE `id_customization_field` = '.(int)($tmp[2]))) if (!Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'customization_field` SET `required` = '.(int)($isRequired).' WHERE `id_customization_field` = '.(int)($tmp[2])))
return false; return false;
} }
if ($hasRequiredFields AND !Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'product` SET `customizable` = 2 WHERE `id_product` = '.(int)($this->id))) if ($hasRequiredFields && !Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'product` SET `customizable` = 2 WHERE `id_product` = '.(int)($this->id)))
return false; return false;
if (!$this->_deleteOldLabels()) if (!$this->_deleteOldLabels())
return false; return false;
@@ -3138,7 +3143,7 @@ class ProductCore extends ObjectModel
if ($id_lang) if ($id_lang)
return $result; return $result;
$customizationFields = array(); $customizationFields = array();
foreach ($result AS $row) foreach ($result as $row)
$customizationFields[(int)($row['type'])][(int)($row['id_customization_field'])][(int)($row['id_lang'])] = $row; $customizationFields[(int)($row['type'])][(int)($row['id_customization_field'])][(int)($row['id_lang'])] = $row;
return $customizationFields; return $customizationFields;
} }
@@ -3179,7 +3184,7 @@ class ProductCore extends ObjectModel
$fields_present = array(); $fields_present = array();
foreach ($fields as $field) foreach ($fields as $field)
$fields_present[] = array('id_customization_field' => $field['index'], 'type' => $field['type']); $fields_present[] = array('id_customization_field' => $field['index'], 'type' => $field['type']);
foreach ($requiredFields AS $required_field) foreach ($requiredFields as $required_field)
if (!in_array($required_field, $fields_present)) if (!in_array($required_field, $fields_present))
return false; return false;
return true; return true;
@@ -3198,7 +3203,7 @@ class ProductCore extends ObjectModel
if (!((int)$id_product > 0) || !is_array($categories) || empty($categories)) if (!((int)$id_product > 0) || !is_array($categories) || empty($categories))
return false; return false;
$sql = 'SELECT id_product FROM `'._DB_PREFIX_.'category_product` WHERE `id_product`='.(int)($id_product).' AND `id_category` IN('; $sql = 'SELECT id_product FROM `'._DB_PREFIX_.'category_product` WHERE `id_product`='.(int)($id_product).' AND `id_category` IN(';
foreach ($categories AS $category) foreach ($categories as $category)
$sql .= (int)($category['id_category']).','; $sql .= (int)($category['id_category']).',';
$sql = rtrim($sql, ',').')'; $sql = rtrim($sql, ',').')';
@@ -3251,7 +3256,7 @@ class ProductCore extends ObjectModel
$reason = new StockMvtReason($id_reason); $reason = new StockMvtReason($id_reason);
if (!$reason->id) if (!$reason->id)
return ; return;
// Update product stock // Update product stock
$quantity = abs((int)$quantity) * $reason->sign; $quantity = abs((int)$quantity) * $reason->sign;
@@ -3280,7 +3285,8 @@ class ProductCore extends ObjectModel
public function getStockMvts($id_lang) public function getStockMvts($id_lang)
{ {
return Db::getInstance()->ExecuteS(' return Db::getInstance()->ExecuteS('
SELECT sm.id_stock_mvt, sm.date_add, sm.quantity, sm.id_order, CONCAT(pl.name, \' \', GROUP_CONCAT(IFNULL(al.name, \'\'), \'\')) product_name, CONCAT(e.lastname, \' \', e.firstname) employee, mrl.name reason SELECT sm.id_stock_mvt, sm.date_add, sm.quantity, sm.id_order,
CONCAT(pl.name, \' \', GROUP_CONCAT(IFNULL(al.name, \'\'), \'\')) product_name, CONCAT(e.lastname, \' \', e.firstname) employee, mrl.name reason
FROM `'._DB_PREFIX_.'stock_mvt` sm FROM `'._DB_PREFIX_.'stock_mvt` sm
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (sm.id_product = pl.id_product AND pl.id_lang = '.(int)$id_lang.Context::getContext()->shop->sqlLang('pl').') LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (sm.id_product = pl.id_product AND pl.id_lang = '.(int)$id_lang.Context::getContext()->shop->sqlLang('pl').')
LEFT JOIN `'._DB_PREFIX_.'stock_mvt_reason_lang` mrl ON (sm.id_stock_mvt_reason = mrl.id_stock_mvt_reason AND mrl.id_lang = '.(int)$id_lang.') LEFT JOIN `'._DB_PREFIX_.'stock_mvt_reason_lang` mrl ON (sm.id_stock_mvt_reason = mrl.id_stock_mvt_reason AND mrl.id_lang = '.(int)$id_lang.')
@@ -3300,7 +3306,7 @@ class ProductCore extends ObjectModel
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product`'.Context::getContext()->shop->sqlLang('pl').') LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product`'.Context::getContext()->shop->sqlLang('pl').')
LEFT JOIN `'._DB_PREFIX_.'lang` l ON (pl.`id_lang` = l.`id_lang`) LEFT JOIN `'._DB_PREFIX_.'lang` l ON (pl.`id_lang` = l.`id_lang`)
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (cl.`id_category` = p.`id_category_default` AND cl.`id_lang` = pl.`id_lang`'.Context::getContext()->shop->sqlLang('cl').') LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (cl.`id_category` = p.`id_category_default` AND cl.`id_lang` = pl.`id_lang`'.Context::getContext()->shop->sqlLang('cl').')
WHERE p.`id_product` = '.(int)$id_product. ' WHERE p.`id_product` = '.(int)$id_product.'
AND l.`active` = 1 AND l.`active` = 1
'); ');
} }
@@ -3321,9 +3327,9 @@ class ProductCore extends ObjectModel
/** /**
* @return the total taxes rate applied to the product * @return the total taxes rate applied to the product
*/ */
public function getTaxesRate(Address $address = NULL) public function getTaxesRate(Address $address = null)
{ {
if (!$address OR !$address->id_country) if (!$address || !$address->id_country)
$address = Address::initialize(); $address = Address::initialize();
$tax_manager = TaxManagerFactory::getManager($address, $this->id_tax_rules_group); $tax_manager = TaxManagerFactory::getManager($address, $this->id_tax_rules_group);