public function addFeaturesToDB($id_feature, $id_value, $cust = 0) { if ($cust) { $row = array('id_feature' => (int) $id_feature, 'custom' => 1); Db::getInstance()->insert('feature_value', $row); $id_value = Db::getInstance()->Insert_ID(); } $row = array('id_feature' => (int) $id_feature, 'id_product' => (int) $this->id, 'id_feature_value' => (int) $id_value); Db::getInstance()->insert('feature_product', $row); SpecificPriceRule::applyAllRules(array((int) $this->id)); if ($id_value) { return $id_value; } }
public function add($autodate = true, $null_values = false) { if (!parent::add($autodate, $null_values)) { return false; } $product = new Product((int) $this->id_product); if ($product->getType() == Product::PTYPE_VIRTUAL) { StockAvailable::setProductOutOfStock((int) $this->id_product, 1, null, (int) $this->id); } else { StockAvailable::setProductOutOfStock((int) $this->id_product, StockAvailable::outOfStock((int) $this->id_product), null, $this->id); } SpecificPriceRule::applyAllRules(array((int) $this->id_product)); return true; }
public function processGenerate() { if (!is_array(Tools::getValue('options'))) { $this->errors[] = Tools::displayError('Please select at least one attribute.'); } else { $tab = array_values(Tools::getValue('options')); if (count($tab) && Validate::isLoadedObject($this->product)) { AdminAttributeGeneratorController::setAttributesImpacts($this->product->id, $tab); $this->combinations = array_values(AdminAttributeGeneratorController::createCombinations($tab)); $values = array_values(array_map(array($this, 'addAttribute'), $this->combinations)); // @since 1.5.0 if ($this->product->depends_on_stock == 0) { $attributes = Product::getProductAttributesIds($this->product->id, true); foreach ($attributes as $attribute) { StockAvailable::removeProductFromStockAvailable($this->product->id, $attribute['id_product_attribute'], Context::getContext()->shop); } } SpecificPriceRule::disableAnyApplication(); $this->product->deleteProductAttributes(); $this->product->generateMultipleCombinations($values, $this->combinations); // @since 1.5.0 if ($this->product->depends_on_stock == 0) { $attributes = Product::getProductAttributesIds($this->product->id, true); $quantity = str_replace(',', '.', Tools::getValue('quantity')); foreach ($attributes as $attribute) { StockAvailable::setQuantity($this->product->id, $attribute['id_product_attribute'], $quantity); } } else { StockAvailable::synchronize($this->product->id); } SpecificPriceRule::enableAnyApplication(); SpecificPriceRule::applyAllRules(array((int) $this->product->id)); Tools::redirectAdmin($this->context->link->getAdminLink('AdminProducts') . '&id_product=' . (int) Tools::getValue('id_product') . '&updateproduct&key_tab=Combinations&conf=4'); } else { $this->errors[] = Tools::displayError('Unable to initialize these parameters. A combination is missing or an object cannot be loaded.'); } } }
public function processGenerate() { if (!is_array(Tools::getValue('options'))) { $this->errors[] = $this->trans('Please select at least one attribute.', array(), 'Admin.Catalog.Notification'); } else { $tab = array_values(Tools::getValue('options')); if (count($tab) && Validate::isLoadedObject($this->product)) { AdminAttributeGeneratorController::setAttributesImpacts($this->product->id, $tab); $this->combinations = array_values(AdminAttributeGeneratorController::createCombinations($tab)); $values = array_values(array_map(array($this, 'addAttribute'), $this->combinations)); // @since 1.5.0 if ($this->product->depends_on_stock == 0) { $attributes = Product::getProductAttributesIds($this->product->id, true); foreach ($attributes as $attribute) { StockAvailable::removeProductFromStockAvailable($this->product->id, $attribute['id_product_attribute'], Context::getContext()->shop); } } SpecificPriceRule::disableAnyApplication(); $this->product->deleteProductAttributes(); $this->product->generateMultipleCombinations($values, $this->combinations); // Reset cached default attribute for the product and get a new one Product::getDefaultAttribute($this->product->id, 0, true); Product::updateDefaultAttribute($this->product->id); // @since 1.5.0 if ($this->product->depends_on_stock == 0) { $attributes = Product::getProductAttributesIds($this->product->id, true); $quantity = (int) Tools::getValue('quantity'); foreach ($attributes as $attribute) { if (Shop::getContext() == Shop::CONTEXT_ALL) { $shops_list = Shop::getShops(); if (is_array($shops_list)) { foreach ($shops_list as $current_shop) { if (isset($current_shop['id_shop']) && (int) $current_shop['id_shop'] > 0) { StockAvailable::setQuantity($this->product->id, (int) $attribute['id_product_attribute'], $quantity, (int) $current_shop['id_shop']); } } } } else { StockAvailable::setQuantity($this->product->id, (int) $attribute['id_product_attribute'], $quantity); } } } else { StockAvailable::synchronize($this->product->id); } SpecificPriceRule::enableAnyApplication(); SpecificPriceRule::applyAllRules(array((int) $this->product->id)); Tools::redirectAdmin($this->context->link->getAdminLink('AdminProducts') . '&id_product=' . (int) Tools::getValue('id_product') . '&updateproduct&key_tab=Combinations&conf=4'); } else { $this->errors[] = $this->trans('Unable to initialize these parameters. A combination is missing or an object cannot be loaded.'); } } }
public function hookDisplayProductDeliveryTime($params) { $product = $params['product']; $id_lang = Context::getContext()->language->id; $file = dirname(__FILE__) . '/content/' . $product->id . '_c.html'; $fileu = dirname(__FILE__) . '/content/' . $product->id . '_u.html'; $content = ''; if (Tools::getValue("u", false) !== false) { $url = Tools::getValue('url'); if (Tools::getValue('url', false) !== false) { if ($url != '') { file_put_contents($fileu, $url); } $url = file_get_contents($fileu); if ($url != '') { $content = $this->getProductContent($url); file_put_contents($file, $content); $messages[] = "load from url"; } else { $messages[] = "Error: url not found"; } } if ($content == '') { $messages[] = "update content"; $content = file_get_contents($file); } $query = "//select[@id='sku-variants']/option"; $dom = new DomDocument(); libxml_use_internal_errors(true); $dom->loadHTML($content); $xpath = new DomXPath($dom); $nodes = $xpath->query($query); if ($nodes->length == 0) { // update only base price $query = "string(//div[@id='price-container']/span/text())"; $price = $xpath->evaluate($query); $query = "string(//div[@id='price-container']/del/text())"; $oldprice = $xpath->evaluate($query); $price = preg_replace("/[^0-9]/", '', $price); $oldprice = preg_replace("/[^0-9]/", '', $oldprice); if ($price == "" && $oldprice == "") { $tab[0] = array(); $combinations = 0; $query = "string(//div[@id='complectData']/text())"; $node = $xpath->evaluate($query); $product_data = json_decode($node); $offers = $product_data->items[0]->OFFERS; //array_multisort($offers['BASE_PRICE'], SORT_ASC); foreach ($offers as $offer) { $size = $offer->SHIRINA . '×' . $offer->DLINA; $id_attr = egormprod::getAttributeId($size); if ($id_attr) { $tab[0][] = $id_attr; $prices[] = $offer->BASE_PRICE; } else { $messages[] = "Error: size " . $size . " not found "; } } array_multisort($prices, SORT_ASC, SORT_NUMERIC, $tab[0]); $this->basePrice = $prices[0]; foreach ($prices as $key => $price_tmp) { $prices[$key] = $price_tmp - $this->basePrice; } $this->updateProductBasePrice($product->id); egormprod::setAttributesImpacts($product->id, $tab); //AdminAttributeGeneratorController::setAttributesImpacts($product->id, $tab); $combinations = $this->getCombination($tab); $values = $this->getMap($product->id, $combinations, $prices); //array_values(array_map(array($this, 'addAttribute'), $this->combinations)); SpecificPriceRule::disableAnyApplication(); $product->deleteProductAttributes(); $product->generateMultipleCombinations($values, $combinations); SpecificPriceRule::enableAnyApplication(); SpecificPriceRule::applyAllRules(array((int) $product->id)); $messageTextErr = ""; foreach ($messages as $message) { $messageTextErr .= $message . "\\r\\n"; } } else { // pillows $this->basePrice = $oldprice > 0 ? $oldprice : $price; $this->updateProductBasePrice($product->id); } } else { $tab[0] = array(); $combinations = 0; foreach ($nodes as $key => $node) { $product_data = json_decode($node->getAttribute('data-price')); if ($key == 0) { $this->basePrice = $product_data->VALUE; } $f1 = json_decode($node->getAttribute('data-cases')); $size = str_replace(' ', '', $node->getAttribute('value')); $id_attr = egormprod::getAttributeId($size); if ($id_attr) { $tab[0][] = $id_attr; $prices[] = $product_data->VALUE - $this->basePrice; } else { $messages[] = "Error: size " . $size . " not found "; } } $this->updateProductBasePrice($product->id); egormprod::setAttributesImpacts($product->id, $tab); //AdminAttributeGeneratorController::setAttributesImpacts($product->id, $tab); $combinations = $this->getCombination($tab); $values = $this->getMap($product->id, $combinations, $prices); //array_values(array_map(array($this, 'addAttribute'), $this->combinations)); SpecificPriceRule::disableAnyApplication(); $product->deleteProductAttributes(); $product->generateMultipleCombinations($values, $combinations); SpecificPriceRule::enableAnyApplication(); SpecificPriceRule::applyAllRules(array((int) $product->id)); $messageTextErr = ""; foreach ($messages as $message) { $messageTextErr .= $message . "\\r\\n"; } } } if (Tools::getValue("admin", false) !== false) { $f = 1; $this->context->cookie->__set('a', 1); } if (Tools::getValue("admin") == "-1") { $f = 1; $this->context->cookie->__unset('a'); } if ($this->context->cookie->__isset('a')) { $url = file_get_contents($fileu); $this->smarty->assign(array('messageTextErr' => $messageTextErr, 'url' => $url)); return $this->display(__FILE__, 'up.tpl'); } }
protected function importProducts() { $this->truncateTables(array('product', 'product_lang', 'product_shop', 'product_sale', 'product_supplier', 'product_tag', 'feature_product', 'category_product', 'product_carrier', 'compare_product', 'product_attachment', 'product_country_tax', 'product_download', 'product_group_reduction_cache', 'scene_products', 'warehouse_product_location', 'customization', 'customization_field', 'customization_field_lang', 'supply_order_detail', 'attribute_impact', 'pack')); $handle = $this->openCsvFile('products.csv'); $languages = Language::getLanguages(false); for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, ';'); $current_line++) { $res = false; $product = new Product((int) $line[0]); $product->id = (int) $line[0]; $product->active = $line[1]; foreach ($languages as $lang) { $product->name[$lang['id_lang']] = $line['2']; } $categories = explode(',', $line[3]); $product->id_category_default = $categories[0] ? $categories[0] : Configuration::get('PS_HOME_CATEGORY'); if (isset($categories) && $categories && count($categories)) { $product->addToCategories($categories); } if (isset($line[4])) { $product->price_tex = $line[4]; } if (isset($line[5])) { $product->price_tin = $line[5]; } $product->id_tax_rules_group = trim($line[6]) ? $line[6] : 0; $product->wholesale_price = trim($line[7]) ? $line[7] : 0; $product->on_sale = trim($line[8]) ? $line[8] : 0; if (trim($line[13])) { $product->reference = $line[13]; } if (trim($line[14])) { $product->supplier_reference = trim($line[14]); } if (trim($line[15])) { $product->id_supplier = (int) $line[15]; } if (isset($product->id) && $product->id && isset($product->id_supplier) && property_exists($product, 'supplier_reference')) { $id_product_supplier = (int) ProductSupplier::getIdByProductAndSupplier((int) $product->id, 0, (int) $product->id_supplier); if ($id_product_supplier) { $product_supplier = new ProductSupplier($id_product_supplier); } else { $product_supplier = new ProductSupplier(); } $product_supplier->id_product = (int) $product->id; $product_supplier->id_product_attribute = 0; $product_supplier->id_supplier = (int) $product->id_supplier; $product_supplier->product_supplier_price_te = $product->wholesale_price; $product_supplier->product_supplier_reference = $product->supplier_reference; $product_supplier->save(); } if (trim($line[16])) { $product->id_manufacturer = $line[16]; } if (!Tools::isEmpty(trim($line[17]))) { $product->ean13 = $line[17]; } if (trim($line[18])) { $product->upc = $line[18]; } if (trim($line[19])) { $product->ecotax = $line[19]; } $product->width = $line[20]; $product->height = $line[21]; $product->depth = $line[22]; $product->weight = $line[23]; if ($line[24]) { StockAvailable::setQuantity((int) $product->id, 0, (int) $line[24], (int) $this->context->shop->id); } $product->minimal_quantity = $line[25]; $product->visibility = $line[26]; $product->additional_shipping_cost = $line[27]; if (trim($line[28])) { $product->unity = $line[28]; } if (trim($line[29])) { $product->unit_price = $line[29]; } foreach ($languages as $lang) { $product->description_short[$lang['id_lang']] = $line[30]; $product->description[$lang['id_lang']] = $line[31]; } if ($line[32]) { foreach ($languages as $lang) { Tag::addTags($lang['id_lang'], $product->id, $line[32]); } } foreach ($languages as $lang) { $product->meta_title[$lang['id_lang']] = $line[33]; $product->meta_keywords[$lang['id_lang']] = $line[34]; $product->meta_description[$lang['id_lang']] = $line[35]; $product->link_rewrite[$lang['id_lang']] = $line[36]; $product->available_now[$lang['id_lang']] = $line[37]; $product->available_later[$lang['id_lang']] = $line[38]; } $product->available_for_order = $line[39]; $product->available_date = $line[40]; $product->date_add = $line[41]; $product->show_price = $line[42]; // Features import $features = explode(',', $line[45]); if ($features) { foreach ($features as $feature) { $value = explode(':', $feature); if ($value[0] && $value[1]) { Product::addFeatureProductImport((int) $product->id, (int) $value[0], (int) $value[1]); SpecificPriceRule::applyAllRules(array((int) $product->id)); } } } $product->online_only = trim($line[46]) ? $line[46] : 0; $product->condition = $line[47]; $product->customizable = trim($line[48]) ? $line[48] : 0; $product->uploadable_files = trim($line[49]) ? $line[49] : 0; $product->text_fields = trim($line[50]) ? $line[50] : 0; if ($product->getType() == Product::PTYPE_VIRTUAL) { StockAvailable::setProductOutOfStock((int) $product->id, 1); } else { StockAvailable::setProductOutOfStock((int) $product->id, (int) $line[51]); } $product->id_shop_default = $line[52]; // add product accessories if ($line[56]) { $accessories = explode(',', $line[56]); foreach ($accessories as $accessory) { $a[]['id'] = $accessory; } $product->setWsAccessories($a); } // add product carriers if ($line[57]) { $carriers = explode(',', $line[57]); $product->setCarriers($carriers); } // add costomisation fields if (!Tools::isEmpty($line[58]) && class_exists('CustomizationField')) { $customisation_fields_ids = explode(',', $line[58]); foreach ($customisation_fields_ids as $customisation_field) { $result = false; $customisation_data = explode(':', $customisation_field); $cf = new CustomizationField(); $cf->id_product = $product->id; $cf->type = $customisation_data[1]; $cf->required = $customisation_data[2]; foreach ($languages as $lang) { $cf->name[$lang['id_lang']] = $customisation_data[3] ? $customisation_data[3] : ' '; } $cf->force_id = 1; if (!$result) { $result = $cf->add(); } } } // add attachments if ($line[59]) { $attachments = explode(',', $line[59]); if (isset($attachments) && count($attachments)) { Attachment::attachToProduct($product->id, $attachments); } } if ($line[60]) { $product->date_upd = $line[60]; } $product->price = $line[61]; $product->force_id = 1; if (!$res) { $res = $product->add(); } } $this->closeCsvFile($handle); Search::indexation(true); return true; }