private function getCombinationImages($attribute_id)
 {
     $images = $this->product->getCombinationImages((int) $this->context->language->id);
     $images = $images[$attribute_id];
     $link = $this->context->link;
     $jsonImages = array();
     if ($images && count($images)) {
         foreach ($images as $image) {
             $jsonImages[] = array('name' => $image['legend'], 'url' => $link->getImageLink($this->product->link_rewrite, $this->product->id . '-' . $image['id_image']));
         }
     }
     return $jsonImages;
 }
 /**
  * Assign template vars related to attribute groups and colors
  */
 protected function assignAttributesGroups()
 {
     $colors = array();
     $groups = array();
     // @todo (RM) should only get groups and not all declination ?
     $attributes_groups = $this->product->getAttributesGroups($this->context->language->id);
     if (is_array($attributes_groups) && $attributes_groups) {
         $combination_images = $this->product->getCombinationImages($this->context->language->id);
         $combination_prices_set = array();
         foreach ($attributes_groups as $k => $row) {
             // Color management
             if (isset($row['attribute_color']) && $row['attribute_color'] || file_exists(_PS_COL_IMG_DIR_ . $row['id_attribute'] . '.jpg')) {
                 $colors[$row['id_attribute']]['value'] = $row['attribute_color'];
                 $colors[$row['id_attribute']]['name'] = $row['attribute_name'];
                 if (!isset($colors[$row['id_attribute']]['attributes_quantity'])) {
                     $colors[$row['id_attribute']]['attributes_quantity'] = 0;
                 }
                 $colors[$row['id_attribute']]['attributes_quantity'] += (int) $row['quantity'];
             }
             if (!isset($groups[$row['id_attribute_group']])) {
                 $groups[$row['id_attribute_group']] = array('name' => $row['public_group_name'], 'group_type' => $row['group_type'], 'default' => -1);
             }
             $groups[$row['id_attribute_group']]['attributes'][$row['id_attribute']] = $row['attribute_name'];
             if ($row['default_on'] && $groups[$row['id_attribute_group']]['default'] == -1) {
                 $groups[$row['id_attribute_group']]['default'] = (int) $row['id_attribute'];
             }
             if (!isset($groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']])) {
                 $groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']] = 0;
             }
             $groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']] += (int) $row['quantity'];
             if ($row['available_date'] != '0000-00-00 00:00:00' && $row['available_date'] != '0000-00-00') {
                 $available_date = Tools::displayDate($row['available_date'], $this->context->language->id);
             } else {
                 $available_date = $row['available_date'];
             }
             $combinations[$row['id_product_attribute']]['attributes_values'][$row['id_attribute_group']] = $row['attribute_name'];
             $combinations[$row['id_product_attribute']]['attributes'][] = (int) $row['id_attribute'];
             $combinations[$row['id_product_attribute']]['price'] = (double) $row['price'];
             // Call getPriceStatic in order to set $combination_specific_price
             if (!isset($combination_prices_set[(int) $row['id_product_attribute']])) {
                 Product::getPriceStatic((int) $this->product->id, false, $row['id_product_attribute'], 6, null, false, true, 1, false, null, null, null, $combination_specific_price);
                 $combination_prices_set[(int) $row['id_product_attribute']] = true;
                 $combinations[$row['id_product_attribute']]['specific_price'] = $combination_specific_price;
             }
             $combinations[$row['id_product_attribute']]['ecotax'] = (double) $row['ecotax'];
             $combinations[$row['id_product_attribute']]['weight'] = (double) $row['weight'];
             $combinations[$row['id_product_attribute']]['quantity'] = (int) $row['quantity'];
             $combinations[$row['id_product_attribute']]['reference'] = $row['reference'];
             $combinations[$row['id_product_attribute']]['unit_impact'] = $row['unit_price_impact'];
             $combinations[$row['id_product_attribute']]['minimal_quantity'] = $row['minimal_quantity'];
             $combinations[$row['id_product_attribute']]['available_date'] = $available_date;
             if (isset($combination_images[$row['id_product_attribute']][0]['id_image'])) {
                 $combinations[$row['id_product_attribute']]['id_image'] = $combination_images[$row['id_product_attribute']][0]['id_image'];
             } else {
                 $combinations[$row['id_product_attribute']]['id_image'] = -1;
             }
         }
         // wash attributes list (if some attributes are unavailables and if allowed to wash it)
         if (!Product::isAvailableWhenOutOfStock($this->product->out_of_stock) && Configuration::get('PS_DISP_UNAVAILABLE_ATTR') == 0) {
             foreach ($groups as &$group) {
                 foreach ($group['attributes_quantity'] as $key => &$quantity) {
                     if (!$quantity) {
                         unset($group['attributes'][$key]);
                     }
                 }
             }
             foreach ($colors as $key => $color) {
                 if (!$color['attributes_quantity']) {
                     unset($colors[$key]);
                 }
             }
         }
         foreach ($combinations as $id_product_attribute => $comb) {
             $attribute_list = '';
             foreach ($comb['attributes'] as $id_attribute) {
                 $attribute_list .= '\'' . (int) $id_attribute . '\',';
             }
             $attribute_list = rtrim($attribute_list, ',');
             $combinations[$id_product_attribute]['list'] = $attribute_list;
         }
         $this->context->smarty->assign(array('groups' => $groups, 'combinations' => $combinations, 'colors' => count($colors) ? $colors : false, 'combinationImages' => $combination_images));
     }
 }
Example #3
0
 /**
  * @param Product $product
  * @param int $lang id of a language
  * @return array of a product declinations. 
  */
 private function getCombinations(Product $product, $lang)
 {
     $attributesGroups = $product->getAttributesGroups((int) $lang);
     $combinations = array();
     if ($attributesGroups && is_array($attributesGroups)) {
         $combinationImages = $product->getCombinationImages((int) $lang);
         foreach ($attributesGroups as $k => $row) {
             $combinations[$row['id_product_attribute']]['id_combination'] = $row['id_product_attribute'];
             $combinations[$row['id_product_attribute']]['attributes'][$row['id_attribute_group']] = array('name' => $row['attribute_name'], 'group_name' => $row['public_group_name'], 'id_attribute' => (int) $row['id_attribute']);
             $combinations[$row['id_product_attribute']]['price'] = (double) $row['price'];
             $combinations[$row['id_product_attribute']]['ecotax'] = (double) $row['ecotax'];
             $combinations[$row['id_product_attribute']]['weight'] = (double) $row['weight'];
             $combinations[$row['id_product_attribute']]['quantity'] = (int) $row['quantity'];
             $combinations[$row['id_product_attribute']]['reference'] = $row['reference'];
             if (isset($row['unit_price_impact'])) {
                 $combinations[$row['id_product_attribute']]['unit_impact'] = $row['unit_price_impact'];
             }
             $combinations[$row['id_product_attribute']]['id_image'] = isset($combinationImages[$row['id_product_attribute']][0]['id_image']) ? $combinationImages[$row['id_product_attribute']][0]['id_image'] : -1;
         }
     }
     return $combinations;
 }
 /**
  * @param Product $product
  * @param Currency|array|int $currency
  * @return string
  */
 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');
     $this->addRowAction('default');
     $this->addRowAction('delete');
     $default_class = 'highlighted';
     $this->fields_list = array('attributes' => array('title' => $this->l('Attribute - value pair'), 'align' => 'left'), 'price' => array('title' => $this->l('Impact on price'), 'type' => 'price', 'align' => 'left'), 'weight' => array('title' => $this->l('Impact on weight'), 'align' => 'left'), 'reference' => array('title' => $this->l('Reference'), 'align' => 'left'), 'ean13' => array('title' => $this->l('EAN-13'), 'align' => 'left'), 'upc' => array('title' => $this->l('UPC'), 'align' => 'left'));
     if ($product->id) {
         /* Build attributes combinations */
         $combinations = $product->getAttributeCombinations($this->context->language->id);
         $groups = array();
         $comb_array = array();
         if (is_array($combinations)) {
             $combination_images = $product->getCombinationImages($this->context->language->id);
             foreach ($combinations as $k => $combination) {
                 $price_to_convert = Tools::convertPrice($combination['price'], $currency);
                 $price = Tools::displayPrice($price_to_convert, $currency);
                 $comb_array[$combination['id_product_attribute']]['id_product_attribute'] = $combination['id_product_attribute'];
                 $comb_array[$combination['id_product_attribute']]['attributes'][] = array($combination['group_name'], $combination['attribute_name'], $combination['id_attribute']);
                 $comb_array[$combination['id_product_attribute']]['wholesale_price'] = $combination['wholesale_price'];
                 $comb_array[$combination['id_product_attribute']]['price'] = $price;
                 $comb_array[$combination['id_product_attribute']]['weight'] = $combination['weight'] . Configuration::get('PS_WEIGHT_UNIT');
                 $comb_array[$combination['id_product_attribute']]['unit_impact'] = $combination['unit_price_impact'];
                 $comb_array[$combination['id_product_attribute']]['reference'] = $combination['reference'];
                 $comb_array[$combination['id_product_attribute']]['ean13'] = $combination['ean13'];
                 $comb_array[$combination['id_product_attribute']]['upc'] = $combination['upc'];
                 $comb_array[$combination['id_product_attribute']]['id_image'] = isset($combination_images[$combination['id_product_attribute']][0]['id_image']) ? $combination_images[$combination['id_product_attribute']][0]['id_image'] : 0;
                 $comb_array[$combination['id_product_attribute']]['available_date'] = strftime($combination['available_date']);
                 $comb_array[$combination['id_product_attribute']]['default_on'] = $combination['default_on'];
                 if ($combination['is_color_group']) {
                     $groups[$combination['id_attribute_group']] = $combination['group_name'];
                 }
             }
         }
         if (isset($comb_array)) {
             foreach ($comb_array as $id_product_attribute => $product_attribute) {
                 $list = '';
                 /* In order to keep the same attributes order */
                 asort($product_attribute['attributes']);
                 foreach ($product_attribute['attributes'] as $attribute) {
                     $list .= $attribute[0] . ' - ' . $attribute[1] . ', ';
                 }
                 $list = rtrim($list, ', ');
                 $comb_array[$id_product_attribute]['image'] = $product_attribute['id_image'] ? new Image($product_attribute['id_image']) : false;
                 $comb_array[$id_product_attribute]['available_date'] = $product_attribute['available_date'] != 0 ? date('Y-m-d', strtotime($product_attribute['available_date'])) : '0000-00-00';
                 $comb_array[$id_product_attribute]['attributes'] = $list;
                 $comb_array[$id_product_attribute]['name'] = $list;
                 if ($product_attribute['default_on']) {
                     $comb_array[$id_product_attribute]['class'] = $default_class;
                 }
             }
         }
     }
     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_product_attribute';
     $helper->table_id = 'combinations-list';
     $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 . 'combination/';
     return $helper->generateList($comb_array, $this->fields_list);
 }
 /**
  * Updates product combinations on Prestashop.
  * 
  * @param integer $id_product
  * @param string $url_photo
  * @param array $triple_cod_col_siz
  * @param array $array_combinations
  * @param integer $language
  * @return bool
  * @see $this->createAttributeGroups
  * @see $this->setArrayElementForLinkRewrite
  * @see $this->getCodeColor
  * @see PrestashopImageHandler getIdImageByName()
  * @see PrestashopImageHandler insertImageInPrestashop()
  *
  */
 private function updateCombinantionsForPrestashop($id_product, $url_photo, $triple_cod_col_siz, $array_combinations, $language = 1)
 {
     $product = new Product((int) $id_product);
     $id_new_images = array();
     $price = '0.000';
     //(float)$product->price;
     $reference = $product->reference;
     $id_supplier = (int) $product->id_supplier;
     foreach ($triple_cod_col_siz as $triple) {
         $array_attributes_and_values = $array_combinations[$triple];
         $attributes = $array_attributes_and_values["Attributi"];
         $values = $array_attributes_and_values["Valori"];
         $image = trim($array_attributes_and_values["Immagine"]);
         $quantity = (int) $array_attributes_and_values["Qta"];
         $variable_tmp_attributes = explode(",", $attributes);
         $variable_tmp_values = explode(",", $values);
         $id_attributes_for_combinations = array();
         $flag_just_exist_color = 1;
         $flag_just_exist_size = 1;
         for ($i = 0; $i < sizeof($variable_tmp_attributes); $i++) {
             $code = "";
             if ($variable_tmp_values[$i] != "") {
                 $id_attribute_group = $this->createAttributeGroups($variable_tmp_attributes[$i], $language);
                 $id_attributes_for_not_repeat = $this->getAttributeColorAndSize($variable_tmp_values[$i], $language);
                 if (strtolower($variable_tmp_attributes[$i]) === "colore" || strtolower($variable_tmp_attributes[$i]) === "colori") {
                     $product_attribute_for_not_reply = $product->getAttributeCombinations($language);
                     if (empty($product_attribute_for_not_reply)) {
                         if ($id_attributes_for_not_repeat === '-1') {
                             $code = $this->getCodeColor(strtolower($variable_tmp_values[$i]));
                             if ($code != "") {
                                 $code = "#" . $code;
                                 $attribute_for_product = new Attribute();
                                 $attribute_for_product->name = $this->setArrayElementForLinkRewrite($variable_tmp_values[$i], true, $language);
                                 $attribute_for_product->color = $code;
                                 $attribute_for_product->id_attribute_group = $id_attribute_group;
                                 $attribute_for_product->add();
                                 array_push($id_attributes_for_combinations, $attribute_for_product->id);
                             }
                         } else {
                             array_push($id_attributes_for_combinations, (int) $id_attributes_for_not_repeat);
                         }
                     } else {
                         $flag = 1;
                         foreach ($product_attribute_for_not_reply as $more_attributes) {
                             if ($more_attributes['attribute_name'] === $variable_tmp_values[$i]) {
                                 array_push($id_attributes_for_combinations, (int) $more_attributes['id_attribute']);
                                 $flag = 0;
                                 $flag_just_exist_color = 0;
                                 break;
                             }
                         }
                         if ($flag) {
                             if ($id_attributes_for_not_repeat === '-1') {
                                 $code = $this->getCodeColor(strtolower($variable_tmp_values[$i]));
                                 if ($code != "") {
                                     $code = "#" . $code;
                                     $attribute_for_product = new Attribute();
                                     $attribute_for_product->name = $this->setArrayElementForLinkRewrite($variable_tmp_values[$i], true, $language);
                                     $attribute_for_product->color = $code;
                                     $attribute_for_product->id_attribute_group = $id_attribute_group;
                                     $attribute_for_product->add();
                                     array_push($id_attributes_for_combinations, $attribute_for_product->id);
                                 }
                             } else {
                                 array_push($id_attributes_for_combinations, (int) $id_attributes_for_not_repeat);
                             }
                         }
                     }
                 }
                 if (strtolower($variable_tmp_attributes[$i]) === "taglia" || strtolower($variable_tmp_attributes[$i]) === "taglie") {
                     $product_attribute_for_not_reply = $product->getAttributeCombinations($language);
                     if (empty($product_attribute_for_not_reply)) {
                         if ($id_attributes_for_not_repeat === '-1') {
                             $attribute_for_product = new Attribute();
                             $attribute_for_product->name = $this->setArrayElementForLinkRewrite($variable_tmp_values[$i], true, $language);
                             $attribute_for_product->id_attribute_group = $id_attribute_group;
                             $attribute_for_product->add();
                             array_push($id_attributes_for_combinations, $attribute_for_product->id);
                         } else {
                             array_push($id_attributes_for_combinations, (int) $id_attributes_for_not_repeat);
                         }
                     } else {
                         $flag = 1;
                         foreach ($product_attribute_for_not_reply as $more_attributes) {
                             $vrbls_1 = trim($more_attributes['attribute_name']);
                             $vrbls_2 = trim($variable_tmp_values[$i]);
                             if (gettype($vrbls_1) === "string" && gettype($vrbls_2) === "string") {
                                 if ($vrbls_1 === $vrbls_2) {
                                     array_push($id_attributes_for_combinations, (int) $more_attributes['id_attribute']);
                                     $flag = 0;
                                     $flag_just_exist_size = 0;
                                     break;
                                 }
                             }
                             if (gettype($vrbls_1) === "integer" && gettype($vrbls_2) === "integer") {
                                 if ($vrbls_1 == $vrbls_2) {
                                     array_push($id_attributes_for_combinations, (int) $more_attributes['id_attribute']);
                                     $flag = 0;
                                     $flag_just_exist_size = 0;
                                     break;
                                 }
                             }
                         }
                         if ($flag) {
                             if ($id_attributes_for_not_repeat === '-1') {
                                 $attribute_for_product = new Attribute();
                                 $attribute_for_product->name = $this->setArrayElementForLinkRewrite($variable_tmp_values[$i], true, $language);
                                 $attribute_for_product->id_attribute_group = $id_attribute_group;
                                 $attribute_for_product->add();
                                 array_push($id_attributes_for_combinations, $attribute_for_product->id);
                             } else {
                                 array_push($id_attributes_for_combinations, (int) $id_attributes_for_not_repeat);
                             }
                         }
                     }
                 }
             } else {
                 if (strtolower($variable_tmp_attributes[$i]) === "colore" || strtolower($variable_tmp_attributes[$i]) === "colori") {
                     $flag_just_exist_color = 0;
                 }
                 if (strtolower($variable_tmp_attributes[$i]) === "taglia" || strtolower($variable_tmp_attributes[$i]) === "taglie") {
                     $flag_just_exist_size = 0;
                 }
             }
         }
         if ($flag_just_exist_color || $flag_just_exist_size) {
             $id_images = array();
             $tmp_photo = explode(".jpg,", $image);
             for ($i = 0; $i < sizeof($tmp_photo); $i++) {
                 if (!empty($tmp_photo[$i])) {
                     $image_for_prestashop = new PrestashopImageHandler();
                     $id_image = $image_for_prestashop->getIdImageByName(trim($tmp_photo[$i]));
                     if (!empty($id_image)) {
                         array_push($id_images, $id_image);
                     } else {
                         $id_image = $image_for_prestashop->insertImageInPrestashop($id_product, trim($url_photo), trim($tmp_photo[$i]));
                         array_push($id_images, $id_image);
                         array_push($id_new_images, $id_image . ";" . trim($tmp_photo[$i]) . '.jpg');
                     }
                 }
             }
             $id_product_attributes = $product->addProductAttribute($price, 0, 0, 0, $quantity, "", $reference, $id_supplier, 0, 1);
             $combinations = new CombinationCore((int) $id_product_attributes);
             $combinations->setAttributes($id_attributes_for_combinations);
             $combinations->setImages($id_images);
         } else {
             $id_images = array();
             $tmp_photo = explode(".jpg,", $image);
             for ($i = 0; $i < sizeof($tmp_photo); $i++) {
                 if (!empty($tmp_photo[$i])) {
                     $image_for_prestashop = new PrestashopImageHandler();
                     $id_image = $image_for_prestashop->getIdImageByName(trim($tmp_photo[$i]));
                     if (empty($id_image)) {
                         $id_image = $image_for_prestashop->insertImageInPrestashop($id_product, trim($url_photo), trim($tmp_photo[$i]));
                         array_push($id_images, $id_image);
                         array_push($id_new_images, $id_image . ";" . trim($tmp_photo[$i]) . ".jpg");
                     }
                 }
             }
             if (!empty($id_images)) {
                 $array_product_attribute_combinations_get = $product->getCombinationImages($language);
                 for ($i = 0; $i < sizeof($id_images); $i++) {
                     $id_della_immagine = $id_images[$i];
                     foreach ($array_product_attribute_combinations_get as $single_array_of_attribute_product) {
                         foreach ($single_array_of_attribute_product as $array_di_combinazioni) {
                             $id_arr_comb = $array_di_combinazioni['id_product_attribute'];
                             $combinazioni_attributi = new CombinationCore((int) $id_arr_comb);
                             $attribute_combinations = $combinazioni_attributi->getAttributesName($language);
                             $attr_comb1 = $attribute_combinations[0];
                             $attr_comb2 = $attribute_combinations[1];
                             $id_attr_comb1 = $attr_comb1['id_attribute'];
                             $id_attr_comb2 = $attr_comb2['id_attribute'];
                             $id_attributi_input = $id_attributes_for_combinations;
                             $id_color_or_size = $id_attributi_input[0];
                             $id_size_or_color = $id_attributi_input[1];
                             if ($id_color_or_size == $id_attr_comb1 || $id_color_or_size == $id_attr_comb2) {
                                 if ($id_size_or_color == $id_attr_comb1 || $id_size_or_color == $id_attr_comb2) {
                                     $new_image = array();
                                     $new_array_image = $combinazioni_attributi->getWsImages();
                                     for ($j = 0; $j < sizeof($new_array_image); $j++) {
                                         $tmp_image_ = $new_array_image[$j];
                                         array_push($new_image, (int) $tmp_image_['id']);
                                     }
                                     array_push($new_image, $id_della_immagine);
                                     $fff = $product->updateProductAttribute($id_arr_comb, 0, $price, 0, 0, 0, $new_image, $reference, $id_supplier, 0, 1, null, null, 1, '0000-00-00');
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     return $id_new_images;
 }
Example #6
0
 /**
  * Assign template vars related to attribute groups and colors.
  */
 protected function assignAttributesGroups($product_for_template = null)
 {
     $colors = array();
     $groups = array();
     $this->combinations = array();
     // @todo (RM) should only get groups and not all declination ?
     $attributes_groups = $this->product->getAttributesGroups($this->context->language->id);
     if (is_array($attributes_groups) && $attributes_groups) {
         $combination_images = $this->product->getCombinationImages($this->context->language->id);
         $combination_prices_set = array();
         foreach ($attributes_groups as $k => $row) {
             // Color management
             if (isset($row['is_color_group']) && $row['is_color_group'] && (isset($row['attribute_color']) && $row['attribute_color']) || file_exists(_PS_COL_IMG_DIR_ . $row['id_attribute'] . '.jpg')) {
                 $colors[$row['id_attribute']]['value'] = $row['attribute_color'];
                 $colors[$row['id_attribute']]['name'] = $row['attribute_name'];
                 if (!isset($colors[$row['id_attribute']]['attributes_quantity'])) {
                     $colors[$row['id_attribute']]['attributes_quantity'] = 0;
                 }
                 $colors[$row['id_attribute']]['attributes_quantity'] += (int) $row['quantity'];
             }
             if (!isset($groups[$row['id_attribute_group']])) {
                 $groups[$row['id_attribute_group']] = array('group_name' => $row['group_name'], 'name' => $row['public_group_name'], 'group_type' => $row['group_type'], 'default' => -1);
             }
             $groups[$row['id_attribute_group']]['attributes'][$row['id_attribute']] = array('name' => $row['attribute_name'], 'html_color_code' => $row['attribute_color'], 'texture' => @filemtime(_PS_COL_IMG_DIR_ . $row['id_attribute'] . '.jpg') ? _THEME_COL_DIR_ . $row['id_attribute'] . '.jpg' : '', 'selected' => isset($product_for_template['attributes'][$row['id_attribute_group']]['id_attribute']) && $product_for_template['attributes'][$row['id_attribute_group']]['id_attribute'] == $row['id_attribute'] ? true : false);
             //$product.attributes.$id_attribute_group.id_attribute eq $id_attribute
             if ($row['default_on'] && $groups[$row['id_attribute_group']]['default'] == -1) {
                 $groups[$row['id_attribute_group']]['default'] = (int) $row['id_attribute'];
             }
             if (!isset($groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']])) {
                 $groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']] = 0;
             }
             $groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']] += (int) $row['quantity'];
             $this->combinations[$row['id_product_attribute']]['attributes_values'][$row['id_attribute_group']] = $row['attribute_name'];
             $this->combinations[$row['id_product_attribute']]['attributes'][] = (int) $row['id_attribute'];
             $this->combinations[$row['id_product_attribute']]['price'] = (double) $row['price'];
             // Call getPriceStatic in order to set $combination_specific_price
             if (!isset($combination_prices_set[(int) $row['id_product_attribute']])) {
                 $combination_specific_price = null;
                 Product::getPriceStatic((int) $this->product->id, false, $row['id_product_attribute'], 6, null, false, true, 1, false, null, null, null, $combination_specific_price);
                 $combination_prices_set[(int) $row['id_product_attribute']] = true;
                 $this->combinations[$row['id_product_attribute']]['specific_price'] = $combination_specific_price;
             }
             $this->combinations[$row['id_product_attribute']]['ecotax'] = (double) $row['ecotax'];
             $this->combinations[$row['id_product_attribute']]['weight'] = (double) $row['weight'];
             $this->combinations[$row['id_product_attribute']]['quantity'] = (int) $row['quantity'];
             $this->combinations[$row['id_product_attribute']]['reference'] = $row['reference'];
             $this->combinations[$row['id_product_attribute']]['unit_impact'] = $row['unit_price_impact'];
             $this->combinations[$row['id_product_attribute']]['minimal_quantity'] = $row['minimal_quantity'];
             if ($row['available_date'] != '0000-00-00' && Validate::isDate($row['available_date'])) {
                 $this->combinations[$row['id_product_attribute']]['available_date'] = $row['available_date'];
                 $this->combinations[$row['id_product_attribute']]['date_formatted'] = Tools::displayDate($row['available_date']);
             } else {
                 $this->combinations[$row['id_product_attribute']]['available_date'] = $this->combinations[$row['id_product_attribute']]['date_formatted'] = '';
             }
             if (!isset($combination_images[$row['id_product_attribute']][0]['id_image'])) {
                 $this->combinations[$row['id_product_attribute']]['id_image'] = -1;
             } else {
                 $this->combinations[$row['id_product_attribute']]['id_image'] = $id_image = (int) $combination_images[$row['id_product_attribute']][0]['id_image'];
                 if ($row['default_on']) {
                     foreach ($this->context->smarty->tpl_vars['product']->value['images'] as $image) {
                         if ($image['cover'] == 1) {
                             $current_cover = $image;
                         }
                     }
                     if (!isset($current_cover)) {
                         $current_cover = array_values($this->context->smarty->tpl_vars['product']->value['images'])[0];
                     }
                     if (is_array($combination_images[$row['id_product_attribute']])) {
                         foreach ($combination_images[$row['id_product_attribute']] as $tmp) {
                             if ($tmp['id_image'] == $current_cover['id_image']) {
                                 $this->combinations[$row['id_product_attribute']]['id_image'] = $id_image = (int) $tmp['id_image'];
                                 break;
                             }
                         }
                     }
                     if ($id_image > 0) {
                         if (isset($this->context->smarty->tpl_vars['images']->value)) {
                             $product_images = $this->context->smarty->tpl_vars['images']->value;
                         }
                         if (isset($product_images) && is_array($product_images) && isset($product_images[$id_image])) {
                             $product_images[$id_image]['cover'] = 1;
                             $this->context->smarty->assign('mainImage', $product_images[$id_image]);
                             if (count($product_images)) {
                                 $this->context->smarty->assign('images', $product_images);
                             }
                         }
                         $cover = $current_cover;
                         if (isset($cover) && is_array($cover) && isset($product_images) && is_array($product_images)) {
                             $product_images[$cover['id_image']]['cover'] = 0;
                             if (isset($product_images[$id_image])) {
                                 $cover = $product_images[$id_image];
                             }
                             $cover['id_image'] = Configuration::get('PS_LEGACY_IMAGES') ? $this->product->id . '-' . $id_image : (int) $id_image;
                             $cover['id_image_only'] = (int) $id_image;
                             $this->context->smarty->assign('cover', $cover);
                         }
                     }
                 }
             }
         }
         // wash attributes list (if some attributes are unavailables and if allowed to wash it)
         if (!Product::isAvailableWhenOutOfStock($this->product->out_of_stock) && Configuration::get('PS_DISP_UNAVAILABLE_ATTR') == 0) {
             foreach ($groups as &$group) {
                 foreach ($group['attributes_quantity'] as $key => &$quantity) {
                     if ($quantity <= 0) {
                         unset($group['attributes'][$key]);
                     }
                 }
             }
             foreach ($colors as $key => $color) {
                 if ($color['attributes_quantity'] <= 0) {
                     unset($colors[$key]);
                 }
             }
         }
         foreach ($this->combinations as $id_product_attribute => $comb) {
             $attribute_list = '';
             foreach ($comb['attributes'] as $id_attribute) {
                 $attribute_list .= '\'' . (int) $id_attribute . '\',';
             }
             $attribute_list = rtrim($attribute_list, ',');
             $this->combinations[$id_product_attribute]['list'] = $attribute_list;
         }
         $this->context->smarty->assign(array('groups' => $groups, 'colors' => count($colors) ? $colors : false, 'combinations' => $this->combinations, 'combinationImages' => $combination_images));
     } else {
         $this->context->smarty->assign(array('groups' => array(), 'colors' => false, 'combinations' => array(), 'combinationImages' => array()));
     }
 }