Example #1
0
 public function processProductAttribute()
 {
     // Don't process if the combination fields have not been submitted
     if (!Combination::isFeatureActive() || !Tools::getValue('attribute_combination_list')) {
         return;
     }
     if (Validate::isLoadedObject($product = $this->object)) {
         if ($this->isProductFieldUpdated('attribute_price') && (!Tools::getIsset('attribute_price') || Tools::getIsset('attribute_price') == null)) {
             $this->errors[] = Tools::displayError('The price attribute is required.');
         }
         if (!Tools::getIsset('attribute_combination_list') || Tools::isEmpty(Tools::getValue('attribute_combination_list'))) {
             $this->errors[] = Tools::displayError('You must add at least one attribute.');
         }
         $array_checks = array('reference' => 'isReference', 'supplier_reference' => 'isReference', 'location' => 'isReference', 'ean13' => 'isEan13', 'upc' => 'isUpc', 'wholesale_price' => 'isPrice', 'price' => 'isPrice', 'ecotax' => 'isPrice', 'quantity' => 'isInt', 'weight' => 'isUnsignedFloat', 'unit_price_impact' => 'isPrice', 'default_on' => 'isBool', 'minimal_quantity' => 'isUnsignedInt', 'available_date' => 'isDateFormat');
         foreach ($array_checks as $property => $check) {
             if (Tools::getValue('attribute_' . $property) !== false && !call_user_func(array('Validate', $check), Tools::getValue('attribute_' . $property))) {
                 $this->errors[] = sprintf(Tools::displayError('Field %s is not valid'), $property);
             }
         }
         if (!count($this->errors)) {
             if (!isset($_POST['attribute_wholesale_price'])) {
                 $_POST['attribute_wholesale_price'] = 0;
             }
             if (!isset($_POST['attribute_price_impact'])) {
                 $_POST['attribute_price_impact'] = 0;
             }
             if (!isset($_POST['attribute_weight_impact'])) {
                 $_POST['attribute_weight_impact'] = 0;
             }
             if (!isset($_POST['attribute_ecotax'])) {
                 $_POST['attribute_ecotax'] = 0;
             }
             if (Tools::getValue('attribute_default')) {
                 $product->deleteDefaultAttributes();
             }
             // Change existing one
             if (($id_product_attribute = (int) Tools::getValue('id_product_attribute')) || ($id_product_attribute = $product->productAttributeExists(Tools::getValue('attribute_combination_list'), false, null, true, true))) {
                 if ($this->tabAccess['edit'] === '1') {
                     if ($this->isProductFieldUpdated('available_date_attribute') && (Tools::getValue('available_date_attribute') != '' && !Validate::isDateFormat(Tools::getValue('available_date_attribute')))) {
                         $this->errors[] = Tools::displayError('Invalid date format.');
                     } else {
                         $product->updateAttribute((int) $id_product_attribute, $this->isProductFieldUpdated('attribute_wholesale_price') ? Tools::getValue('attribute_wholesale_price') : null, $this->isProductFieldUpdated('attribute_price_impact') ? Tools::getValue('attribute_price') * Tools::getValue('attribute_price_impact') : null, $this->isProductFieldUpdated('attribute_weight_impact') ? Tools::getValue('attribute_weight') * Tools::getValue('attribute_weight_impact') : null, $this->isProductFieldUpdated('attribute_unit_impact') ? Tools::getValue('attribute_unity') * Tools::getValue('attribute_unit_impact') : null, $this->isProductFieldUpdated('attribute_ecotax') ? Tools::getValue('attribute_ecotax') : null, Tools::getValue('id_image_attr'), Tools::getValue('attribute_reference'), Tools::getValue('attribute_ean13'), $this->isProductFieldUpdated('attribute_default') ? Tools::getValue('attribute_default') : null, Tools::getValue('attribute_location'), Tools::getValue('attribute_upc'), $this->isProductFieldUpdated('attribute_minimal_quantity') ? Tools::getValue('attribute_minimal_quantity') : null, $this->isProductFieldUpdated('available_date_attribute') ? Tools::getValue('available_date_attribute') : null, false);
                         StockAvailable::setProductDependsOnStock((int) $product->id, $product->depends_on_stock, null, (int) $id_product_attribute);
                         StockAvailable::setProductOutOfStock((int) $product->id, $product->out_of_stock, null, (int) $id_product_attribute);
                     }
                 } else {
                     $this->errors[] = Tools::displayError('You do not have permission to add this.');
                 }
             } else {
                 if ($this->tabAccess['add'] === '1') {
                     if ($product->productAttributeExists(Tools::getValue('attribute_combination_list'))) {
                         $this->errors[] = Tools::displayError('This combination already exists.');
                     } else {
                         $id_product_attribute = $product->addCombinationEntity(Tools::getValue('attribute_wholesale_price'), Tools::getValue('attribute_price') * Tools::getValue('attribute_price_impact'), Tools::getValue('attribute_weight') * Tools::getValue('attribute_weight_impact'), Tools::getValue('attribute_unity') * Tools::getValue('attribute_unit_impact'), Tools::getValue('attribute_ecotax'), 0, Tools::getValue('id_image_attr'), Tools::getValue('attribute_reference'), null, Tools::getValue('attribute_ean13'), Tools::getValue('attribute_default'), Tools::getValue('attribute_location'), Tools::getValue('attribute_upc'), Tools::getValue('attribute_minimal_quantity'), array(), Tools::getValue('available_date_attribute'));
                         StockAvailable::setProductDependsOnStock((int) $product->id, $product->depends_on_stock, null, (int) $id_product_attribute);
                         StockAvailable::setProductOutOfStock((int) $product->id, $product->out_of_stock, null, (int) $id_product_attribute);
                     }
                 } else {
                     $this->errors[] = Tools::displayError('You do not have permission to') . '<hr>' . Tools::displayError('edit here.');
                 }
             }
             if (!count($this->errors)) {
                 $combination = new Combination((int) $id_product_attribute);
                 $combination->setAttributes(Tools::getValue('attribute_combination_list'));
                 // images could be deleted before
                 $id_images = Tools::getValue('id_image_attr');
                 if (!empty($id_images)) {
                     $combination->setImages($id_images);
                 }
                 $product->checkDefaultAttributes();
                 if (Tools::getValue('attribute_default')) {
                     Product::updateDefaultAttribute((int) $product->id);
                     if (isset($id_product_attribute)) {
                         $product->cache_default_attribute = (int) $id_product_attribute;
                     }
                     if ($available_date = Tools::getValue('available_date_attribute')) {
                         $product->setAvailableDate($available_date);
                     }
                 }
             }
         }
     }
 }
Example #2
0
 /**
  * Add a product attribute
  * @since 1.5.0.1
  *
  * @param float $price Additional price
  * @param float $weight Additional weight
  * @param float $ecotax Additional ecotax
  * @param integer $id_images Image ids
  * @param string $reference Reference
  * @param string $location Location
  * @param string $ean13 Ean-13 barcode
  * @param boolean $default Is default attribute for product
  * @param integer $minimal_quantity Minimal quantity to add to cart
  * @return mixed $id_product_attribute or false
  */
 public function addAttribute($price, $weight, $unit_impact, $ecotax, $id_images, $reference, $ean13, $default, $location = null, $upc = null, $minimal_quantity = 1, array $id_shop_list = array())
 {
     if (!$this->id) {
         return;
     }
     $price = str_replace(',', '.', $price);
     $weight = str_replace(',', '.', $weight);
     $combination = new Combination();
     $combination->id_product = (int) $this->id;
     $combination->price = (double) $price;
     $combination->ecotax = (double) $ecotax;
     $combination->quantity = 0;
     $combination->weight = (double) $weight;
     $combination->unit_price_impact = (double) $unit_impact;
     $combination->reference = pSQL($reference);
     $combination->location = pSQL($location);
     $combination->ean13 = pSQL($ean13);
     $combination->upc = pSQL($upc);
     $combination->default_on = (int) $default;
     $combination->minimal_quantity = (int) $minimal_quantity;
     // if we add a combination for this shop and this product does not use the combination feature in other shop,
     // we clone the default combination in every shop linked to this product
     if ($default && !$this->hasAttributesInOtherShops()) {
         $id_shop_list_array = Product::getShopsByProduct($this->id);
         foreach ($id_shop_list_array as $array_shop) {
             $id_shop_list[] = $array_shop['id_shop'];
         }
     }
     if (count($id_shop_list)) {
         $combination->id_shop_list = $id_shop_list;
     }
     $combination->add();
     if (!$combination->id) {
         return false;
     }
     Product::updateDefaultAttribute($this->id);
     if (!empty($id_images)) {
         $combination->setImages($id_images);
     }
     return (int) $combination->id;
 }
 /**
  * Add a product attribute
  * @since 1.5.0.1
  *
  * @param float $price Additional price
  * @param float $weight Additional weight
  * @param float $ecotax Additional ecotax
  * @param integer $id_images Image ids
  * @param string $reference Reference
  * @param string $location Location
  * @param string $ean13 Ean-13 barcode
  * @param boolean $default Is default attribute for product
  * @param integer $minimal_quantity Minimal quantity to add to cart
  * @return mixed $id_product_attribute or false
  */
 public function addAttribute($price, $weight, $unit_impact, $ecotax, $id_images, $reference, $ean13, $default, $location = null, $upc = null, $minimal_quantity = 1, array $id_shop_list = array(), $available_date = null)
 {
     if (!$this->id) {
         return;
     }
     $price = str_replace(',', '.', $price);
     $weight = str_replace(',', '.', $weight);
     $combination = new Combination();
     $combination->id_product = (int) $this->id;
     $combination->price = (double) $price;
     $combination->ecotax = (double) $ecotax;
     $combination->quantity = 0;
     $combination->weight = (double) $weight;
     $combination->unit_price_impact = (double) $unit_impact;
     $combination->reference = pSQL($reference);
     $combination->location = pSQL($location);
     $combination->ean13 = pSQL($ean13);
     $combination->upc = pSQL($upc);
     $combination->default_on = (int) $default;
     $combination->minimal_quantity = (int) $minimal_quantity;
     $combination->available_date = $available_date;
     if (count($id_shop_list)) {
         $combination->id_shop_list = array_unique($id_shop_list);
     }
     $combination->add();
     if (!$combination->id) {
         return false;
     }
     $id_default_attribute = Product::updateDefaultAttribute($this->id);
     if ($id_default_attribute) {
         $this->cache_default_attribute = $id_default_attribute;
     }
     if (!empty($id_images)) {
         $combination->setImages($id_images);
     }
     Tools::clearColorListCache($this->id);
     return (int) $combination->id;
 }
Example #4
0
    /**
     * Add a product attribute
     * @since 1.5.0.1
     *
     * @param float $price Additional price
     * @param float $weight Additional weight
     * @param float $ecotax Additional ecotax
     * @param int $id_images Image ids
     * @param string $reference Reference
     * @param string $location Location
     * @param string $ean13 Ean-13 barcode
     * @param bool $default Is default attribute for product
     * @param int $minimal_quantity Minimal quantity to add to cart
     * @return mixed $id_product_attribute or false
     */
    public function addAttribute($price, $weight, $unit_impact, $ecotax, $id_images, $reference, $ean13, $default, $location = null, $upc = null, $minimal_quantity = 1, array $id_shop_list = array(), $available_date = null)
    {
        if (!$this->id) {
            return;
        }
        $price = str_replace(',', '.', $price);
        $weight = str_replace(',', '.', $weight);
        $combination = new Combination();
        $combination->id_product = (int) $this->id;
        $combination->price = (double) $price;
        $combination->ecotax = (double) $ecotax;
        $combination->quantity = 0;
        $combination->weight = (double) $weight;
        $combination->unit_price_impact = (double) $unit_impact;
        $combination->reference = pSQL($reference);
        $combination->location = pSQL($location);
        $combination->ean13 = pSQL($ean13);
        $combination->upc = pSQL($upc);
        $combination->default_on = (int) $default;
        $combination->minimal_quantity = (int) $minimal_quantity;
        $combination->available_date = $available_date;
        if (count($id_shop_list)) {
            $combination->id_shop_list = array_unique($id_shop_list);
        }
        $combination->add();
        if (!$combination->id) {
            return false;
        }
        $total_quantity = (int) Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
			SELECT SUM(quantity) as quantity
			FROM ' . _DB_PREFIX_ . 'stock_available
			WHERE id_product = ' . (int) $this->id . '
			AND id_product_attribute <> 0 ');
        if (!$total_quantity) {
            Db::getInstance()->update('stock_available', array('quantity' => 0), '`id_product` = ' . $this->id);
        }
        $id_default_attribute = Product::updateDefaultAttribute($this->id);
        if ($id_default_attribute) {
            $this->cache_default_attribute = $id_default_attribute;
            if (!$combination->available_date) {
                $this->setAvailableDate();
            }
        }
        if (!empty($id_images)) {
            $combination->setImages($id_images);
        }
        Tools::clearColorListCache($this->id);
        if (Configuration::get('PS_DEFAULT_WAREHOUSE_NEW_PRODUCT') != 0 && Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')) {
            $warehouse_location_entity = new WarehouseProductLocation();
            $warehouse_location_entity->id_product = $this->id;
            $warehouse_location_entity->id_product_attribute = (int) $combination->id;
            $warehouse_location_entity->id_warehouse = Configuration::get('PS_DEFAULT_WAREHOUSE_NEW_PRODUCT');
            $warehouse_location_entity->location = pSQL('');
            $warehouse_location_entity->save();
        }
        return (int) $combination->id;
    }
 protected function importProductsAttributes()
 {
     $this->truncateTables(array('product_attribute', 'product_attribute_combination', 'product_attribute_shop', 'product_attribute_image'));
     $handle = $this->openCsvFile('product_attributes.csv');
     for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, ';'); $current_line++) {
         $res = false;
         $fields = $this->filterFields('Combination', $this->product_attribute_fields, $line);
         if (!isset($fields['id'])) {
             $attribute = new Combination($line[0]);
             $attribute->id = $line[0];
         } else {
             $attribute = new Combination($fields['id']);
         }
         foreach ($fields as $key => $field) {
             $attribute->{$key} = $field;
         }
         // add attribute values in ps_product_attribute_combination
         if ($line[16]) {
             $values = explode(',', $line[16]);
             $attribute->setAttributes($values);
         }
         // add attribute images to ps_product_attribute_image
         if ($line[17]) {
             $images = explode(',', $line[17]);
             $attribute->setImages($images);
         }
         $attribute->force_id = true;
         if (!$res) {
             $res = $attribute->add();
         }
     }
     $this->closeCsvFile($handle);
     return true;
 }