diff --git a/admin-dev/tabs/AdminProducts.php b/admin-dev/tabs/AdminProducts.php
index f15f0ec91..daff09871 100644
--- a/admin-dev/tabs/AdminProducts.php
+++ b/admin-dev/tabs/AdminProducts.php
@@ -149,7 +149,7 @@ class AdminProducts extends AdminTab
public function deleteVirtualProduct()
{
- if (!($id_product_download = ProductDownload::getIdFromIdProduct(intval(Tools::getValue('id_product')))))
+ if (!($id_product_download = ProductDownload::getIdFromIdProduct((int)Tools::getValue('id_product'))))
return false;
$productDownload = new ProductDownload((int)($id_product_download));
return $productDownload->deleteFile();
@@ -157,7 +157,7 @@ class AdminProducts extends AdminTab
public function deleteVirtualProductAttribute()
{
- if (!($id_product_download = ProductDownload::getIdFromIdAttibute((int) Tools::getValue('id_product_attribute'))))
+ if (!($id_product_download = ProductDownload::getIdFromIdAttribute((int)Tools::getValue('id_product'), (int) Tools::getValue('id_product_attribute'))))
return false;
$productDownload = new ProductDownload((int)($id_product_download));
return $productDownload->deleteFile();
@@ -585,7 +585,7 @@ class AdminProducts extends AdminTab
{
$product->deleteAttributeCombinaison(Tools::getValue('id_product_attribute'));
- $id_product_download = ProductDownload::getIdFromIdAttibute((int) Tools::getValue('id_product_attribute'));
+ $id_product_download = ProductDownload::getIdFromIdAttribute((int) $id_product, (int) Tools::getValue('id_product_attribute'));
if ($id_product_download)
{
$productDownload = new ProductDownload((int) $id_product_download);
@@ -1260,30 +1260,12 @@ class AdminProducts extends AdminTab
*/
public function updateDownloadProduct($product, $edit = 0, $id_product_attribute = null)
{
- $filename = '';
- $is_virtual_file = 0;
- $id_product_download = 0;
-
- $is_shareable = 0;
- $virtual_product_name = '';
- $virtual_product_nb_days = 0;
- $virtual_product_filename = '';
- $virtual_product_nb_downloable = 0;
- $virtual_product_expiration_date = '';
-
- $is_shareable_attribute = 0;
- $virtual_product_name_attribute = '';
- $virtual_product_nb_days_attribute = 0;
- $virtual_product_filename_attribute = '';
- $virtual_product_nb_downloable_attribute = 0;
- $virtual_product_expiration_date_attribute = '';
-
$is_virtual_file = (int) Tools::getValue('is_virtual_file');
/* add or update a virtual product */
if (Tools::getValue('is_virtual_good') == 'true')
{
- if (!Tools::getValue('virtual_product_id') && !Tools::getValue('virtual_product_name_attribute') && !empty($is_virtual_file))
+ if (!Tools::getValue('virtual_product_name') && !Tools::getValue('virtual_product_name_attribute') && !empty($is_virtual_file))
{
if (!Tools::getValue('virtual_product_name'))
{
@@ -1302,22 +1284,26 @@ class AdminProducts extends AdminTab
if (Tools::getValue('virtual_product_nb_days') === false && Tools::getValue('virtual_product_nb_days_attribute') === false && !empty($is_virtual_file))
{
- if (!Tools::getValue('virtual_product_name'))
+ if (!Tools::getValue('virtual_product_nb_days'))
{
- if (!Tools::getValue('virtual_product_name_attribute'))
+ if (!Tools::getValue('virtual_product_nb_days_attribute'))
{
- $this->_errors[] = $this->l('the field').' '.$this->l('number of days attribute').' '.$this->l('is required');
- return false;
+ if (!empty($edit) && !empty($id_product_attribute))
+ {
+ $this->_errors[] = $this->l('the field').' '.$this->l('number of days attribute').' '.$this->l('is required');
+ return false;
+ }
}
- else
+ else if (!empty($id_product_attribute))
{
$this->_errors[] = $this->l('the field').' '.$this->l('number of days').' '.$this->l('is required');
return false;
}
}
- }
- if (Tools::getValue('virtual_product_expiration_date') AND !Validate::isDate(Tools::getValue('virtual_product_expiration_date') && !empty($is_virtual_file))
- && Tools::getValue('virtual_product_expiration_date_attribute') AND !Validate::isDate(Tools::getValue('virtual_product_expiration_date_attribute')))
+ }
+
+ if (Tools::getValue('virtual_product_expiration_date') && !Validate::isDate(Tools::getValue('virtual_product_expiration_date') && !empty($is_virtual_file))
+ && Tools::getValue('virtual_product_expiration_date_attribute') && !Validate::isDate(Tools::getValue('virtual_product_expiration_date_attribute')))
{
if (!Tools::getValue('virtual_product_expiration_date'))
{
@@ -1326,7 +1312,7 @@ class AdminProducts extends AdminTab
$this->_errors[] = $this->l('the field').' '.$this->l('expiration date attribute').' '.$this->l('is required');
return false;
}
- else
+ else if (!empty($id_product_attribute))
{
$this->_errors[] = $this->l('the field').' '.$this->l('expiration date').' '.$this->l('is not valid');
return false;
@@ -1344,7 +1330,7 @@ class AdminProducts extends AdminTab
// Trick's
if ($edit == 1)
{
- $id_product_download_attibute = ProductDownload::getIdFromIdAttibute($id_product_attribute);
+ $id_product_download_attibute = ProductDownload::getIdFromIdAttribute((int) $product->id, $id_product_attribute);
$id_product_download = ($id_product_download_attibute) ? (int) $id_product_download_attibute : (int) Tools::getValue('virtual_product_id');
}
@@ -1404,7 +1390,7 @@ class AdminProducts extends AdminTab
/* unactive download product if checkbox not checked */
if ($edit == 1)
{
- $id_product_download_attibute = ProductDownload::getIdFromIdAttibute($id_product_attribute);
+ $id_product_download_attibute = ProductDownload::getIdFromIdAttribute((int) $product->id, $id_product_attribute);
$id_product_download = ($id_product_download_attibute) ? (int) $id_product_download_attibute : (int) Tools::getValue('virtual_product_id');
}
else
@@ -2302,15 +2288,21 @@ class AdminProducts extends AdminTab
//]]>
id OR Tools::getValue('is_virtual_good')=='true') AND $productDownload->active)
- $check = 'checked="checked"';
-
+
if(!$productDownload->id OR !$productDownload->active)
$hidden = 'style="display:none;"';
- $cache_default_attribute = $this->getFieldValue($obj, 'cache_default_attribute');
-
+ $cache_default_attribute = (int) $this->getFieldValue($obj, 'cache_default_attribute');
+ $is_virtual = (int) $this->getFieldValue($obj, 'is_virtual');
+
+ if($is_virtual && $productDownload->active)
+ $check = 'checked="checked"';
+
+ if($is_virtual)
+ $virtual = 1;
+ else
+ $virtual = 0;
+
echo '
1. '.$this->l('Info.').'
@@ -2625,8 +2617,8 @@ class AdminProducts extends AdminTab
var newLabel = \''.$this->l('New label').'\';
var choose_language = \''.$this->l('Choose language:').'\';
var required = \''.$this->l('required').'\';
- var customizationUploadableFileNumber = '.(int)($this->getFieldValue($obj, 'uploadable_files')).';
- var customizationTextFieldNumber = '.(int)($this->getFieldValue($obj, 'text_fields')).';
+ var customizationUploadableFileNumber = '.(int) $this->getFieldValue($obj, 'uploadable_files').';
+ var customizationTextFieldNumber = '.(int) $this->getFieldValue($obj, 'text_fields').';
var uploadableFileLabel = 0;
var textFieldLabel = 0;
@@ -2636,28 +2628,21 @@ class AdminProducts extends AdminTab
-
+
'.$this->l('Does this product has an associated file ?').'
';
-
- $exists_file = realpath(_PS_DOWNLOAD_DIR_).'/'.$productDownload->filename;
- if ($productDownload->id && file_exists($exists_file) || !empty($productDownload->display_filename))
- {
+ // todo gérer le is_virtual avec la valeur du produit
+ $exists_file = realpath(_PS_DOWNLOAD_DIR_).'/'.$productDownload->filename;
+
+ if ($productDownload->id && !empty($cache_default_attribute) && !empty($productDownload->display_filename))
+ {
$check_yes = 'checked="checked"';
$check_no = '';
}
else
{
- if ($productDownload->id && !empty($cache_default_attribute))
- {
- $check_yes = 'checked="checked"';
- $check_no = '';
- }
- else
- {
- $check_yes = '';
- $check_no = 'checked="checked"';
- }
+ $check_yes = '';
+ $check_no = 'checked="checked"';
}
echo ''. $this->l('Yes').'
@@ -2814,6 +2799,17 @@ class AdminProducts extends AdminTab
$("#virtual_good_attributes").hide();
$("#is_virtual_file_product").hide();
}
+ });
+
+ $("input[name=is_virtual_good]").live("change", function() {
+ if($(this).attr("checked"))
+ {
+ $("#is_virtual").val(1);
+ }
+ else
+ {
+ $("#is_virtual").val(0);
+ }
});
});
@@ -3712,7 +3708,7 @@ class AdminProducts extends AdminTab
$productDownload = new ProductDownload();
$id_product_download = (int) $productDownload->getIdFromIdProduct($this->getFieldValue($obj, 'id'));
if (!empty($id_product_download))
- $productDownload = new ProductDownload($id_product_download);
+ $productDownload = new ProductDownload($id_product_download);
$images = Image::getImages($this->context->language->id, $obj->id);
if ($obj->id)
@@ -3999,7 +3995,8 @@ class AdminProducts extends AdminTab
'.$this->l('UPC').' |
'.$this->l('Quantity').' | ';
- if ($id_product_download && !empty($productDownload->filename))
+
+ if ($id_product_download && !empty($productDownload->display_filename))
{
echo '
@@ -4061,7 +4058,7 @@ class AdminProducts extends AdminTab
$attrImage = $product_attribute['id_image'] ? new Image($product_attribute['id_image']) : false;
$available_date = ($product_attribute['available_date'] != 0) ? date('Y-m-d', strtotime($product_attribute['available_date'])) : '0000-00-00';
- $id_product_download = $productDownload->getIdFromIdAttibute((int) $id_product_attribute);
+ $id_product_download = $productDownload->getIdFromIdAttribute((int) $obj->id, (int) $id_product_attribute);
if ($id_product_download)
$productDownload = new ProductDownload($id_product_download);
diff --git a/classes/Cart.php b/classes/Cart.php
index 2bc9293cb..86170e6e5 100644
--- a/classes/Cart.php
+++ b/classes/Cart.php
@@ -371,7 +371,7 @@ class CartCore extends ObjectModel
$sql = new DbQuery();
// Build SELECT
- $sql->select('cp.`id_product_attribute`, cp.`id_product`, cp.`quantity` AS cart_quantity, cp.id_shop, pl.`name`,
+ $sql->select('cp.`id_product_attribute`, cp.`id_product`, cp.`quantity` AS cart_quantity, cp.id_shop, pl.`name`, p.`is_virtual`,
pl.`description_short`, pl.`available_now`, pl.`available_later`, p.`id_product`, p.`id_category_default`, p.`id_supplier`, p.`id_manufacturer`,
p.`on_sale`, p.`ecotax`, p.`additional_shipping_cost`, p.`available_for_order`, p.`price`, p.`weight`, p.`width`, p.`height`, p.`depth`, p.`out_of_stock`,
p.`active`, p.`date_add`, p.`date_upd`, t.`id_tax`, tl.`name` AS tax, t.`rate`, stock.quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category,
@@ -428,6 +428,7 @@ class CartCore extends ObjectModel
else
$sql->select('p.`reference` AS reference, p.`supplier_reference` AS supplier_reference, p.`ean13`, p.`upc` AS upc, p.`minimal_quantity` AS minimal_quantity');
+
$result = Db::getInstance()->ExecuteS($sql);
// Reset the cache before the following return, or else an empty cart will add dozens of queries
@@ -1528,9 +1529,8 @@ class CartCore extends ObjectModel
* @return boolean true if is a virtual cart or false
*
*/
- public function isVirtualCart()
+ public function isVirtualCart($strict = false)
{
- $prod = array();
if (!ProductDownload::isFeatureActive())
return false;
@@ -1539,33 +1539,19 @@ class CartCore extends ObjectModel
$products = $this->getProducts();
if (!sizeof($products))
return false;
-
+
+ $is_virtual = 1;
foreach ($products AS $product)
{
- $prod[] = (int) $product['id_product'];
+ if (empty($product['is_virtual']))
+ $is_virtual = 0;
}
-
- $unique_product = array_unique($prod);
-
- $list = '';
- foreach ($unique_product AS $product)
- {
- $list .= (int)($product).',';
- }
- $list = rtrim($list, ',');
-
- $n = (int)Db::getInstance()->getValue('
- SELECT COUNT(`id_product_download`) n
- FROM `'._DB_PREFIX_.'product_download`
- WHERE `id_product` IN ('.pSQL($list).')
- AND `active` = 1');
-
- self::$_isVirtualCart[$this->id] = ($n == sizeof($products));
+ self::$_isVirtualCart[$this->id] = (int) $is_virtual;
}
return self::$_isVirtualCart[$this->id];
}
-
+
public static function getCartByOrderId($id_order)
{
if ($id_cart = self::getCartIdByOrderId($id_order))
diff --git a/classes/OrderHistory.php b/classes/OrderHistory.php
index b8ac7359b..2f3b8bbaf 100644
--- a/classes/OrderHistory.php
+++ b/classes/OrderHistory.php
@@ -161,7 +161,7 @@ class OrderHistoryCore extends ObjectModel
$assign = array();
foreach ($virtualProducts AS $key => $virtualProduct)
{
- $id_product_download = ProductDownload::getIdFromIdAttibute($virtualProduct['product_id'], $virtualProduct['product_attribute_id']);
+ $id_product_download = ProductDownload::getIdFromIdAttribute($virtualProduct['product_id'], $virtualProduct['product_attribute_id']);
$product_download = new ProductDownload($id_product_download);
// If this virtual item has an associated file, we'll provide the link to download the file in the email
if ($product_download->display_filename != '')
diff --git a/classes/Product.php b/classes/Product.php
index d576d3f22..e4234a757 100644
--- a/classes/Product.php
+++ b/classes/Product.php
@@ -196,7 +196,8 @@ class ProductCore extends ObjectModel
protected $langMultiShop = true;
public $cache_is_pack;
- public $cache_has_attachments;
+ public $cache_has_attachments;
+ public $is_virtual;
public $cache_default_attribute;
public static $_taxCalculationMethod = PS_TAX_EXC;
@@ -252,6 +253,7 @@ class ProductCore extends ObjectModel
'upc' => 'isUpc',
'indexed' => 'isBool',
'cache_is_pack' => 'isBool',
+ 'is_virtual' => 'isBool',
'cache_has_attachments' => 'isBool'
);
protected $fieldsRequiredLang = array('link_rewrite', 'name');
@@ -381,6 +383,7 @@ class ProductCore extends ObjectModel
$fields['indexed'] = 0; // Reset indexation every times
$fields['cache_is_pack'] = (int)($this->cache_is_pack);
$fields['cache_has_attachments'] = (int)($this->cache_has_attachments);
+ $fields['is_virtual'] = (int)($this->is_virtual);
$fields['cache_default_attribute'] = (int)($this->cache_default_attribute);
$fields['date_add'] = pSQL($this->date_add);
$fields['date_upd'] = pSQL($this->date_upd);
@@ -2867,6 +2870,7 @@ class ProductCore extends ObjectModel
$row['id_image'] = Product::defineProductImage($row, $id_lang);
$row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']);
$row['attachments'] = ((!isset($row['cache_has_attachments']) OR $row['cache_has_attachments']) ? Product::getAttachmentsStatic((int)($id_lang), $row['id_product']) : array());
+ $row['virtual'] = ((!isset($row['is_virtual']) OR $row['is_virtual']) ? 1 : 0);
// Pack management
$row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']);
diff --git a/classes/ProductDownload.php b/classes/ProductDownload.php
index f95da7a2b..13cee5f96 100644
--- a/classes/ProductDownload.php
+++ b/classes/ProductDownload.php
@@ -198,7 +198,10 @@ class ProductDownloadCore extends ObjectModel
self::$_productIds[$id_product] = (int)Db::getInstance()->getValue('
SELECT `id_product_download`
FROM `'._DB_PREFIX_.'product_download`
- WHERE `id_product` = '.(int)$id_product.' AND `active` = 1');
+ WHERE `id_product` = '.(int)$id_product.'
+ AND `active` = 1
+ ORDER BY `id_product_download` DESC');
+
return self::$_productIds[$id_product];
}
@@ -208,7 +211,7 @@ class ProductDownloadCore extends ObjectModel
* @param int $id_product Product the id
* @return integer Product the id for this virtual product
*/
- public static function getIdFromIdAttibute($id_product, $id_product_attribute)
+ public static function getIdFromIdAttribute($id_product, $id_product_attribute)
{
if (!self::isFeatureActive())
return false;
diff --git a/install-dev/sql/db.sql b/install-dev/sql/db.sql
index d1a2f6ae8..f06a5c38d 100644
--- a/install-dev/sql/db.sql
+++ b/install-dev/sql/db.sql
@@ -1214,6 +1214,7 @@ CREATE TABLE `PREFIX_product` (
`indexed` tinyint(1) NOT NULL default '0',
`cache_is_pack` tinyint(1) NOT NULL default '0',
`cache_has_attachments` tinyint(1) NOT NULL default '0',
+ `is_virtual` tinyint(1) NOT NULL default '0',
`cache_default_attribute` int(10) unsigned default NULL,
`date_add` datetime NOT NULL,
`date_upd` datetime NOT NULL,
diff --git a/install-dev/sql/upgrade/1.5.0.1.sql b/install-dev/sql/upgrade/1.5.0.1.sql
index 29b169fed..c07bf25bd 100644
--- a/install-dev/sql/upgrade/1.5.0.1.sql
+++ b/install-dev/sql/upgrade/1.5.0.1.sql
@@ -173,4 +173,6 @@ CREATE TABLE IF NOT EXISTS `PREFIX_request_sql` (
ALTER TABLE `PREFIX_carrier` ADD COLUMN `id_reference` int(10) NOT NULL AFTER `id_carrier`;
-UPDATE `PREFIX_carrier` SET id_reference = id_carrier;
\ No newline at end of file
+UPDATE `PREFIX_carrier` SET id_reference = id_carrier;
+
+ALTER TABLE `PREFIX_product` ADD `is_virtual` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `cache_has_attachments`
\ No newline at end of file