Example #1
0
    public static function getProductsAlerts($id_customer, $id_lang)
    {
        if (!Validate::isUnsignedId($id_customer) or !Validate::isUnsignedId($id_lang)) {
            die(Tools::displayError());
        }
        $products = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
			SELECT ma.`id_product`, p.`quantity` AS product_quantity, pl.`name`, ma.`id_product_attribute`
			FROM `' . _DB_PREFIX_ . 'mailalert_customer_oos` ma
			JOIN `' . _DB_PREFIX_ . 'product` p ON p.`id_product` = ma.`id_product`
			JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON pl.`id_product` = ma.`id_product`
			WHERE ma.`id_customer` = ' . (int) $id_customer . '
			AND pl.`id_lang` = ' . (int) $id_lang);
        if (empty($products) === true or !sizeof($products)) {
            return array();
        }
        for ($i = 0; $i < sizeof($products); ++$i) {
            $obj = new Product((int) $products[$i]['id_product'], false, (int) $id_lang);
            if (!Validate::isLoadedObject($obj)) {
                continue;
            }
            if (isset($products[$i]['id_product_attribute']) and Validate::isUnsignedInt($products[$i]['id_product_attribute'])) {
                $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
					SELECT al.`name` AS attribute_name
					FROM `' . _DB_PREFIX_ . 'product_attribute_combination` pac
					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 . ')
					LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute` pa ON (pac.`id_product_attribute` = pa.`id_product_attribute`)
					WHERE pac.`id_product_attribute` = ' . (int) $products[$i]['id_product_attribute']);
                $products[$i]['attributes_small'] = '';
                if ($result) {
                    foreach ($result as $k => $row) {
                        $products[$i]['attributes_small'] .= $row['attribute_name'] . ', ';
                    }
                }
                $products[$i]['attributes_small'] = rtrim($products[$i]['attributes_small'], ', ');
                // cover
                $attrgrps = $obj->getAttributesGroups((int) $id_lang);
                foreach ($attrgrps as $attrgrp) {
                    if ($attrgrp['id_product_attribute'] == (int) $products[$i]['id_product_attribute'] and $images = Product::_getAttributeImageAssociations((int) $attrgrp['id_product_attribute'])) {
                        $products[$i]['cover'] = $obj->id . '-' . array_pop($images);
                        break;
                    }
                }
            }
            if (!isset($products[$i]['cover']) or !$products[$i]['cover']) {
                $images = $obj->getImages((int) $id_lang);
                foreach ($images as $k => $image) {
                    if ($image['cover']) {
                        $products[$i]['cover'] = $obj->id . '-' . $image['id_image'];
                        break;
                    }
                }
            }
            if (!isset($products[$i]['cover'])) {
                $products[$i]['cover'] = Language::getIsoById($id_lang) . '-default';
            }
            $products[$i]['link'] = $obj->getLink();
            $products[$i]['link_rewrite'] = $obj->link_rewrite;
        }
        return $products;
    }
Example #2
0
    /**
     * Duplicate attributes when duplicating a product
     *
     * @param integer $id_product_old Old product id
     * @param integer $id_product_new New product id
     */
    public static function duplicateAttributes($id_product_old, $id_product_new)
    {
        $return = true;
        $combination_images = array();
        $result = Db::getInstance()->executeS('
		SELECT *
			FROM `' . _DB_PREFIX_ . 'product_attribute` pa
			WHERE pa.`id_product` = ' . (int) $id_product_old);
        foreach ($result as $row) {
            $id_product_attribute_old = (int) $row['id_product_attribute'];
            $result2 = Db::getInstance()->executeS('
			SELECT *
			FROM `' . _DB_PREFIX_ . 'product_attribute_combination`
				WHERE `id_product_attribute` = ' . $id_product_attribute_old);
            $row['id_product'] = $id_product_new;
            unset($row['id_product_attribute']);
            $combination = new Combination();
            foreach ($row as $k => $v) {
                $combination->{$k} = $v;
            }
            $return &= $combination->add();
            $id_product_attribute_new = (int) $combination->id;
            if ($result_images = Product::_getAttributeImageAssociations($id_product_attribute_old)) {
                $combination_images['old'][$id_product_attribute_old] = $result_images;
                $combination_images['new'][$id_product_attribute_new] = $result_images;
            }
            foreach ($result2 as $row2) {
                $row2['id_product_attribute'] = $id_product_attribute_new;
                $return &= Db::getInstance()->insert('product_attribute_combination', $row2);
            }
        }
        return !$return ? false : $combination_images;
    }
Example #3
0
    /**
     * Duplicate attributes when duplicating a product
     *
     * @param integer $id_product_old Old product id
     * @param integer $id_product_new New product id
     */
    public static function duplicateAttributes($id_product_old, $id_product_new)
    {
        $return = true;
        $combination_images = array();
        $result = Db::getInstance()->executeS('
		SELECT pa.*, product_attribute_shop.*
			FROM `' . _DB_PREFIX_ . 'product_attribute` pa
			' . Shop::addSqlAssociation('product_attribute', 'pa') . '
			WHERE pa.`id_product` = ' . (int) $id_product_old);
        $combinations = array();
        foreach ($result as $row) {
            $id_product_attribute_old = (int) $row['id_product_attribute'];
            if (!isset($combinations[$id_product_attribute_old])) {
                $id_combination = null;
                $id_shop = null;
                $result2 = Db::getInstance()->executeS('
				SELECT *
				FROM `' . _DB_PREFIX_ . 'product_attribute_combination`
					WHERE `id_product_attribute` = ' . $id_product_attribute_old);
            } else {
                $id_combination = (int) $combinations[$id_product_attribute_old];
                $id_shop = (int) $row['id_shop'];
                $context_old = Shop::getContext();
                $context_shop_id_old = Shop::getContextShopID();
                Shop::setContext(Shop::CONTEXT_SHOP, $id_shop);
            }
            $row['id_product'] = $id_product_new;
            unset($row['id_product_attribute']);
            $combination = new Combination($id_combination, null, $id_shop);
            foreach ($row as $k => $v) {
                $combination->{$k} = $v;
            }
            $return &= $combination->save();
            $id_product_attribute_new = (int) $combination->id;
            if ($result_images = Product::_getAttributeImageAssociations($id_product_attribute_old)) {
                $combination_images['old'][$id_product_attribute_old] = $result_images;
                $combination_images['new'][$id_product_attribute_new] = $result_images;
            }
            if (!isset($combinations[$id_product_attribute_old])) {
                $combinations[$id_product_attribute_old] = (int) $id_product_attribute_new;
                foreach ($result2 as $row2) {
                    $row2['id_product_attribute'] = $id_product_attribute_new;
                    $return &= Db::getInstance()->insert('product_attribute_combination', $row2);
                }
            } else {
                Shop::setContext($context_old, $context_shop_id_old);
            }
        }
        return !$return ? false : $combination_images;
    }
Example #4
0
    /**
     * Duplicate attributes when duplicating a product
     *
     * @param int $id_product_old Old product id
     * @param int $id_product_new New product id
     */
    public static function duplicateAttributes($id_product_old, $id_product_new)
    {
        $return = true;
        $combination_images = array();
        $result = Db::getInstance()->executeS('
		SELECT pa.*, product_attribute_shop.*
			FROM `' . _DB_PREFIX_ . 'product_attribute` pa
			' . Shop::addSqlAssociation('product_attribute', 'pa') . '
			WHERE pa.`id_product` = ' . (int) $id_product_old);
        $combinations = array();
        foreach ($result as $row) {
            $id_product_attribute_old = (int) $row['id_product_attribute'];
            if (!isset($combinations[$id_product_attribute_old])) {
                $id_combination = null;
                $id_shop = null;
                $result2 = Db::getInstance()->executeS('
				SELECT *
				FROM `' . _DB_PREFIX_ . 'product_attribute_combination`
					WHERE `id_product_attribute` = ' . $id_product_attribute_old);
            } else {
                $id_combination = (int) $combinations[$id_product_attribute_old];
                $id_shop = (int) $row['id_shop'];
                $context_old = Shop::getContext();
                $context_shop_id_old = Shop::getContextShopID();
                Shop::setContext(Shop::CONTEXT_SHOP, $id_shop);
            }
            $row['id_product'] = $id_product_new;
            unset($row['id_product_attribute']);
            $combination = new Combination($id_combination, null, $id_shop);
            foreach ($row as $k => $v) {
                $combination->{$k} = $v;
            }
            $return &= $combination->save();
            $id_product_attribute_new = (int) $combination->id;
            if ($result_images = Product::_getAttributeImageAssociations($id_product_attribute_old)) {
                $combination_images['old'][$id_product_attribute_old] = $result_images;
                $combination_images['new'][$id_product_attribute_new] = $result_images;
            }
            if (!isset($combinations[$id_product_attribute_old])) {
                $combinations[$id_product_attribute_old] = (int) $id_product_attribute_new;
                foreach ($result2 as $row2) {
                    $row2['id_product_attribute'] = $id_product_attribute_new;
                    $return &= Db::getInstance()->insert('product_attribute_combination', $row2);
                }
            } else {
                Shop::setContext($context_old, $context_shop_id_old);
            }
            //Copy suppliers
            $result3 = Db::getInstance()->executeS('
			SELECT *
			FROM `' . _DB_PREFIX_ . 'product_supplier`
			WHERE `id_product_attribute` = ' . (int) $id_product_attribute_old . '
			AND `id_product` = ' . (int) $id_product_old);
            foreach ($result3 as $row3) {
                unset($row3['id_product_supplier']);
                $row3['id_product'] = $id_product_new;
                $row3['id_product_attribute'] = $id_product_attribute_new;
                $return &= Db::getInstance()->insert('product_supplier', $row3);
            }
        }
        $impacts = self::getAttributesImpacts($id_product_old);
        if (is_array($impacts) && count($impacts)) {
            $impact_sql = 'INSERT INTO `' . _DB_PREFIX_ . 'attribute_impact` (`id_product`, `id_attribute`, `weight`, `price`) VALUES ';
            foreach ($impacts as $id_attribute => $impact) {
                $impact_sql .= '(' . (int) $id_product_new . ', ' . (int) $id_attribute . ', ' . (double) $impacts[$id_attribute]['weight'] . ', ' . (double) $impacts[$id_attribute]['price'] . '),';
            }
            $impact_sql = substr_replace($impact_sql, '', -1);
            $impact_sql .= ' ON DUPLICATE KEY UPDATE `price` = VALUES(price), `weight` = VALUES(weight)';
            Db::getInstance()->execute($impact_sql);
        }
        return !$return ? false : $combination_images;
    }
Example #5
0
 public static function getMailAlerts($id_customer, $id_lang, Shop $shop = null)
 {
     if (!Validate::isUnsignedId($id_customer) || !Validate::isUnsignedId($id_lang)) {
         die(Tools::displayError());
     }
     if (!$shop) {
         $shop = Context::getContext()->shop;
     }
     $customer = new Customer($id_customer);
     $products = MailAlert::getProducts($customer, $id_lang);
     $products_number = count($products);
     if (empty($products) === true || !$products_number) {
         return array();
     }
     for ($i = 0; $i < $products_number; ++$i) {
         $obj = new Product((int) $products[$i]['id_product'], false, (int) $id_lang);
         if (!Validate::isLoadedObject($obj)) {
             continue;
         }
         if (isset($products[$i]['id_product_attribute']) && Validate::isUnsignedInt($products[$i]['id_product_attribute'])) {
             $attributes = self::getProductAttributeCombination($products[$i]['id_product_attribute'], $id_lang);
             $products[$i]['attributes_small'] = '';
             if ($attributes) {
                 foreach ($attributes as $k => $row) {
                     $products[$i]['attributes_small'] .= $row['attribute_name'] . ', ';
                 }
             }
             $products[$i]['attributes_small'] = rtrim($products[$i]['attributes_small'], ', ');
             $products[$i]['id_shop'] = $shop->id;
             /* Get cover */
             $attrgrps = $obj->getAttributesGroups((int) $id_lang);
             foreach ($attrgrps as $attrgrp) {
                 if ($attrgrp['id_product_attribute'] == (int) $products[$i]['id_product_attribute'] && ($images = Product::_getAttributeImageAssociations((int) $attrgrp['id_product_attribute']))) {
                     $products[$i]['cover'] = $obj->id . '-' . array_pop($images);
                     break;
                 }
             }
         }
         if (!isset($products[$i]['cover']) || !$products[$i]['cover']) {
             $images = $obj->getImages((int) $id_lang);
             foreach ($images as $k => $image) {
                 if ($image['cover']) {
                     $products[$i]['cover'] = $obj->id . '-' . $image['id_image'];
                     break;
                 }
             }
         }
         if (!isset($products[$i]['cover'])) {
             $products[$i]['cover'] = Language::getIsoById($id_lang) . '-default';
         }
         $products[$i]['link'] = $obj->getLink();
         $products[$i]['link_rewrite'] = $obj->link_rewrite;
     }
     return $products;
 }