public function ajaxProcessEditProductAttribute()
 {
     if ($this->tabAccess['edit'] === '1') {
         $id_product = (int) Tools::getValue('id_product');
         $id_product_attribute = (int) Tools::getValue('id_product_attribute');
         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);
             foreach ($combinations as $key => $combination) {
                 $combinations[$key]['minimal_quantity'] = $product->resolveBoMinQty($combination['minimal_quantity'], $combination['minimal_quantity_fractional']);
                 $combinations[$key]['attributes'][] = array($combination['group_name'], $combination['attribute_name'], $combination['id_attribute']);
             }
             die(Tools::jsonEncode($combinations));
         }
     }
 }
Example #2
0
    /**
     * Returns the product attribute combination by id_product_attribute.
     *
     * For PS 1.4 we need to query the combinations manually, while newer version of PS provide a handy getter.
     *
     * @param Product|ProductCore $product the product model.
     * @param int $id_product_attribute the product attribute ID.
     * @param int $id_lang the language ID.
     * @return array the attribute combinations.
     */
    protected function getProductAttributeCombinationsById($product, $id_product_attribute, $id_lang)
    {
        if (_PS_VERSION_ >= '1.5') {
            return $product->getAttributeCombinationsById($id_product_attribute, $id_lang);
        }
        return Db::getInstance()->ExecuteS('
			SELECT pa.*, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` group_name, al.`name` attribute_name, a.`id_attribute`, pa.`unit_price_impact`
			FROM `' . _DB_PREFIX_ . 'product_attribute` pa
			LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
			LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute`
			LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
			LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = ' . (int) $id_lang . ')
			LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = ' . (int) $id_lang . ')
			WHERE pa.`id_product` = ' . (int) $product->id . '
			AND pa.`id_product_attribute` = ' . (int) $id_product_attribute . '
			GROUP BY pa.`id_product_attribute`, ag.`id_attribute_group`
			ORDER BY pa.`id_product_attribute`');
    }
 public function ajaxProcessEditProductAttribute()
 {
     if ($this->access('edit')) {
         $id_product = (int) Tools::getValue('id_product');
         $id_product_attribute = (int) Tools::getValue('id_product_attribute');
         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);
             foreach ($combinations as $key => $combination) {
                 $combinations[$key]['attributes'][] = array($combination['group_name'], $combination['attribute_name'], $combination['id_attribute']);
             }
             die(json_encode($combinations));
         }
     }
 }
Example #4
0
 public static function indexation($id_product = false, $update = false)
 {
     $id_lang = Cmsearch::getLangId();
     $convermax = new ConvermaxAPI();
     if (!$id_product) {
         if (!$convermax->batchStart()) {
             return false;
         }
     }
     $start = 0;
     while ($products = Cmsearch::getProductsToIndex($id_lang, $start, 200, $id_product)) {
         $start = $start + 200;
         if (count($products) == 0) {
             break;
         }
         $products_array = array();
         $products_count = count($products);
         for ($i = 0; $i < $products_count; $i++) {
             if ($products[$i]['features']) {
                 foreach ($products[$i]['features'] as $feature) {
                     $f_name = 'f_' . $convermax->sanitize($feature['name']);
                     $products[$i][$f_name][] = $feature['value'];
                 }
                 unset($products[$i]['features']);
             }
             foreach ($products[$i] as $key => $val) {
                 if (is_array($val)) {
                     foreach ($val as $k => $v) {
                         if (is_array($v)) {
                             unset($products[$i][$key]);
                         }
                     }
                 }
             }
             $img_id = Product::getCover($products[$i]['id_product']);
             $link = new Link();
             $img_link = $link->getImageLink($products[$i]['link_rewrite'], $img_id['id_image'], ImageType::getFormatedName('small'));
             $products[$i]['img_link'] = str_replace(Tools::getHttpHost(), '', $img_link);
             $products[$i]['link'] = str_replace(Tools::getHttpHost(true), '', $products[$i]['link']);
             $cat_full = Product::getProductCategoriesFull($products[$i]['id_product']);
             $category_full = array();
             $home_category = Configuration::get('PS_HOME_CATEGORY');
             foreach ($cat_full as $cat) {
                 $category = new Category($cat['id_category']);
                 $categories = $category->getParentsCategories();
                 $c_full = array();
                 foreach ($categories as $cats) {
                     if ($cats['id_category'] != $home_category) {
                         $c_full[] = $cats['name'];
                     }
                 }
                 if (!empty($c_full)) {
                     $category_full[] = implode('>', array_reverse($c_full));
                 }
             }
             $products[$i]['category_full'] = $category_full;
             $products[$i]['ean13'] = array($products[$i]['ean13']);
             $products[$i]['upc'] = array($products[$i]['upc']);
             $products[$i]['reference'] = array($products[$i]['reference']);
             $products[$i]['supplier_reference'] = array($products[$i]['supplier_reference']);
             $product = new Product($products[$i]['id_product']);
             $combinations = Product::getProductAttributesIds($products[$i]['id_product']);
             $attribs = array();
             $ean13 = array();
             $upc = array();
             $reference = array();
             $supplier_reference = array();
             foreach ($combinations as $combination) {
                 $comb = $product->getAttributeCombinationsById($combination['id_product_attribute'], $id_lang);
                 foreach ($comb as $com) {
                     $a_name = 'a_' . $convermax->sanitize($com['group_name']);
                     if ($com['is_color_group'] == 1) {
                         $attribs[$a_name][] = $com['id_attribute'];
                     } else {
                         $attribs[$a_name][] = $com['attribute_name'];
                     }
                     if (!empty($com['ean13'])) {
                         $ean13[] = $com['ean13'];
                     }
                     if (!empty($com['upc'])) {
                         $upc[] = $com['upc'];
                     }
                     if (!empty($com['reference'])) {
                         $reference[] = $com['reference'];
                     }
                     if (!empty($com['supplier_reference'])) {
                         $supplier_reference[] = $com['supplier_reference'];
                     }
                 }
             }
             foreach ($attribs as $k => $v) {
                 $products[$i][$k] = array_values(array_unique($v));
             }
             if (!empty($ean13)) {
                 $products[$i]['ean13'] = array_merge((array) $products[$i]['ean13'], array_unique($ean13));
             }
             if (!empty($upc)) {
                 $products[$i]['upc'] = array_merge((array) $products[$i]['upc'], array_unique($upc));
             }
             if (!empty($reference)) {
                 $products[$i]['reference'] = array_merge((array) $products[$i]['reference'], array_unique($reference));
             }
             if (!empty($supplier_reference)) {
                 $products[$i]['supplier_reference'] = array_merge((array) $products[$i]['supplier_reference'], array_unique($supplier_reference));
             }
             if (!in_array($products[$i]['id_product'], $products_array)) {
                 $products_array[] = (int) $products[$i]['id_product'];
             }
         }
         if ($update) {
             if (!$convermax->update($products)) {
                 return false;
             }
         } elseif ($id_product) {
             if (!$convermax->add($products)) {
                 return false;
             }
         } elseif (!$convermax->batchAdd($products)) {
             return false;
         }
         if ($id_product) {
             break;
         }
     }
     if (!$id_product) {
         if (!$convermax->batchEnd()) {
             return false;
         }
     }
     return true;
 }