+ $data->assign('images', $images);
+ }
+ else
+ $content .= '
'.$this->l('You must save this product before adding combinations').'.';
+
+ // @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->id_category_default,
+ 'token_generator' => Tools::getAdminTokenLite('AdminAttributeGenerator')
+ ));
+ $this->tpl_form_vars['custom_form'] = $this->context->smarty->createTemplate($this->tpl_form, $data)->fetch();
+ }
+
+ public function renderListAttributes($id_product_download, $product, $currency)
+ {
+ $this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?')));
+ $this->addRowAction('edit');
+ $this->addRowAction('default');
+ $this->addRowAction('delete');
+
+ $color_by_default = '#BDE5F8';
+
+ $this->fieldsDisplay = array(
+ 'attributes' => array('title' => $this->l('Attributes'), 'align' => 'center', 'width' => 70),
+ 'price' => array('title' => $this->l('Impact'), 'type' => 'price', 'align' => 'center', 'width' => 70),
+ 'weight' => array('title' => $this->l('Weight'), 'align' => 'center', 'width' => 70),
+ 'reference' => array('title' => $this->l('Reference'), 'align' => 'center', 'width' => 70),
+ 'ean13' => array('title' => $this->l('EAN13'), 'align' => 'center', 'width' => 70),
+ 'upc' => array('title' => $this->l('UPC'), 'align' => 'center', 'width' => 70)
+ );
+
+ if ($id_product_download && !empty($productDownload->display_filename))
+ {
+ $this->fieldsDisplay['Filename'] = array('title' => $this->l('Filename'), 'align' => 'center', 'width' => 70);
+ $this->fieldsDisplay['nb_downloadable'] = array('title' => $this->l('Number of downloads'), 'align' => 'center', 'width' => 70);
+ $this->fieldsDisplay['date_expiration'] = array('title' => $this->l('Number of days'), 'align' => 'center', 'width' => 70);
+ $this->fieldsDisplay['is_shareable'] = array('title' => $this->l('Share'), 'align' => 'center', 'width' => 70);
+ }
+
+ if ($product->id)
+ {
+ /* Build attributes combinaisons */
+ $combinaisons = $product->getAttributeCombinaisons($this->context->language->id);
+ $groups = array();
+ $combArray = array();
+ if (is_array($combinaisons))
+ {
+ $combinationImages = $product->getCombinationImages($this->context->language->id);
+ foreach ($combinaisons as $k => $combinaison)
+ {
+ if ($currency->format % 2 != 0)
+ $price = $currency->sign.' '.$combinaison['price'];
+ else
+ $price = $combinaison['price'].' '.$currency->sign;
+
+ $combArray[$combinaison['id_product_attribute']]['id_combinaison_attribute'] = $product->id.'||'.$combinaison['id_product_attribute'];
+ $combArray[$combinaison['id_product_attribute']]['id_product_attribute'] = $combinaison['id_product_attribute'];
+ $combArray[$combinaison['id_product_attribute']]['attributes'][] = array($combinaison['group_name'], $combinaison['attribute_name'], $combinaison['id_attribute']);
+ $combArray[$combinaison['id_product_attribute']]['wholesale_price'] = $combinaison['wholesale_price'];
+ $combArray[$combinaison['id_product_attribute']]['price'] = $price;
+ $combArray[$combinaison['id_product_attribute']]['weight'] = $combinaison['weight'].Configuration::get('PS_WEIGHT_UNIT');
+ $combArray[$combinaison['id_product_attribute']]['unit_impact'] = $combinaison['unit_price_impact'];
+ $combArray[$combinaison['id_product_attribute']]['reference'] = $combinaison['reference'];
+ $combArray[$combinaison['id_product_attribute']]['ean13'] = $combinaison['ean13'];
+ $combArray[$combinaison['id_product_attribute']]['upc'] = $combinaison['upc'];
+ $combArray[$combinaison['id_product_attribute']]['id_image'] = isset($combinationImages[$combinaison['id_product_attribute']][0]['id_image']) ? $combinationImages[$combinaison['id_product_attribute']][0]['id_image'] : 0;
+ $combArray[$combinaison['id_product_attribute']]['available_date'] = strftime($combinaison['available_date']);
+ $combArray[$combinaison['id_product_attribute']]['default_on'] = $combinaison['default_on'];
+ /*$combArray[$combinaison['id_product_attribute']]['minimal_quantity'] = $combinaison['minimal_quantity'];
+ $combArray[$combinaison['id_product_attribute']]['ecotax'] = $combinaison['ecotax'];*/
+ if ($combinaison['is_color_group'])
+ $groups[$combinaison['id_attribute_group']] = $combinaison['group_name'];
+ }
+ }
+
+ $irow = 0;
+ if (isset($combArray))
+ {
+ foreach ($combArray as $id_product_attribute => $product_attribute)
+ {
+ $list = '';
+ $jsList = '';
+
+ /* In order to keep the same attributes order */
+ asort($product_attribute['attributes']);
+
+ foreach ($product_attribute['attributes'] as $attribute)
+ {
+ $list .= addslashes(htmlspecialchars($attribute[0])).' - '.addslashes(htmlspecialchars($attribute[1])).', ';
+ $jsList .= '\''.addslashes(htmlspecialchars($attribute[0])).' : '.addslashes(htmlspecialchars($attribute[1])).'\', \''.$attribute[2].'\', ';
+ }
+ $list = rtrim($list, ', ');
+ $jsList = rtrim($jsList, ', ');
+ $combArray[$id_product_attribute]['image'] = $product_attribute['id_image'] ? new Image($product_attribute['id_image']) : false;
+ $combArray[$id_product_attribute]['available_date'] = $product_attribute['available_date'] != 0 ? date('Y-m-d', strtotime($product_attribute['available_date'])) : '0000-00-00';
+ $combArray[$id_product_attribute]['attributes'] = $list;
+ if ($product_attribute['default_on'])
+ {
+ $this->list_skip_actions['default'][] = $product_attribute['id_combinaison_attribute'];
+ $combArray[$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');
+
+ $combArray[$id_product_attribute]['link'] = $product->productDownload->getHtmlLink(false, true);
+ $combArray[$id_product_attribute]['nb_downloadable'] = $product->productDownload->nb_downloadable;
+ $combArray[$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 = '';
+
+ //$combArray[$id_product_attribute]['productDownload'] = $product->productDownload;
+ $combArray[$id_product_attribute]['id_product_download'] = $id_product_download;
+ $combArray[$id_product_attribute]['date_expiration'] = $available_date_attribute;
+ $combArray[$id_product_attribute]['filename'] = $filename;
+ }
+ }
+ }
+
+ foreach ($this->actions_available as $action)
+ {
+ if (!in_array($action, $this->actions) && isset($this->$action) && $this->$action)
+ $this->actions[] = $action;
+ }
+
+ $helper = new HelperList();
+ $helper->identifier = 'id_combinaison_attribute';
+ $helper->token = $this->token;
+ $helper->currentIndex = self::$currentIndex;
+ $helper->no_link = true;
+ $helper->simple_header = true;
+ $helper->show_toolbar = false;
+ $helper->shopLinkType = $this->shopLinkType;
+ $helper->actions = $this->actions;
+ $helper->list_skip_actions = $this->list_skip_actions;
+ $helper->colorOnBackground = true;
+ $helper->override_folder = $this->tpl_folder.'combinaison/';
+
+ return $helper->generateList($combArray, $this->fieldsDisplay);
+
+ $content = '';
+ $content .= '
- |
-
- |
+ |
+ |
+
+ |
+
+
+
@@ -3022,141 +3227,131 @@ public function getList($id_lang, $orderBy = null, $orderWay = null, $start = 0,
$content .= '| '.$this->l('Actions').' |
';
- if ($product->id)
- {
- /* Build attributes combinaisons */
- $combinaisons = $product->getAttributeCombinaisons($this->context->language->id);
- $groups = array();
- if (is_array($combinaisons))
- {
- $combinationImages = $product->getCombinationImages($this->context->language->id);
- foreach ($combinaisons as $k => $combinaison)
- {
- $combArray[$combinaison['id_product_attribute']]['wholesale_price'] = $combinaison['wholesale_price'];
- $combArray[$combinaison['id_product_attribute']]['price'] = $combinaison['price'];
- $combArray[$combinaison['id_product_attribute']]['weight'] = $combinaison['weight'];
- $combArray[$combinaison['id_product_attribute']]['unit_impact'] = $combinaison['unit_price_impact'];
- $combArray[$combinaison['id_product_attribute']]['reference'] = $combinaison['reference'];
- $combArray[$combinaison['id_product_attribute']]['ean13'] = $combinaison['ean13'];
- $combArray[$combinaison['id_product_attribute']]['upc'] = $combinaison['upc'];
- $combArray[$combinaison['id_product_attribute']]['minimal_quantity'] = $combinaison['minimal_quantity'];
- $combArray[$combinaison['id_product_attribute']]['available_date'] = strftime($combinaison['available_date']);
- $combArray[$combinaison['id_product_attribute']]['id_image'] = isset($combinationImages[$combinaison['id_product_attribute']][0]['id_image']) ? $combinationImages[$combinaison['id_product_attribute']][0]['id_image'] : 0;
- $combArray[$combinaison['id_product_attribute']]['default_on'] = $combinaison['default_on'];
- $combArray[$combinaison['id_product_attribute']]['ecotax'] = $combinaison['ecotax'];
- $combArray[$combinaison['id_product_attribute']]['attributes'][] = array($combinaison['group_name'], $combinaison['attribute_name'], $combinaison['id_attribute']);
- if ($combinaison['is_color_group'])
- $groups[$combinaison['id_attribute_group']] = $combinaison['group_name'];
- }
- }
- $irow = 0;
- if (isset($combArray))
- {
- foreach ($combArray as $id_product_attribute => $product_attribute)
- {
- $list = '';
- $jsList = '';
- /* In order to keep the same attributes order */
- asort($product_attribute['attributes']);
-
- foreach ($product_attribute['attributes'] as $attribute)
+ if ($product->id)
{
- $list .= addslashes(htmlspecialchars($attribute[0])).' - '.addslashes(htmlspecialchars($attribute[1])).', ';
- $jsList .= '\''.addslashes(htmlspecialchars($attribute[0])).' : '.addslashes(htmlspecialchars($attribute[1])).'\', \''.$attribute[2].'\', ';
- }
- $list = rtrim($list, ', ');
- $jsList = rtrim($jsList, ', ');
- $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 = $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 ($product->productDownload->is_shareable == 1)
- $is_shareable = $this->l('Yes');
- else
- $is_shareable = $this->l('No');
-
- $content .= '
-
- | '.stripslashes($list).' |
- '.($currency->format % 2 != 0 ? $currency->sign.' ' : '').$product_attribute['price'].($currency->format % 2 == 0 ? ' '.$currency->sign : '').' |
- '.$product_attribute['weight'].Configuration::get('PS_WEIGHT_UNIT').' |
- '.$product_attribute['reference'].' |
- '.$product_attribute['ean13'].' |
- '.$product_attribute['upc'].' | ';
-
- if ($id_product_download && !empty($product->productDownload->display_filename))
+ /* Build attributes combinaisons */
+ $combinaisons = $product->getAttributeCombinaisons($this->context->language->id);
+ $groups = array();
+ if (is_array($combinaisons))
{
- $content .= ''.$product->productDownload->getHtmlLink(false, true).' |
- '.$product->productDownload->nb_downloadable.' |
- '.$product->productDownload->nb_downloadable.' |
- '.$is_shareable.' | ';
+ $combinationImages = $product->getCombinationImages($this->context->language->id);
+ foreach ($combinaisons as $k => $combinaison)
+ {
+ $combArray[$combinaison['id_product_attribute']]['wholesale_price'] = $combinaison['wholesale_price'];
+ $combArray[$combinaison['id_product_attribute']]['price'] = $combinaison['price'];
+ $combArray[$combinaison['id_product_attribute']]['weight'] = $combinaison['weight'];
+ $combArray[$combinaison['id_product_attribute']]['unit_impact'] = $combinaison['unit_price_impact'];
+ $combArray[$combinaison['id_product_attribute']]['reference'] = $combinaison['reference'];
+ $combArray[$combinaison['id_product_attribute']]['ean13'] = $combinaison['ean13'];
+ $combArray[$combinaison['id_product_attribute']]['upc'] = $combinaison['upc'];
+ $combArray[$combinaison['id_product_attribute']]['minimal_quantity'] = $combinaison['minimal_quantity'];
+ $combArray[$combinaison['id_product_attribute']]['available_date'] = strftime($combinaison['available_date']);
+ $combArray[$combinaison['id_product_attribute']]['id_image'] = isset($combinationImages[$combinaison['id_product_attribute']][0]['id_image']) ? $combinationImages[$combinaison['id_product_attribute']][0]['id_image'] : 0;
+ $combArray[$combinaison['id_product_attribute']]['default_on'] = $combinaison['default_on'];
+ $combArray[$combinaison['id_product_attribute']]['ecotax'] = $combinaison['ecotax'];
+ $combArray[$combinaison['id_product_attribute']]['attributes'][] = array($combinaison['group_name'], $combinaison['attribute_name'], $combinaison['id_attribute']);
+ if ($combinaison['is_color_group'])
+ $groups[$combinaison['id_attribute_group']] = $combinaison['group_name'];
+ }
}
- $exists_file = realpath(_PS_DOWNLOAD_DIR_).'/'.$product->productDownload->filename;
-
- if ($product->productDownload->id && file_exists($exists_file))
- $filename = $product->productDownload->filename;
+ $irow = 0;
+ if (isset($combArray))
+ {
+ foreach ($combArray as $id_product_attribute => $product_attribute)
+ {
+ $list = '';
+ $jsList = '';
+
+ /* In order to keep the same attributes order */
+ asort($product_attribute['attributes']);
+
+ foreach ($product_attribute['attributes'] as $attribute)
+ {
+ $list .= addslashes(htmlspecialchars($attribute[0])).' - '.addslashes(htmlspecialchars($attribute[1])).', ';
+ $jsList .= '\''.addslashes(htmlspecialchars($attribute[0])).' : '.addslashes(htmlspecialchars($attribute[1])).'\', \''.$attribute[2].'\', ';
+ }
+ $list = rtrim($list, ', ');
+ $jsList = rtrim($jsList, ', ');
+ $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 = $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 ($product->productDownload->is_shareable == 1)
+ $is_shareable = $this->l('Yes');
+ else
+ $is_shareable = $this->l('No');
+
+ $content .= '
+
+ | '.stripslashes($list).' |
+ '.($currency->format % 2 != 0 ? $currency->sign.' ' : '').$product_attribute['price'].($currency->format % 2 == 0 ? ' '.$currency->sign : '').' |
+ '.$product_attribute['weight'].Configuration::get('PS_WEIGHT_UNIT').' |
+ '.$product_attribute['reference'].' |
+ '.$product_attribute['ean13'].' |
+ '.$product_attribute['upc'].' | ';
+
+ if ($id_product_download && !empty($product->productDownload->display_filename))
+ {
+ $content .= ''.$product->productDownload->getHtmlLink(false, true).' |
+ '.$product->productDownload->nb_downloadable.' |
+ '.$product->productDownload->nb_downloadable.' |
+ '.$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 = '';
+ // @todo : a better way to "fillCombinaison" maybe ?
+ $content .= '
+
+
+ '.(!$product_attribute['default_on'] ? '
+ ' : '').'
+
+  |
+ ';
+ }
+ $content .= ' '.$this->l('Delete all combinations').' | ';
+ }
else
- $filename = '';
- // @todo : a better way to "fillCombinaison" maybe ?
- $content .= '
-
-
- '.(!$product_attribute['default_on'] ? '
- ' : '').'
-
-  |
- ';
- }
- $content .= ' '.$this->l('Delete all combinations').' | ';
- }
- else
- $content .= '| '.$this->l('No combination yet').'. | ';
- }
- $content .= '
-
- '.$this->l('The row in blue is the default combination.').'
-
- '.$this->l('A default combination must be designated for each product.').'
- |
-
-
- ';
- }
- else
- $content .= '
'.$this->l('You must save this product before adding combinations').'.';
- // @todo
- $smarty->assign('up_filename', strval(Tools::getValue('virtual_product_filename_attribute')));
- $this->context->smarty->assign($this->tpl_form_vars);
- $this->context->smarty->assign(array(
- 'content' => $content,
- 'product' => $product,
- 'id_category' => $product->id_category_default,
- 'token_generator' => Tools::getAdminTokenLite('AdminAttributeGenerator')
- ));
- $this->tpl_form_vars['custom_form'] = $this->context->smarty->fetch('products/combinations.tpl');
+ $content .= '
| '.$this->l('No combination yet').'. |
';
+ }
+ $content .= '
+
+
'.$this->l('The row in blue is the default combination.').'
+
+ '.$this->l('A default combination must be designated for each product.').'
+
+
+
+ ';
+ return $content;
}
public function initFormQuantities($obj)
@@ -3589,4 +3784,24 @@ public function getList($id_lang, $orderBy = null, $orderWay = null, $start = 0,
$this->addJqueryPlugin('ajaxfileupload');
$this->addJqueryPlugin('date');
}
+
+ public function setMedia()
+ {
+ parent::setMedia();
+
+ $this->addjQueryPlugin('fileuploader');
+
+ $this->addJqueryUI(array(
+ 'ui.core',
+ 'ui.widget',
+ 'ui.progressbar'
+ ));
+
+ $this->addJS(array(
+ _PS_JS_DIR_.'admin-products.js',
+ _PS_JS_DIR_.'price.js',
+ _PS_JS_DIR_.'tiny_mce/tiny_mce.js',
+ _PS_JS_DIR_.'tinymce.inc.js'
+ ));
+ }
}
diff --git a/controllers/admin/AdminShippingController.php b/controllers/admin/AdminShippingController.php
index 2007bd525..892af710b 100644
--- a/controllers/admin/AdminShippingController.php
+++ b/controllers/admin/AdminShippingController.php
@@ -64,7 +64,7 @@ class AdminShippingControllerCore extends AdminController
'validation' => 'isUnsignedFloat'),
),
'description' =>
- '
+ '
- '.$this->l('If you set these parameters to 0, they will be disabled').'
- '.$this->l('Coupons are not taken into account when calculating free shipping').'
',
diff --git a/js/admin-products.js b/js/admin-products.js
index 6308a2967..ec440d1a4 100644
--- a/js/admin-products.js
+++ b/js/admin-products.js
@@ -23,6 +23,115 @@
* International Registered Trademark & Property of PrestaShop SA
*/
+function deleteProductAttribute(ids, token, parent)
+{
+ var id = ids.split('||');
+ $.ajax({
+ url: 'index.php',
+ data: {
+ id_product: id[0],
+ id_product_attribute: id[1],
+ controller: 'AdminProducts',
+ token: token,
+ action: 'deleteProductAttribute',
+ ajax: true
+ },
+ context: document.body,
+ dataType: 'json',
+ context: this,
+ async: false,
+ success: function(data) {
+ if (data.status == 'ok')
+ {
+ showSuccessMessage(data.message);
+ parent.hide();
+ }
+ else
+ showErrorMessage(data.message);
+ }
+ });
+}
+
+function defaultProductAttribute(ids, token, parent)
+{
+ var id = ids.split('||');
+ $.ajax({
+ url: 'index.php',
+ data: {
+ id_product: id[0],
+ id_product_attribute: id[1],
+ controller: 'AdminProducts',
+ token: token,
+ action: 'defaultProductAttribute',
+ ajax: true
+ },
+ context: document.body,
+ dataType: 'json',
+ context: this,
+ async: false,
+ success: function(data) {
+ if (data.status == 'ok')
+ {
+ showSuccessMessage(data.message);
+ $('table.table').find('tr').each(function(){
+ $(this).attr('style', '');
+ });
+ parent.find('a.default').hide();
+ parent.css('background','#BDE5F8');
+ }
+ else
+ showErrorMessage(data.message);
+ }
+ });
+}
+
+function editProductAttribute(ids, token)
+{
+ var id = ids.split('||');
+ $.ajax({
+ url: 'index.php',
+ data: {
+ id_product: id[0],
+ id_product_attribute: id[1],
+ controller: 'AdminProducts',
+ token: token,
+ action: 'editProductAttribute',
+ ajax: true
+ },
+ context: document.body,
+ dataType: 'json',
+ context: this,
+ async: false,
+ success: function(data) {
+ $('#add_new_combination').show();
+ console.log(data[0]);
+ console.log(data[1]);
+ for(i=0;i'+data[i]['group_name']+' : '+data[i]['attribute_name']+'');
+ $('#attribute_reference').val(data[i]['reference']);
+ $('#attribute_ean13').val(data[i]['ean13']);
+ $('#attribute_upc').val(data[i]['upc']);
+ $('#attribute_wholesale_price').val(Math.abs(data[i]['wholesale_price']));
+ $('#attribute_price').val(Math.abs(data[i]['price']));
+ $('#attribute_priceTI').val(data[i]['attribute_reference']);
+ $('#attribute_weight').val(Math.abs(data[i]['weight']));
+ $('#attribute_unity').val(Math.abs(data[i]['unit_price_impact']));
+ if ($('#attribute_ecotax').length != 0)
+ $('#attribute_ecotax').val(data[i]['ecotax']);
+ $('#minimal_quantity').val(data[i]['minimal_quantity']);
+ $('#attribute_minimal_quantity').val(data[i]['minimal_quantity']);
+ $('#available_date').val(data[i]['available_date']);
+
+ if (data[i]['default_on'] == 1)
+ $('#attribute_default').checked = true;
+ else
+ $('#attribute_default').checked = false;
+ }
+ }
+ });
+}
+
function addPackItem()
{
if ($('#curPackItemId').val() == '' || $('#curPackItemName').val() == '')