// #PSTEST-1229 - remove virtual combinations
This commit is contained in:
@@ -29,15 +29,9 @@
|
||||
var msg_combination_2 = '{l s='Please choose a value'}';
|
||||
var msg_combination_3 = '{l s='You can only add one combination per type of attribute'}';
|
||||
var msg_new_combination = '{l s='New combination'}';
|
||||
|
||||
$(document).ready(function(){
|
||||
{if $product->is_virtual}
|
||||
$('#virtual_good_attributes').show();
|
||||
{/if}
|
||||
});
|
||||
</script>
|
||||
|
||||
{if isset($product->id)}
|
||||
{if isset($product->id) && !$product->is_virtual}
|
||||
<input type="hidden" name="submitted_tabs[]" value="Combinations" />
|
||||
<script type="text/javascript">
|
||||
var attrs = new Array();
|
||||
@@ -121,62 +115,6 @@
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellpadding="5" id="virtual_good_attributes" style="width:100%;display:none;">
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<div style="padding:5px;width:50%;float:left;margin-right:20px;border-right:1px solid #E0D0B1">
|
||||
<h3>{l s='Virtual product'}</h3>
|
||||
<p>{l s='Your server\'s maximum upload file size is'}: {$upload_max_filesize}</p>
|
||||
<label id="virtual_product_file_attribute_label" for="virtual_product_file_attribute" class="t">{l s='Upload a file'}</label>
|
||||
<p><input id="virtual_product_file_attribute" name="virtual_product_file_attribute" onchange="uploadFile2();" maxlength="'.$this->maxFileSize.'" type="file"></p>
|
||||
<div id="upload-confirmation2">
|
||||
|
||||
<p id="gethtmlink" style="display: none;">{l s='This is the link'} : {$product->productDownload->getHtmlLink(false, true)}
|
||||
<a id="make_downloadable_product_attribute" onclick="return confirm('{l s='Delete this file' js=1}')" href="index.php?tab=AdminProducts&id_product={$product->productDownload->id_product}&id_category={$id_category}&token={$token}&deleteVirtualProductAttribute=true" class="red">{l s='Delete this file'}</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
<a id="delete_downloadable_product_attribute" style="display:none;" onclick="return confirm('{l s='Delete this file' js=1}')" href="index.php?tab=AdminProducts&id_product={$product->id}&id_category={$id_category}&token={$token}&deleteVirtualProductAttribute=true" class="red">{l s='Delete this file'}</a>
|
||||
{if $up_filename}
|
||||
<input type="hidden" id="virtual_product_filename_attribute" name="virtual_product_filename_attribute" value="{$up_filename}" />
|
||||
{/if}
|
||||
|
||||
<p class="block">
|
||||
<label for="virtual_product_name_attribute" class="t">{l s='Filename'}</label>
|
||||
<input id="virtual_product_name_attribute" name="virtual_product_name_attribute" style="width:200px" value="" type="text">
|
||||
<span class="hint" name="help_box" style="display:none;">{l s='The full filename with its extension (e.g. Book.pdf)'}</span>
|
||||
</p>
|
||||
</div>
|
||||
<div id="virtual_good_more_attribute" style="padding:5px;width:40%;float:left;margin-left:10px">
|
||||
<p class="block">
|
||||
<label for="virtual_product_nb_downloable" class="t">{l s='Number of downloads'}</label>
|
||||
<input type="text" id="virtual_product_nb_downloable_attribute" name="virtual_product_nb_downloable_attribute" value="" class="" size="6" />
|
||||
<span class="hint" name="help_box" style="display:none">{l s='Number of authorized downloads per customer'}</span>
|
||||
</p>
|
||||
<p class="block">
|
||||
<label for="virtual_product_expiration_date_attribute" class="t">{l s='Expiration date'}</label>
|
||||
<input class="datepicker" type="text" id="virtual_product_expiration_date_attribute" name="virtual_product_expiration_date_attribute" value="" size="11" maxlength="10" autocomplete="off" /> {l s='Format: YYYY-MM-DD'}
|
||||
<span class="hint" name="help_box" style="display:none">{l s='Leave this blank for no expiration date'}</span>
|
||||
</p>
|
||||
<p class="block">
|
||||
<label for="virtual_product_nb_days" class="t">{l s='Number of days'}</label>
|
||||
<input type="text" id="virtual_product_nb_days_attribute" name="virtual_product_nb_days_attribute" value="" class="" size="4" /><sup> *</sup>
|
||||
<span class="hint" name="help_box" style="display:none">{l s='How many days this file can be accessed by customers'} - <em>({l s='Set to zero for unlimited access'} ) </em></span>
|
||||
</p>
|
||||
<p class="block">
|
||||
<label for="virtual_product_is_shareable_attribute" class="t">{l s='is shareable'}</label>
|
||||
<input type="checkbox" id="virtual_product_is_shareable_attribute" name="virtual_product_is_shareable" value="1" />
|
||||
<span class="hint" name="help_box" style="display:none">{l s='Specify if the file can be shared'}</span>
|
||||
</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<div class="separation"></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table>
|
||||
<tr>
|
||||
<td style="width:150px;vertical-align:top;text-align:right;padding-right:10px;font-weight:bold;">
|
||||
|
||||
@@ -30,9 +30,6 @@ class ProductDownloadCore extends ObjectModel
|
||||
/** @var integer Product id which download belongs */
|
||||
public $id_product;
|
||||
|
||||
/** @var integer Attribute Product id which download belongs */
|
||||
public $id_product_attribute;
|
||||
|
||||
/** @var string DisplayFilename the name which appear */
|
||||
public $display_filename;
|
||||
|
||||
@@ -67,7 +64,6 @@ class ProductDownloadCore extends ObjectModel
|
||||
'primary' => 'id_product_download',
|
||||
'fields' => array(
|
||||
'id_product' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
|
||||
'id_product_attribute' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
|
||||
'display_filename' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 255),
|
||||
'filename' => array('type' => self::TYPE_STRING, 'validate' => 'isSha1', 'size' => 255),
|
||||
'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
|
||||
@@ -192,64 +188,6 @@ class ProductDownloadCore extends ObjectModel
|
||||
return self::$_productIds[$id_product];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the id_product_download from an id_product
|
||||
* @since 1.5.0.1
|
||||
* @param int $id_product Product the id
|
||||
* @return integer Product the id for this virtual product
|
||||
*/
|
||||
public static function getIdFromIdAttribute($id_product, $id_product_attribute)
|
||||
{
|
||||
if (!ProductDownload::isFeatureActive())
|
||||
return false;
|
||||
|
||||
if (array_key_exists($id_product_attribute, self::$_productIds))
|
||||
return self::$_productIds[$id_product];
|
||||
|
||||
self::$_productIds[$id_product_attribute] = (int)Db::getInstance()->getValue('
|
||||
SELECT `id_product_download`
|
||||
FROM `'._DB_PREFIX_.'product_download`
|
||||
WHERE `id_product` = '.(int)$id_product.'
|
||||
AND `id_product_attribute` = '.(int)$id_product_attribute.'
|
||||
AND `active` = 1'
|
||||
);
|
||||
return self::$_productIds[$id_product_attribute];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the display filename from a physical filename
|
||||
*
|
||||
* @since 1.5.0.1
|
||||
*
|
||||
* @param string $filename Filename physically
|
||||
* @return integer Product the id for this virtual product
|
||||
*
|
||||
*/
|
||||
public static function getAttributeFromIdProduct($id_product)
|
||||
{
|
||||
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
|
||||
SELECT `id_product_download`
|
||||
FROM `'._DB_PREFIX_.'product_download`
|
||||
WHERE `id_product` = '.(int)$id_product.' AND `active` = 1');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the result from an id_product_attribute
|
||||
*
|
||||
* @param int $id_product Product the id
|
||||
* @param int $id_product_attribute Attribute the id
|
||||
* @return array result for this virtual product
|
||||
*/
|
||||
public static function getAttributeFromIdAttribute($id_product, $id_product_attribute)
|
||||
{
|
||||
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
|
||||
SELECT *
|
||||
FROM `'._DB_PREFIX_.'product_download`
|
||||
WHERE `id_product` = '.(int)$id_product.'
|
||||
AND `id_product_attribute` = '.(int)$id_product_attribute.'
|
||||
AND `active` = 1');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the display filename from a physical filename
|
||||
*
|
||||
@@ -283,24 +221,6 @@ class ProductDownloadCore extends ObjectModel
|
||||
');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the filename from an id_product_attribute
|
||||
*
|
||||
* @param int $id_product Product the id
|
||||
* @param int $id_product_attribute Attribute the id
|
||||
* @return string Filename the filename for this virtual product
|
||||
*/
|
||||
public static function getFilenameFromIdAttribute($id_product, $id_product_attribute)
|
||||
{
|
||||
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
|
||||
SELECT `filename`
|
||||
FROM `'._DB_PREFIX_.'product_download`
|
||||
WHERE `id_product` = '.(int)$id_product.'
|
||||
AND `id_product_attribute` = '.(int)$id_product_attribute.'
|
||||
AND `active` = 1
|
||||
');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the display filename from a physical filename
|
||||
*
|
||||
|
||||
@@ -568,10 +568,7 @@ class OrderCore extends ObjectModel
|
||||
// Add information for virtual product
|
||||
if ($row['download_hash'] && !empty($row['download_hash']))
|
||||
{
|
||||
if ($row['product_attribute_id'] && !empty($row['product_attribute_id']))
|
||||
$row['filename'] = ProductDownload::getFilenameFromIdAttribute((int)$row['product_id'], (int)$row['product_attribute_id']);
|
||||
else
|
||||
$row['filename'] = ProductDownload::getFilenameFromIdProduct((int)$row['product_id']);
|
||||
$row['filename'] = ProductDownload::getFilenameFromIdProduct((int)$row['product_id']);
|
||||
// Get the display filename
|
||||
$row['display_filename'] = ProductDownload::getFilenameFromFilename($row['filename']);
|
||||
}
|
||||
|
||||
@@ -321,7 +321,7 @@ class OrderHistoryCore extends ObjectModel
|
||||
$assign = array();
|
||||
foreach ($virtual_products as $key => $virtual_product)
|
||||
{
|
||||
$id_product_download = ProductDownload::getIdFromIdAttribute($virtual_product['product_id'], $virtual_product['product_attribute_id']);
|
||||
$id_product_download = ProductDownload::getIdFromIdProduct($virtual_product['product_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 != '')
|
||||
|
||||
@@ -150,10 +150,7 @@ class OrderInvoiceCore extends ObjectModel
|
||||
// Add information for virtual product
|
||||
if ($row['download_hash'] && !empty($row['download_hash']))
|
||||
{
|
||||
if ($row['product_attribute_id'] && !empty($row['product_attribute_id']))
|
||||
$row['filename'] = ProductDownload::getFilenameFromIdAttribute((int)$row['product_id'], (int)$row['product_attribute_id']);
|
||||
else
|
||||
$row['filename'] = ProductDownload::getFilenameFromIdProduct((int)$row['product_id']);
|
||||
$row['filename'] = ProductDownload::getFilenameFromIdProduct((int)$row['product_id']);
|
||||
// Get the display filename
|
||||
$row['display_filename'] = ProductDownload::getFilenameFromFilename($row['filename']);
|
||||
}
|
||||
|
||||
@@ -300,7 +300,7 @@ class AdminProductsControllerCore extends AdminController
|
||||
|
||||
public function ajaxProcessDeleteVirtualProduct()
|
||||
{
|
||||
if (!($id_product_download = ProductDownload::getIdFromIdAttribute((int)Tools::getValue('id_product'), 0)))
|
||||
if (!($id_product_download = ProductDownload::getIdFromIdProduct((int)Tools::getValue('id_product'))))
|
||||
$this->jsonError($this->l('Cannot retrieve file'));
|
||||
else
|
||||
{
|
||||
@@ -312,14 +312,6 @@ class AdminProductsControllerCore extends AdminController
|
||||
}
|
||||
}
|
||||
|
||||
public function processDeleteVirtualProductAttribute()
|
||||
{
|
||||
if (!($id_product_download = ProductDownload::getIdFromIdAttribute((int)Tools::getValue('id_product'), (int)Tools::getValue('id_product_attribute'))))
|
||||
return false;
|
||||
$product_download = new ProductDownload((int)$id_product_download);
|
||||
return $product_download->deleteFile((int)$id_product_download);
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload new attachment
|
||||
*
|
||||
@@ -580,8 +572,6 @@ class AdminProductsControllerCore extends AdminController
|
||||
if (!Combination::isFeatureActive() || !Tools::getIsset('attribute'))
|
||||
return;
|
||||
|
||||
$is_virtual = (int)Tools::getValue('is_virtual');
|
||||
|
||||
if (Validate::isLoadedObject($product = $this->object))
|
||||
{
|
||||
if ($this->isProductFieldUpdated('attribute_price') && (!Tools::getIsset('attribute_price') || Tools::getIsset('attribute_price') == null))
|
||||
@@ -627,7 +617,6 @@ class AdminProductsControllerCore extends AdminController
|
||||
false);
|
||||
|
||||
Hook::exec('actionProductAttributeUpdate', array('id_product_attribute' => (int)$id_product_attribute));
|
||||
$this->updateDownloadProduct($product, 1, $id_product_attribute);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -657,7 +646,6 @@ class AdminProductsControllerCore extends AdminController
|
||||
Tools::getValue('attribute_upc'),
|
||||
Tools::getValue('attribute_minimal_quantity')
|
||||
);
|
||||
$this->updateDownloadProduct($product, 0, $id_product_attribute);
|
||||
}
|
||||
else
|
||||
$this->errors[] = Tools::displayError('You do not have permission to').'<hr>'.Tools::displayError('Edit here.');
|
||||
@@ -672,9 +660,6 @@ class AdminProductsControllerCore extends AdminController
|
||||
{
|
||||
if (!$product->cache_default_attribute)
|
||||
Product::updateDefaultAttribute($product->id);
|
||||
|
||||
if (!empty($is_virtual))
|
||||
Product::updateIsVirtual($product->id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -926,13 +911,6 @@ class AdminProductsControllerCore extends AdminController
|
||||
else
|
||||
$this->errors[] = Tools::displayError('You do not have permission to delete here.');
|
||||
}
|
||||
elseif (Tools::getValue('deleteVirtualProductAttribute'))/* Delete a product in the download folder */
|
||||
{
|
||||
if ($this->tabAccess['delete'] === '1')
|
||||
$this->action = 'deleteVirtualProductAttribute';
|
||||
else
|
||||
$this->errors[] = Tools::displayError('You do not have permission to delete here.');
|
||||
}
|
||||
// Product preview
|
||||
elseif (Tools::isSubmit('submitAddProductAndPreview'))
|
||||
{
|
||||
@@ -1137,14 +1115,6 @@ class AdminProductsControllerCore extends AdminController
|
||||
if ($id_product && Validate::isUnsignedId($id_product) && Validate::isLoadedObject($product = new Product($id_product)))
|
||||
{
|
||||
$product->deleteAttributeCombination((int)$id_product_attribute);
|
||||
|
||||
$id_product_download = (int)ProductDownload::getIdFromIdAttribute($id_product, $id_product_attribute);
|
||||
if ($id_product_download)
|
||||
{
|
||||
$product_download = new ProductDownload((int)$id_product_download);
|
||||
$this->deleteDownloadProduct((int)$id_product_download);
|
||||
$product_download->deleteFile();
|
||||
}
|
||||
$product->checkDefaultAttributes();
|
||||
if (!$product->hasAttributes())
|
||||
{
|
||||
@@ -1209,21 +1179,9 @@ class AdminProductsControllerCore extends AdminController
|
||||
if ($id_product && Validate::isUnsignedId($id_product) && Validate::isLoadedObject($product = new Product((int)$id_product)))
|
||||
{
|
||||
$combinations = $product->getAttributeCombinationsById($id_product_attribute, $this->context->language->id);
|
||||
$product_download = ProductDownload::getAttributeFromIdAttribute($id_product, $id_product_attribute);
|
||||
foreach ($combinations as $key => $combination)
|
||||
{
|
||||
$combinations[$key]['attributes'][] = array($combination['group_name'], $combination['attribute_name'], $combination['id_attribute']);
|
||||
|
||||
// Added fields virtual product
|
||||
$combinations[$key]['id_product_download'] = count($product_download) ? $product_download[0]['id_product_download'] : '';
|
||||
$combinations[$key]['display_filename'] = count($product_download) ? $product_download[0]['display_filename'] : '';
|
||||
$combinations[$key]['filename'] = count($product_download) ? $product_download[0]['filename'] : '';
|
||||
$combinations[$key]['date_expiration'] = count($product_download) ? $product_download[0]['date_expiration'] : '0000-00-00';
|
||||
$combinations[$key]['nb_days_accessible'] = count($product_download) ? $product_download[0]['nb_days_accessible'] : 0;
|
||||
$combinations[$key]['nb_downloadable'] = count($product_download) ? $product_download[0]['nb_downloadable'] : 0;
|
||||
$combinations[$key]['is_shareable'] = count($product_download) ? $product_download[0]['is_shareable'] : 0;
|
||||
}
|
||||
|
||||
die(Tools::jsonEncode($combinations));
|
||||
}
|
||||
}
|
||||
@@ -1778,74 +1736,28 @@ class AdminProductsControllerCore extends AdminController
|
||||
* @param object $product Product
|
||||
* @return bool
|
||||
*/
|
||||
public function updateDownloadProduct($product, $edit = 0, $id_product_attribute = null)
|
||||
public function updateDownloadProduct($product, $edit = 0)
|
||||
{
|
||||
$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_name') && !Tools::getValue('virtual_product_name_attribute') && !empty($is_virtual_file))
|
||||
{
|
||||
if (!Tools::getValue('virtual_product_name'))
|
||||
{
|
||||
if (!Tools::getValue('virtual_product_name_attribute') && !empty($id_product_attribute))
|
||||
{
|
||||
$this->errors[] = $this->l('this field').' <b>'.$this->l('display filename attribute').'</b> '.$this->l('is required');
|
||||
return false;
|
||||
}
|
||||
elseif (!empty($id_product_attribute))
|
||||
{
|
||||
$this->errors[] = $this->l('this field').' <b>'.$this->l('display filename').'</b> '.$this->l('is required');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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_nb_days'))
|
||||
{
|
||||
if (!Tools::getValue('virtual_product_nb_days_attribute'))
|
||||
{
|
||||
if (!empty($edit) && !empty($id_product_attribute))
|
||||
{
|
||||
$this->errors[] = $this->l('this field').' <b>'.$this->l('number of days attribute').'</b> '.$this->l('is required');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
elseif (!empty($id_product_attribute))
|
||||
{
|
||||
$this->errors[] = $this->l('this field').' <b>'.$this->l('number of days').'</b> '.$this->l('is required');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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') && !Validate::isDate(Tools::getValue('virtual_product_expiration_date') && !empty($is_virtual_file)))
|
||||
{
|
||||
if (!Tools::getValue('virtual_product_expiration_date'))
|
||||
{
|
||||
if (!Tools::getValue('virtual_product_expiration_date_attribute'))
|
||||
{
|
||||
$this->errors[] = $this->l('this field').' <b>'.$this->l('expiration date attribute').'</b> '.$this->l('is required');
|
||||
return false;
|
||||
}
|
||||
elseif (!empty($id_product_attribute))
|
||||
{
|
||||
$this->errors[] = $this->l('this field').' <b>'.$this->l('expiration date').'</b> '.$this->l('is not valid');
|
||||
return false;
|
||||
}
|
||||
$this->errors[] = $this->l('this field').' <b>'.$this->l('expiration date attribute').'</b> '.$this->l('is required');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Trick's
|
||||
if ($edit == 1)
|
||||
{
|
||||
$id_product_download_attribute = ProductDownload::getIdFromIdAttribute((int)$product->id, $id_product_attribute);
|
||||
$id_product_download = $id_product_download_attribute ? (int)$id_product_download_attribute : (int)Tools::getValue('virtual_product_id');
|
||||
$id_product_download = (int)ProductDownload::getIdFromIdProduct((int)$product->id);
|
||||
if (!$id_product_download)
|
||||
$id_product_download = (int)Tools::getValue('virtual_product_id');
|
||||
}
|
||||
else
|
||||
$id_product_download = Tools::getValue('virtual_product_id');
|
||||
@@ -1857,38 +1769,13 @@ class AdminProductsControllerCore extends AdminController
|
||||
$virtual_product_nb_downloable = Tools::getValue('virtual_product_nb_downloable');
|
||||
$virtual_product_expiration_date = Tools::getValue('virtual_product_expiration_date');
|
||||
|
||||
$is_shareable_attribute = Tools::getValue('virtual_product_is_shareable_attribute');
|
||||
$virtual_product_name_attribute = Tools::getValue('virtual_product_name_attribute');
|
||||
$virtual_product_filename_attribute = Tools::getValue('virtual_product_filename_attribute');
|
||||
$virtual_product_nb_days_attribute = Tools::getValue('virtual_product_nb_days_attribute');
|
||||
$virtual_product_nb_downloable_attribute = Tools::getValue('virtual_product_nb_downloable_attribute');
|
||||
$virtual_product_expiration_date_attribute = Tools::getValue('virtual_product_expiration_date_attribute');
|
||||
|
||||
if (!empty($is_shareable_attribute))
|
||||
$is_shareable = $is_shareable_attribute;
|
||||
|
||||
if (!empty($virtual_product_name_attribute))
|
||||
$virtual_product_name = $virtual_product_name_attribute;
|
||||
|
||||
if (!empty($virtual_product_nb_days_attribute))
|
||||
$virtual_product_nb_days = $virtual_product_nb_days_attribute;
|
||||
|
||||
if (!empty($virtual_product_nb_downloable_attribute))
|
||||
$virtual_product_nb_downloable = $virtual_product_nb_downloable_attribute;
|
||||
|
||||
if (!empty($virtual_product_expiration_date_attribute))
|
||||
$virtual_product_expiration_date = $virtual_product_expiration_date_attribute;
|
||||
|
||||
if (!empty($virtual_product_filename_attribute))
|
||||
$filename = $virtual_product_filename_attribute;
|
||||
elseif ($virtual_product_filename)
|
||||
if ($virtual_product_filename)
|
||||
$filename = $virtual_product_filename;
|
||||
else
|
||||
$filename = ProductDownload::getNewFilename();
|
||||
|
||||
$download = new ProductDownload((int)$id_product_download);
|
||||
$download->id_product = (int)$product->id;
|
||||
$download->id_product_attribute = (int)$id_product_attribute;
|
||||
$download->display_filename = $virtual_product_name;
|
||||
$download->filename = $filename;
|
||||
$download->date_add = date('Y-m-d H:i:s');
|
||||
@@ -1906,8 +1793,9 @@ class AdminProductsControllerCore extends AdminController
|
||||
/* unactive download product if checkbox not checked */
|
||||
if ($edit == 1)
|
||||
{
|
||||
$id_product_download_attribute = ProductDownload::getIdFromIdAttribute((int)$product->id, (int)$id_product_attribute);
|
||||
$id_product_download = ($id_product_download_attribute) ? (int)$id_product_download_attribute : (int)Tools::getValue('virtual_product_id');
|
||||
$id_product_download = (int)ProductDownload::getIdFromIdProduct((int)$product->id);
|
||||
if (!$id_product_download)
|
||||
$id_product_download = (int)Tools::getValue('virtual_product_id');
|
||||
}
|
||||
else
|
||||
$id_product_download = ProductDownload::getIdFromIdProduct($product->id);
|
||||
@@ -1923,18 +1811,6 @@ class AdminProductsControllerCore extends AdminController
|
||||
return false;
|
||||
}
|
||||
|
||||
public function deleteDownloadProduct($id_product_attribute = null)
|
||||
{
|
||||
if (!empty($id_product_attribute))
|
||||
{
|
||||
$product_download = new ProductDownload((int)$id_product_attribute);
|
||||
$product_download->date_expiration = date('Y-m-d H:i:s', time() - 1);
|
||||
$product_download->active = 0;
|
||||
return $product_download->save();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update product accessories
|
||||
*
|
||||
@@ -2911,36 +2787,12 @@ class AdminProductsControllerCore extends AdminController
|
||||
$data->assign('download_product_file_missing', $msg);
|
||||
$data->assign('download_dir_writable', ProductDownload::checkWritableDir());
|
||||
|
||||
if (empty($product->cache_default_attribute))
|
||||
{
|
||||
// found in informations and combination : to merge
|
||||
$data->assign('up_filename', strval(Tools::getValue('virtual_product_filename')));
|
||||
$display_filename = ($product->productDownload->id > 0) ? $product->productDownload->display_filename : htmlentities(Tools::getValue('virtual_product_name'), ENT_COMPAT, 'UTF-8');
|
||||
$data->assign('up_filename', strval(Tools::getValue('virtual_product_filename')));
|
||||
|
||||
$product->productDownload->nb_downloadable = ($product->productDownload->id > 0) ? $product->productDownload->nb_downloadable : htmlentities(Tools::getValue('virtual_product_nb_downloable'), ENT_COMPAT, 'UTF-8');
|
||||
$product->productDownload->date_expiration = ($product->productDownload->id > 0) ? ((!empty($product->productDownload->date_expiration) && $product->productDownload->date_expiration != '0000-00-00 00:00:00') ? date('Y-m-d', strtotime($product->productDownload->date_expiration)) : '' ) : htmlentities(Tools::getValue('virtual_product_expiration_date'), ENT_COMPAT, 'UTF-8');
|
||||
$product->productDownload->nb_days_accessible = ($product->productDownload->id > 0) ? $product->productDownload->nb_days_accessible : htmlentities(Tools::getValue('virtual_product_nb_days'), ENT_COMPAT, 'UTF-8');
|
||||
$product->productDownload->is_shareable = $product->productDownload->id > 0 && $product->productDownload->is_shareable;
|
||||
}
|
||||
else
|
||||
{
|
||||
$error = '';
|
||||
$product_attribute = ProductDownload::getAttributeFromIdProduct($this->getFieldValue($product, 'id'));
|
||||
foreach ($product_attribute as $p)
|
||||
{
|
||||
$product_download_attribute = new ProductDownload($p['id_product_download']);
|
||||
$exists_file2 = realpath(_PS_DOWNLOAD_DIR_).'/'.$product_download_attribute->filename;
|
||||
if (!file_exists($exists_file2) && !empty($product_download_attribute->id_product_attribute))
|
||||
{
|
||||
$msg = sprintf(Tools::displayError('This file "%s" is missing'), $product_download_attribute->display_filename);
|
||||
$error .= '<p class="alert" id="file_missing">
|
||||
<b>'.$msg.' :<br/>
|
||||
'.realpath(_PS_DOWNLOAD_DIR_).'/'.$product_download_attribute->filename.'</b>
|
||||
</p>';
|
||||
}
|
||||
}
|
||||
$data->assign('error_product_download', $error);
|
||||
}
|
||||
$product->productDownload->nb_downloadable = ($product->productDownload->id > 0) ? $product->productDownload->nb_downloadable : htmlentities(Tools::getValue('virtual_product_nb_downloable'), ENT_COMPAT, 'UTF-8');
|
||||
$product->productDownload->date_expiration = ($product->productDownload->id > 0) ? ((!empty($product->productDownload->date_expiration) && $product->productDownload->date_expiration != '0000-00-00 00:00:00') ? date('Y-m-d', strtotime($product->productDownload->date_expiration)) : '' ) : htmlentities(Tools::getValue('virtual_product_expiration_date'), ENT_COMPAT, 'UTF-8');
|
||||
$product->productDownload->nb_days_accessible = ($product->productDownload->id > 0) ? $product->productDownload->nb_days_accessible : htmlentities(Tools::getValue('virtual_product_nb_days'), ENT_COMPAT, 'UTF-8');
|
||||
$product->productDownload->is_shareable = $product->productDownload->id > 0 && $product->productDownload->is_shareable;
|
||||
|
||||
$data->assign('ad', dirname($_SERVER['PHP_SELF']));
|
||||
$data->assign('product', $product);
|
||||
@@ -3429,57 +3281,57 @@ class AdminProductsControllerCore extends AdminController
|
||||
}
|
||||
|
||||
$data = $this->createTemplate($this->tpl_form);
|
||||
|
||||
if (Validate::isLoadedObject($product))
|
||||
{
|
||||
$attribute_js = array();
|
||||
$attributes = Attribute::getAttributes($this->context->language->id, true);
|
||||
foreach ($attributes as $k => $attribute)
|
||||
$attribute_js[$attribute['id_attribute_group']][$attribute['id_attribute']] = $attribute['name'];
|
||||
$currency = $this->context->currency;
|
||||
$data->assign('attributeJs', $attribute_js);
|
||||
$data->assign('attributes_groups', AttributeGroup::getAttributesGroups($this->context->language->id));
|
||||
$default_country = new Country((int)Configuration::get('PS_COUNTRY_DEFAULT'));
|
||||
|
||||
$product->productDownload = new ProductDownload();
|
||||
$id_product_download = (int)$product->productDownload->getIdFromIdProduct($this->getFieldValue($product, 'id'));
|
||||
if (!empty($id_product_download))
|
||||
$product->productDownload = new ProductDownload($id_product_download);
|
||||
|
||||
// $data->assign('productDownload', $product_download);
|
||||
$data->assign('currency', $currency);
|
||||
|
||||
$images = Image::getImages($this->context->language->id, $product->id);
|
||||
|
||||
$data->assign('tax_exclude_option', Tax::excludeTaxeOption());
|
||||
$data->assign('ps_weight_unit', Configuration::get('PS_WEIGHT_UNIT'));
|
||||
|
||||
$data->assign('ps_use_ecotax', Configuration::get('PS_USE_ECOTAX'));
|
||||
$data->assign('field_value_unity', $this->getFieldValue($product, 'unity'));
|
||||
|
||||
$data->assign('reasons', $reasons = StockMvtReason::getStockMvtReasons($this->context->language->id));
|
||||
$data->assign('ps_stock_mvt_reason_default', $ps_stock_mvt_reason_default = Configuration::get('PS_STOCK_MVT_REASON_DEFAULT'));
|
||||
$data->assign('minimal_quantity', $this->getFieldValue($product, 'minimal_quantity') ? $this->getFieldValue($product, 'minimal_quantity') : 1);
|
||||
$data->assign('available_date', ($this->getFieldValue($product, 'available_date') != 0) ? stripslashes(htmlentities(Tools::displayDate($this->getFieldValue($product, 'available_date'), $this->context->language->id))) : '0000-00-00');
|
||||
|
||||
$i = 0;
|
||||
$data->assign('imageType', ImageType::getByNameNType('small', 'products'));
|
||||
$data->assign('imageWidth', (isset($image_type['width']) ? (int)($image_type['width']) : 64) + 25);
|
||||
foreach ($images as $k => $image)
|
||||
if ($product->is_virtual)
|
||||
{
|
||||
$images[$k]['obj'] = new Image($image['id_image']);
|
||||
++$i;
|
||||
$data->assign('product', $product);
|
||||
$this->displayWarning($this->l('A virtual product cannot have combinations.'));
|
||||
}
|
||||
$data->assign('images', $images);
|
||||
else
|
||||
{
|
||||
$attribute_js = array();
|
||||
$attributes = Attribute::getAttributes($this->context->language->id, true);
|
||||
foreach ($attributes as $k => $attribute)
|
||||
$attribute_js[$attribute['id_attribute_group']][$attribute['id_attribute']] = $attribute['name'];
|
||||
$currency = $this->context->currency;
|
||||
$data->assign('attributeJs', $attribute_js);
|
||||
$data->assign('attributes_groups', AttributeGroup::getAttributesGroups($this->context->language->id));
|
||||
|
||||
// @todo
|
||||
$data->assign('up_filename', strval(Tools::getValue('virtual_product_filename_attribute')));
|
||||
$data->assign($this->tpl_form_vars);
|
||||
$data->assign(array(
|
||||
'list' => $this->renderListAttributes($id_product_download, $product, $currency),
|
||||
'product' => $product,
|
||||
'id_category' => $product->getDefaultCategory(),
|
||||
'token_generator' => Tools::getAdminTokenLite('AdminAttributeGenerator')
|
||||
));
|
||||
$data->assign('currency', $currency);
|
||||
|
||||
$images = Image::getImages($this->context->language->id, $product->id);
|
||||
|
||||
$data->assign('tax_exclude_option', Tax::excludeTaxeOption());
|
||||
$data->assign('ps_weight_unit', Configuration::get('PS_WEIGHT_UNIT'));
|
||||
|
||||
$data->assign('ps_use_ecotax', Configuration::get('PS_USE_ECOTAX'));
|
||||
$data->assign('field_value_unity', $this->getFieldValue($product, 'unity'));
|
||||
|
||||
$data->assign('reasons', $reasons = StockMvtReason::getStockMvtReasons($this->context->language->id));
|
||||
$data->assign('ps_stock_mvt_reason_default', $ps_stock_mvt_reason_default = Configuration::get('PS_STOCK_MVT_REASON_DEFAULT'));
|
||||
$data->assign('minimal_quantity', $this->getFieldValue($product, 'minimal_quantity') ? $this->getFieldValue($product, 'minimal_quantity') : 1);
|
||||
$data->assign('available_date', ($this->getFieldValue($product, 'available_date') != 0) ? stripslashes(htmlentities(Tools::displayDate($this->getFieldValue($product, 'available_date'), $this->context->language->id))) : '0000-00-00');
|
||||
|
||||
$i = 0;
|
||||
$data->assign('imageType', ImageType::getByNameNType('small', 'products'));
|
||||
$data->assign('imageWidth', (isset($image_type['width']) ? (int)($image_type['width']) : 64) + 25);
|
||||
foreach ($images as $k => $image)
|
||||
{
|
||||
$images[$k]['obj'] = new Image($image['id_image']);
|
||||
++$i;
|
||||
}
|
||||
$data->assign('images', $images);
|
||||
|
||||
$data->assign($this->tpl_form_vars);
|
||||
$data->assign(array(
|
||||
'list' => $this->renderListAttributes($product, $currency),
|
||||
'product' => $product,
|
||||
'id_category' => $product->getDefaultCategory(),
|
||||
'token_generator' => Tools::getAdminTokenLite('AdminAttributeGenerator')
|
||||
));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3490,7 +3342,7 @@ class AdminProductsControllerCore extends AdminController
|
||||
$this->tpl_form_vars['custom_form'] = $data->fetch();
|
||||
}
|
||||
|
||||
public function renderListAttributes($id_product_download, $product, $currency)
|
||||
public function renderListAttributes($product, $currency)
|
||||
{
|
||||
$this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?')));
|
||||
$this->addRowAction('edit');
|
||||
@@ -3508,16 +3360,6 @@ class AdminProductsControllerCore extends AdminController
|
||||
'upc' => array('title' => $this->l('UPC'), 'align' => 'left', 'width' => 70)
|
||||
);
|
||||
|
||||
$product_download = new ProductDownload($id_product_download);
|
||||
|
||||
if ($id_product_download && !empty($product_download->display_filename))
|
||||
{
|
||||
$this->fields_list['Filename'] = array('title' => $this->l('Filename'), 'align' => 'center', 'width' => 70);
|
||||
$this->fields_list['nb_downloadable'] = array('title' => $this->l('Number of downloads'), 'align' => 'center', 'width' => 70);
|
||||
$this->fields_list['date_expiration'] = array('title' => $this->l('Number of days'), 'align' => 'center', 'width' => 70);
|
||||
$this->fields_list['is_shareable'] = array('title' => $this->l('Share'), 'align' => 'center', 'width' => 70);
|
||||
}
|
||||
|
||||
if ($product->id)
|
||||
{
|
||||
/* Build attributes combinations */
|
||||
@@ -3571,39 +3413,6 @@ class AdminProductsControllerCore extends AdminController
|
||||
$comb_array[$id_product_attribute]['name'] = 'is_default';
|
||||
$comb_array[$id_product_attribute]['color'] = $color_by_default;
|
||||
}
|
||||
|
||||
$id_product_download = $product->productDownload->getIdFromIdAttribute((int)$product->id, (int)$id_product_attribute);
|
||||
if ($id_product_download)
|
||||
$product->productDownload = new ProductDownload($id_product_download);
|
||||
|
||||
$available_date_attribute = substr($product->productDownload->date_expiration, 0, -9);
|
||||
|
||||
if ($available_date_attribute == '0000-00-00')
|
||||
$available_date_attribute = '';
|
||||
|
||||
if ($id_product_download && !empty($product->productDownload->display_filename))
|
||||
{
|
||||
if ($product->productDownload->is_shareable == 1)
|
||||
$is_shareable = $this->l('Yes');
|
||||
else
|
||||
$is_shareable = $this->l('No');
|
||||
|
||||
$comb_array[$id_product_attribute]['link'] = $product->productDownload->getHtmlLink(false, true);
|
||||
$comb_array[$id_product_attribute]['nb_downloadable'] = $product->productDownload->nb_downloadable;
|
||||
$comb_array[$id_product_attribute]['is_shareable'] = $is_shareable;
|
||||
}
|
||||
|
||||
$exists_file = realpath(_PS_DOWNLOAD_DIR_).'/'.$product->productDownload->filename;
|
||||
|
||||
if ($product->productDownload->id && file_exists($exists_file))
|
||||
$filename = $product->productDownload->filename;
|
||||
else
|
||||
$filename = '';
|
||||
|
||||
//$comb_array[$id_product_attribute]['productDownload'] = $product->productDownload;
|
||||
$comb_array[$id_product_attribute]['id_product_download'] = $id_product_download;
|
||||
$comb_array[$id_product_attribute]['date_expiration'] = $available_date_attribute;
|
||||
$comb_array[$id_product_attribute]['filename'] = $filename;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,3 +141,5 @@ PRIMARY KEY (`id_supplier`, `id_shop`),
|
||||
KEY `id_shop` (`id_shop`)
|
||||
) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8;
|
||||
DROP TABLE `PREFIX_supplier_group_shop`;
|
||||
|
||||
ALTER TABLE `PREFIX_product_download` DROP COLUMN `id_product_attribute`;
|
||||
|
||||
+3
-65
@@ -78,12 +78,7 @@ product_tabs['Combinations'] = new function(){
|
||||
var upc = data[0]['upc'];
|
||||
var minimal_quantity = data[0]['minimal_quantity'];
|
||||
var available_date = data[0]['available_date'];
|
||||
var virtual_product_name_attribute = data[0]['display_filename'];
|
||||
var virtual_product_filename_attribute = data[0]['display_filename'];
|
||||
var virtual_product_nb_downloable = data[0]['nb_downloadable'];
|
||||
var virtual_product_expiration_date_attribute = data[0]['date_expiration'];
|
||||
var virtual_product_nb_days = data[0]['nb_days_accessible'];
|
||||
var is_shareable = data[0]['is_shareable'];
|
||||
|
||||
if (wholesale_price != 0 && wholesale_price > 0)
|
||||
{
|
||||
$("#attribute_wholesale_price_full").show();
|
||||
@@ -109,13 +104,7 @@ product_tabs['Combinations'] = new function(){
|
||||
eco_tax,
|
||||
upc,
|
||||
minimal_quantity,
|
||||
available_date,
|
||||
virtual_product_name_attribute,
|
||||
virtual_product_filename_attribute,
|
||||
virtual_product_nb_downloable,
|
||||
virtual_product_expiration_date_attribute,
|
||||
virtual_product_nb_days,
|
||||
is_shareable
|
||||
available_date
|
||||
);
|
||||
calcImpactPriceTI();
|
||||
}
|
||||
@@ -224,9 +213,7 @@ product_tabs['Combinations'] = new function(){
|
||||
};
|
||||
|
||||
this.fillCombination = function(wholesale_price, price_impact, weight_impact, unit_impact, reference,
|
||||
ean, quantity, image, old_attr, id_product_attribute, default_attribute, eco_tax, upc, minimal_quantity, available_date,
|
||||
virtual_product_name_attribute, virtual_product_filename_attribute, virtual_product_nb_downloable, virtual_product_expiration_date_attribute,
|
||||
virtual_product_nb_days, is_shareable)
|
||||
ean, quantity, image, old_attr, id_product_attribute, default_attribute, eco_tax, upc, minimal_quantity, available_date)
|
||||
{
|
||||
var link = '';
|
||||
self.init_elems();
|
||||
@@ -240,12 +227,6 @@ product_tabs['Combinations'] = new function(){
|
||||
|
||||
getE('attribute_reference').value = reference;
|
||||
|
||||
getE('virtual_product_name_attribute').value = virtual_product_name_attribute;
|
||||
getE('virtual_product_nb_downloable_attribute').value = virtual_product_nb_downloable;
|
||||
getE('virtual_product_expiration_date_attribute').value = virtual_product_nb_downloable;
|
||||
getE('virtual_product_expiration_date_attribute').value = virtual_product_expiration_date_attribute;
|
||||
getE('virtual_product_nb_days_attribute').value = virtual_product_nb_days;
|
||||
|
||||
getE('attribute_ean13').value = ean;
|
||||
getE('attribute_upc').value = upc;
|
||||
getE('attribute_wholesale_price').value = Math.abs(wholesale_price);
|
||||
@@ -307,15 +288,6 @@ product_tabs['Combinations'] = new function(){
|
||||
getE('attribute_unit_impact').selectedIndex = 1;
|
||||
}
|
||||
|
||||
if (is_shareable > 0)
|
||||
$("#virtual_product_is_shareable_attribute").attr("checked", "checked");
|
||||
|
||||
if (id_product_attribute != '' && virtual_product_filename_attribute != '')
|
||||
$("#gethtmlink").show();
|
||||
link = $("#make_downloadable_product_attribute").attr('href');
|
||||
$("#make_downloadable_product_attribute").attr('href', link+"&id_product_attribute="+id_product_attribute);
|
||||
|
||||
$("#virtual_product_filename_attribute").val(virtual_product_filename_attribute);
|
||||
$("#add_new_combination").show();
|
||||
|
||||
/* Reset all combination images */
|
||||
@@ -832,7 +804,6 @@ product_tabs['Informations'] = new function(){
|
||||
$('#is_virtual_good').removeAttr('checked');
|
||||
$('div.is_virtual_good').hide();
|
||||
$('#is_virtual').val(0);
|
||||
$("#virtual_good_attributes").hide();
|
||||
|
||||
product_type = $(this).val();
|
||||
|
||||
@@ -867,7 +838,6 @@ product_tabs['Informations'] = new function(){
|
||||
$('#is_virtual_good').attr('checked', true);
|
||||
$('#virtual_good').show();
|
||||
$('#is_virtual').val(1);
|
||||
$("#virtual_good_attributes").show();
|
||||
});
|
||||
|
||||
tabs_manager.onLoad('Quantities', function(){
|
||||
@@ -894,38 +864,6 @@ product_tabs['Informations'] = new function(){
|
||||
handleSaveButtons();
|
||||
});
|
||||
};
|
||||
/*'setup_tinymce': function(){
|
||||
// change each by click to load only on click
|
||||
$(".autoload_rte").each(function(e){
|
||||
tinySetup({
|
||||
mode :"exact",
|
||||
editor_selector :"autoload_rte",
|
||||
elements : $(this).attr("id"),
|
||||
theme_advanced_buttons1 : "newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
|
||||
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,,|,forecolor,backcolor",
|
||||
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,media,|,ltr,rtl,|,fullscreen",
|
||||
theme_advanced_buttons4 : "styleprops,|,cite,abbr,acronym,del,ins,attribs,pagebreak",
|
||||
setup : function(ed) {
|
||||
//Count the total number of the field
|
||||
ed.onKeyUp.add(function(ed, e) {
|
||||
tinyMCE.triggerSave();
|
||||
textarea = $('#'+ed.id);
|
||||
max = textarea.parent('div').find('span.counter').attr('max');
|
||||
if (max != 'none')
|
||||
{
|
||||
textarea_value = textarea.val();
|
||||
count = stripHTML(textarea_value).length;
|
||||
rest = max - count;
|
||||
if (rest < 0)
|
||||
textarea.parent('div').find('span.counter').html('<span style="color:red;"> ' + mce_maximum + ' ' + max + ' ' + mce_characters + ' : ' + rest + '</span>');
|
||||
else
|
||||
textarea.parent('div').find('span.counter').html(' ');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
},*/
|
||||
this.onReady = function(){
|
||||
self.bindAvailableForOrder();
|
||||
self.bindTagImage();
|
||||
|
||||
Reference in New Issue
Block a user