// #PSTEST-1229 - remove virtual combinations

This commit is contained in:
tDidierjean
2012-04-24 13:23:02 +00:00
parent 744df9b3b2
commit dbae669d5f
8 changed files with 73 additions and 472 deletions
+64 -255
View File
@@ -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;
}
}
}