diff --git a/controllers/admin/AdminImportController.php b/controllers/admin/AdminImportController.php
index 5a1136499..ca3c3050d 100644
--- a/controllers/admin/AdminImportController.php
+++ b/controllers/admin/AdminImportController.php
@@ -886,1951 +886,4 @@ class AdminImportControllerCore extends AdminController
if (isset($category->parent) && is_numeric($category->parent))
{
- if (isset($cat_moved[$category->parent]))
- $category->parent = $cat_moved[$category->parent];
- $category->id_parent = $category->parent;
- }
- elseif (isset($category->parent) && is_string($category->parent))
- {
- $category_parent = Category::searchByName($default_language_id, $category->parent, true);
- if ($category_parent['id_category'])
- {
- $category->id_parent = (int)$category_parent['id_category'];
- $category->level_depth = (int)$category_parent['level_depth'] + 1;
- }
- else
- {
- $category_to_create = new Category();
- $category_to_create->name = AdminImportController::createMultiLangField($category->parent);
- $category_to_create->active = 1;
- $category_link_rewrite = Tools::link_rewrite($category_to_create->name[$default_language_id]);
- $category_to_create->link_rewrite = $category_link_rewrite;
- $category_to_create->id_parent = Configuration::get('PS_HOME_CATEGORY'); // Default parent is home for unknown category to create
- if (($field_error = $category_to_create->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $category_to_create->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $category_to_create->add())
- $category->id_parent = $category_to_create->id;
- else
- {
- $this->errors[] = sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- $category_to_create->name[$default_language_id],
- (isset($category_to_create->id) ? $category_to_create->id : 'null')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
- }
- if (isset($category->link_rewrite) && !empty($category->link_rewrite[$default_language_id]))
- $valid_link = Validate::isLinkRewrite($category->link_rewrite[$default_language_id]);
- else
- $valid_link = false;
-
- if (!Shop::isFeatureActive())
- $category->id_shop_default = 1;
- else
- $category->id_shop_default = (int)Context::getContext()->shop->id;
-
- $bak = $category->link_rewrite[$default_language_id];
- if ((isset($category->link_rewrite) && empty($category->link_rewrite[$default_language_id])) || !$valid_link)
- {
- $category->link_rewrite = Tools::link_rewrite($category->name[$default_language_id]);
- if ($category->link_rewrite == '')
- {
- $category->link_rewrite = 'friendly-url-autogeneration-failed';
- $this->warnings[] = sprintf(Tools::displayError('URL rewriting failed to auto-generate a friendly URL for: %s'), $category->name[$default_language_id]);
- }
- $category->link_rewrite = AdminImportController::createMultiLangField($category->link_rewrite);
- }
-
- if (!$valid_link)
- $this->warnings[] = sprintf(
- Tools::displayError('Rewrite link for %1$s (ID: %2$s) was re-written as %3$s.'),
- $bak,
- (isset($info['id']) ? $info['id'] : 'null'),
- $category->link_rewrite[$default_language_id]
- );
- $res = false;
- if (($field_error = $category->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $category->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && empty($this->errors))
- {
- $category_already_created = Category::searchByNameAndParentCategoryId(
- $default_language_id,
- $category->name[$default_language_id],
- $category->id_parent
- );
-
- // If category already in base, get id category back
- if ($category_already_created['id_category'])
- {
- $cat_moved[$category->id] = (int)$category_already_created['id_category'];
- $category->id = (int)$category_already_created['id_category'];
- }
-
- if ($category->id && $category->id == $category->id_parent)
- {
- $this->errors[] = Tools::displayError('a category cannot be its own parent');
- continue;
- }
-
- /* No automatic nTree regeneration for import */
- $category->doNotRegenerateNTree = true;
-
- // If id category AND id category already in base, trying to update
- $categories_home_root = array(Configuration::get('PS_ROOT_CATEGORY'), Configuration::get('PS_HOME_CATEGORY'));
- if ($category->id && $category->categoryExists($category->id) && !in_array($category->id, $categories_home_root))
- $res = $category->update();
- if ($category->id == Configuration::get('PS_ROOT_CATEGORY'))
- $this->errors[] = Tools::displayError('The root category cannot be modified.');
- // If no id_category or update failed
- if (!$res)
- $res = $category->add();
- }
- //copying images of categories
- if (isset($category->image) && !empty($category->image))
- if (!(AdminImportController::copyImg($category->id, null, $category->image, 'categories')))
- $this->warnings[] = $category->image.' '.Tools::displayError('cannot be copied.');
- // If both failed, mysql error
- if (!$res)
- {
- $this->errors[] = sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- (isset($info['name']) ? Tools::safeOutput($info['name']) : 'No Name'),
- (isset($info['id']) ? Tools::safeOutput($info['id']) : 'No ID')
- );
- $error_tmp = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').Db::getInstance()->getMsgError();
- if ($error_tmp != '')
- $this->errors[] = $error_tmp;
- }
- else
- {
- // Associate category to shop
- if (Shop::isFeatureActive())
- {
- Db::getInstance()->execute('
- DELETE FROM '._DB_PREFIX_.'category_shop
- WHERE id_category = '.(int)$category->id
- );
-
- if (!Shop::isFeatureActive())
- $info['shop'] = 1;
- elseif (!isset($info['shop']) || empty($info['shop']))
- $info['shop'] = implode($this->multiple_value_separator, Shop::getContextListShopID());
-
- // Get shops for each attributes
- $info['shop'] = explode($this->multiple_value_separator, $info['shop']);
-
- foreach ($info['shop'] as $shop)
- if (!is_numeric($shop))
- $category->addShop(Shop::getIdByName($shop));
- else
- $category->addShop($shop);
- }
- }
- }
-
- /* Import has finished, we can regenerate the categories nested tree */
- Category::regenerateEntireNtree();
-
- $this->closeCsvFile($handle);
- }
-
- public function productImport()
- {
- $this->receiveTab();
- $handle = $this->openCsvFile();
- $default_language_id = (int)Configuration::get('PS_LANG_DEFAULT');
- AdminImportController::setLocale();
- $shop_ids = Shop::getCompleteListOfShopsID();
- for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)
- {
- if (Tools::getValue('convert'))
- $line = $this->utf8EncodeArray($line);
- $info = AdminImportController::getMaskedRow($line);
-
- if (Tools::getValue('forceIDs') && isset($info['id']) && (int)$info['id'])
- $product = new Product((int)$info['id']);
- else
- {
- if (array_key_exists('id', $info) && (int)$info['id'] && Product::existsInDatabase((int)$info['id'], 'product'))
- $product = new Product((int)$info['id']);
- else
- $product = new Product();
- }
-
- if (array_key_exists('id', $info) && (int)$info['id'] && Product::existsInDatabase((int)$info['id'], 'product'))
- {
- $product->loadStockData();
- $category_data = Product::getProductCategories((int)$product->id);
- foreach ($category_data as $tmp)
- $product->category[] = $tmp;
- }
-
- AdminImportController::setEntityDefaultValues($product);
- AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $product);
-
- if (!Shop::isFeatureActive())
- $product->shop = 1;
- elseif (!isset($product->shop) || empty($product->shop))
- $product->shop = implode($this->multiple_value_separator, Shop::getContextListShopID());
-
- if (!Shop::isFeatureActive())
- $product->id_shop_default = 1;
- else
- $product->id_shop_default = (int)Context::getContext()->shop->id;
-
- // link product to shops
- $product->id_shop_list = array();
- foreach (explode($this->multiple_value_separator, $product->shop) as $shop)
- if (!is_numeric($shop))
- $product->id_shop_list[] = Shop::getIdByName($shop);
- else
- $product->id_shop_list[] = $shop;
-
- if ((int)$product->id_tax_rules_group != 0)
- {
- if (Validate::isLoadedObject(new TaxRulesGroup($product->id_tax_rules_group)))
- {
- $address = $this->context->shop->getAddress();
- $tax_manager = TaxManagerFactory::getManager($address, $product->id_tax_rules_group);
- $product_tax_calculator = $tax_manager->getTaxCalculator();
- $product->tax_rate = $product_tax_calculator->getTotalRate();
- }
- else
- $this->addProductWarning(
- 'id_tax_rules_group',
- $product->id_tax_rules_group,
- Tools::displayError('Invalid tax rule group ID. You first need to create a group with this ID.')
- );
- }
- if (isset($product->manufacturer) && is_numeric($product->manufacturer) && Manufacturer::manufacturerExists((int)$product->manufacturer))
- $product->id_manufacturer = (int)$product->manufacturer;
- else if (isset($product->manufacturer) && is_string($product->manufacturer) && !empty($product->manufacturer))
- {
- if ($manufacturer = Manufacturer::getIdByName($product->manufacturer))
- $product->id_manufacturer = (int)$manufacturer;
- else
- {
- $manufacturer = new Manufacturer();
- $manufacturer->name = $product->manufacturer;
- if (($field_error = $manufacturer->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $manufacturer->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $manufacturer->add())
- $product->id_manufacturer = (int)$manufacturer->id;
- else
- {
- $this->errors[] = sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- $manufacturer->name,
- (isset($manufacturer->id) ? $manufacturer->id : 'null')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
- }
-
- if (isset($product->supplier) && is_numeric($product->supplier) && Supplier::supplierExists((int)$product->supplier))
- $product->id_supplier = (int)$product->supplier;
- else if (isset($product->supplier) && is_string($product->supplier) && !empty($product->supplier))
- {
- if ($supplier = Supplier::getIdByName($product->supplier))
- $product->id_supplier = (int)$supplier;
- else
- {
- $supplier = new Supplier();
- $supplier->name = $product->supplier;
- $supplier->active = true;
-
- if (($field_error = $supplier->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $supplier->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $supplier->add())
- {
- $product->id_supplier = (int)$supplier->id;
- $supplier->associateTo($product->id_shop_list);
- }
- else
- {
- $this->errors[] = sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- $supplier->name,
- (isset($supplier->id) ? $supplier->id : 'null')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
- }
-
- if (isset($product->price_tex) && !isset($product->price_tin))
- $product->price = $product->price_tex;
- else if (isset($product->price_tin) && !isset($product->price_tex))
- {
- $product->price = $product->price_tin;
- // If a tax is already included in price, withdraw it from price
- if ($product->tax_rate)
- $product->price = (float)number_format($product->price / (1 + $product->tax_rate / 100), 6, '.', '');
- }
- else if (isset($product->price_tin) && isset($product->price_tex))
- $product->price = $product->price_tex;
-
- if (isset($product->category) && is_array($product->category) && count($product->category))
- {
- $product->id_category = array(); // Reset default values array
- foreach ($product->category as $value)
- {
- if (is_numeric($value))
- {
- if (Category::categoryExists((int)$value))
- $product->id_category[] = (int)$value;
- else
- {
- $category_to_create = new Category();
- $category_to_create->id = (int)$value;
- $category_to_create->name = AdminImportController::createMultiLangField($value);
- $category_to_create->active = 1;
- $category_to_create->id_parent = Configuration::get('PS_HOME_CATEGORY'); // Default parent is home for unknown category to create
- $category_link_rewrite = Tools::link_rewrite($category_to_create->name[$default_language_id]);
- $category_to_create->link_rewrite = AdminImportController::createMultiLangField($category_link_rewrite);
- if (($field_error = $category_to_create->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $category_to_create->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $category_to_create->add())
- $product->id_category[] = (int)$category_to_create->id;
- else
- {
- $this->errors[] = sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- $category_to_create->name[$default_language_id],
- (isset($category_to_create->id) ? $category_to_create->id : 'null')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
- }
- else if (is_string($value) && !empty($value))
- {
- $category = Category::searchByName($default_language_id, trim($value), true);
- if ($category['id_category'])
- $product->id_category[] = (int)$category['id_category'];
- else
- {
- $category_to_create = new Category();
- if (!Shop::isFeatureActive())
- $category_to_create->id_shop_default = 1;
- else
- $category_to_create->id_shop_default = (int)Context::getContext()->shop->id;
- $category_to_create->name = AdminImportController::createMultiLangField(trim($value));
- $category_to_create->active = 1;
- $category_to_create->id_parent = (int)Configuration::get('PS_HOME_CATEGORY'); // Default parent is home for unknown category to create
- $category_link_rewrite = Tools::link_rewrite($category_to_create->name[$default_language_id]);
- $category_to_create->link_rewrite = AdminImportController::createMultiLangField($category_link_rewrite);
- if (($field_error = $category_to_create->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $category_to_create->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $category_to_create->add())
- $product->id_category[] = (int)$category_to_create->id;
- else
- {
- $this->errors[] = sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- $category_to_create->name[$default_language_id],
- (isset($category_to_create->id) ? $category_to_create->id : 'null')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
- }
- }
- }
-
- $product->id_category_default = isset($product->id_category[0]) ? (int)$product->id_category[0] : '';
-
- $link_rewrite = (is_array($product->link_rewrite) && count($product->link_rewrite)) ? trim($product->link_rewrite[$default_language_id]) : '';
-
- $valid_link = Validate::isLinkRewrite($link_rewrite);
-
- if ((isset($product->link_rewrite[$default_language_id]) && empty($product->link_rewrite[$default_language_id])) || !$valid_link)
- {
- $link_rewrite = Tools::link_rewrite($product->name[$default_language_id]);
- if ($link_rewrite == '')
- $link_rewrite = 'friendly-url-autogeneration-failed';
- }
-
- if (!$valid_link)
- $this->warnings[] = sprintf(
- Tools::displayError('Rewrite link for %1$s (ID: %2$s) was re-written as %3$s.'),
- $product->name[$default_language_id],
- (isset($info['id']) ? $info['id'] : 'null'),
- $link_rewrite
- );
-
- $product->link_rewrite = AdminImportController::createMultiLangField($link_rewrite);
-
- // replace the value of separator by coma
- if ($this->multiple_value_separator != ',')
- foreach ($product->meta_keywords as &$meta_keyword)
- if (!empty($meta_keyword))
- $meta_keyword = str_replace($this->multiple_value_separator, ',', $meta_keyword);
-
- // Convert comma into dot for all floating values
- foreach (Product::$definition['fields'] as $key => $array)
- if ($array['type'] == Product::TYPE_FLOAT)
- $product->{$key} = str_replace(',', '.', $product->{$key});
-
- // Indexation is already 0 if it's a new product, but not if it's an update
- $product->indexed = 0;
-
- $res = false;
- $field_error = $product->validateFields(UNFRIENDLY_ERROR, true);
- $lang_field_error = $product->validateFieldsLang(UNFRIENDLY_ERROR, true);
- if ($field_error === true && $lang_field_error === true)
- {
- // check quantity
- if ($product->quantity == null)
- $product->quantity = 0;
-
- // If match ref is specified && ref product && ref product already in base, trying to update
- if (Tools::getValue('match_ref') == 1 && $product->reference && $product->existsRefInDatabase($product->reference))
- {
- $datas = Db::getInstance()->getRow('
- SELECT product_shop.`date_add`, p.`id_product`
- FROM `'._DB_PREFIX_.'product` p
- '.Shop::addSqlAssociation('product', 'p').'
- WHERE p.`reference` = "'.$product->reference.'"
- ');
- $product->id = (int)$datas['id_product'];
- $product->date_add = pSQL($datas['date_add']);
- $res = $product->update();
- } // Else If id product && id product already in base, trying to update
- else if ($product->id && Product::existsInDatabase((int)$product->id, 'product'))
- {
- $datas = Db::getInstance()->getRow('
- SELECT product_shop.`date_add`
- FROM `'._DB_PREFIX_.'product` p
- '.Shop::addSqlAssociation('product', 'p').'
- WHERE p.`id_product` = '.(int)$product->id);
- $product->date_add = pSQL($datas['date_add']);
- $res = $product->update();
- }
- // If no id_product or update failed
- if (!$res)
- {
- if (isset($product->date_add) && $product->date_add != '')
- $res = $product->add(false);
- else
- $res = $product->add();
- }
- }
-
- $shops = array();
- $product_shop = explode($this->multiple_value_separator, $product->shop);
- foreach ($product_shop as $shop)
- {
- $shop = trim($shop);
- if (!is_numeric($shop))
- $shop = Shop::getIdByName($shop);
-
- if (in_array($shop, $shop_ids))
- $shops[] = $shop;
- else
- $this->addProductWarning(Tools::safeOutput($info['name']), $product->id, $this->l('Shop is not valid'));
- }
- if (empty($shops))
- $shops = Shop::getContextListShopID();
- // If both failed, mysql error
- if (!$res)
- {
- $this->errors[] = sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- (isset($info['name']) ? Tools::safeOutput($info['name']) : 'No Name'),
- (isset($info['id']) ? Tools::safeOutput($info['id']) : 'No ID')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
-
- }
- else
- {
- // Product supplier
- if (isset($product->id_supplier) && isset($product->supplier_reference))
- {
- $id_product_supplier = ProductSupplier::getIdByProductAndSupplier((int)$product->id, 0, (int)$product->id_supplier);
- if ($id_product_supplier)
- $product_supplier = new ProductSupplier((int)$id_product_supplier);
- else
- $product_supplier = new ProductSupplier();
-
- $product_supplier->id_product = $product->id;
- $product_supplier->id_product_attribute = 0;
- $product_supplier->id_supplier = $product->id_supplier;
- $product_supplier->product_supplier_price_te = $product->wholesale_price;
- $product_supplier->product_supplier_reference = $product->supplier_reference;
- $product_supplier->save();
- }
-
- // SpecificPrice (only the basic reduction feature is supported by the import)
- if ((isset($info['reduction_price']) && $info['reduction_price'] > 0) || (isset($info['reduction_percent']) && $info['reduction_percent'] > 0))
- {
- $specific_price = new SpecificPrice();
- $specific_price->id_product = (int)$product->id;
- // @todo multishop specific price import
- $specific_price->id_shop = $this->context->shop->id;
- $specific_price->id_currency = 0;
- $specific_price->id_country = 0;
- $specific_price->id_group = 0;
- $specific_price->price = -1;
- $specific_price->id_customer = 0;
- $specific_price->from_quantity = 1;
- $specific_price->reduction = (isset($info['reduction_price']) && $info['reduction_price']) ? $info['reduction_price'] : $info['reduction_percent'] / 100;
- $specific_price->reduction_type = (isset($info['reduction_price']) && $info['reduction_price']) ? 'amount' : 'percentage';
- $specific_price->from = (isset($info['reduction_from']) && Validate::isDate($info['reduction_from'])) ? $info['reduction_from'] : '0000-00-00 00:00:00';
- $specific_price->to = (isset($info['reduction_to']) && Validate::isDate($info['reduction_to'])) ? $info['reduction_to'] : '0000-00-00 00:00:00';
- if (!$specific_price->add())
- $this->addProductWarning(Tools::safeOutput($info['name']), $product->id, $this->l('Discount is invalid'));
- }
-
- if (isset($product->tags) && !empty($product->tags))
- {
- // Delete tags for this id product, for no duplicating error
- Tag::deleteTagsForProduct($product->id);
-
- if (!is_array($product->tags))
- {
- $product->tags = AdminImportController::createMultiLangField($product->tags);
- foreach ($product->tags as $key => $tags)
- {
- $is_tag_added = Tag::addTags($key, $product->id, $tags, $this->multiple_value_separator);
- if (!$is_tag_added)
- {
- $this->addProductWarning(Tools::safeOutput($info['name']), $product->id, $this->l('Tags list is invalid'));
- break;
- }
- }
- }
- else
- {
- foreach ($product->tags as $key => $tags)
- {
- $str = '';
- foreach ($tags as $one_tag)
- $str .= $one_tag.$this->multiple_value_separator;
- $str = rtrim($str, $this->multiple_value_separator);
-
- $is_tag_added = Tag::addTags($key, $product->id, $str, $this->multiple_value_separator);
- if (!$is_tag_added)
- {
- $this->addProductWarning(Tools::safeOutput($info['name']), (int)$product->id, 'Invalid tag(s) ('.$str.')');
- break;
- }
- }
- }
- }
- //delete existing images if "delete_existing_images" is set to 1
- if (isset($product->delete_existing_images))
- if ((bool)$product->delete_existing_images)
- $product->deleteImages();
- else if (isset($product->image) && is_array($product->image) && count($product->image))
- $product->deleteImages();
-
- if (isset($product->image) && is_array($product->image) && count($product->image))
- {
- $product_has_images = (bool)Image::getImages($this->context->language->id, (int)$product->id);
- foreach ($product->image as $key => $url)
- {
- $url = trim($url);
- $error = false;
- if (!empty($url))
- {
- $url = str_replace(' ', '%20', $url);
-
- $image = new Image();
- $image->id_product = (int)$product->id;
- $image->position = Image::getHighestPosition($product->id) + 1;
- $image->cover = (!$key && !$product_has_images) ? true : false;
- // file_exists doesn't work with HTTP protocol
- if (($field_error = $image->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $image->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $image->add())
- {
- // associate image to selected shops
- $image->associateTo($shops);
- if (!AdminImportController::copyImg($product->id, $image->id, $url))
- {
- $image->delete();
- $this->warnings[] = sprintf(Tools::displayError('Error copying image: %s'), $url);
- }
- }
- else
- $error = true;
- }
- else
- $error = true;
-
- if ($error)
- $this->warnings[] = sprintf(Tools::displayError('Product n°%1$d: the picture cannot be saved: %2$s'), $image->id_product, $url);
- }
- }
- if (isset($product->id_category))
- $product->updateCategories(array_map('intval', $product->id_category));
-
- // Features import
- $features = get_object_vars($product);
-
- if (isset($features['features']) && !empty($features['features']))
- foreach (explode($this->multiple_value_separator, $features['features']) as $single_feature)
- {
- $tab_feature = explode(':', $single_feature);
- $feature_name = trim($tab_feature[0]);
- $feature_value = trim($tab_feature[1]);
- $position = isset($tab_feature[2]) ? $tab_feature[2]: false;
- if(!empty($feature_name) && !empty($feature_value))
- {
- $id_feature = Feature::addFeatureImport($feature_name, $position);
- $id_feature_value = FeatureValue::addFeatureValueImport($id_feature, $feature_value);
- Product::addFeatureProductImport($product->id, $id_feature, $id_feature_value);
- }
- }
- // clean feature positions to avoid conflict
- Feature::cleanPositions();
- }
-
- // stock available
- if (Shop::isFeatureActive())
- {
- foreach ($shops as $shop)
- StockAvailable::setQuantity((int)$product->id, 0, $product->quantity, (int)$shop);
- }
- else
- StockAvailable::setQuantity((int)$product->id, 0, $product->quantity, $this->context->shop->id);
-
- }
-
- $this->closeCsvFile($handle);
- }
-
- public function attributeImport()
- {
- $default_language = Configuration::get('PS_LANG_DEFAULT');
-
- $groups = array();
- foreach (AttributeGroup::getAttributesGroups($default_language) as $group)
- $groups[$group['name']] = (int)$group['id_attribute_group'];
-
- $attributes = array();
- foreach (Attribute::getAttributes($default_language) as $attribute)
- $attributes[$attribute['attribute_group'].'_'.$attribute['name']] = (int)$attribute['id_attribute'];
-
- $this->receiveTab();
- $handle = $this->openCsvFile();
- AdminImportController::setLocale();
- for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)
- {
- if (count($line) == 1 && empty($line[0]))
- continue;
-
- if (Tools::getValue('convert'))
- $line = $this->utf8EncodeArray($line);
- $info = AdminImportController::getMaskedRow($line);
- $info = array_map('trim', $info);
-
- AdminImportController::setDefaultValues($info);
-
- if (!Shop::isFeatureActive())
- $info['shop'] = 1;
- elseif (!isset($info['shop']) || empty($info['shop']))
- $info['shop'] = implode($this->multiple_value_separator, Shop::getContextListShopID());
-
- // Get shops for each attributes
- $info['shop'] = explode($this->multiple_value_separator, $info['shop']);
-
- $id_shop_list = array();
- foreach ($info['shop'] as $shop)
- if (!is_numeric($shop))
- $id_shop_list[] = Shop::getIdByName($shop);
- else
- $id_shop_list[] = $shop;
-
- if(isset($info['id_product']))
- $product = new Product((int)$info['id_product'], false, $default_language);
- else
- continue;
-
- $id_image = null;
-
- //delete existing images if "delete_existing_images" is set to 1
- if (array_key_exists('delete_existing_images', $info) && $info['delete_existing_images'] && !isset($this->cache_image_deleted[(int)$product->id]))
- {
- $product->deleteImages();
- $this->cache_image_deleted[(int)$product->id] = true;
- }
-
- if (isset($info['image_url']) && $info['image_url'])
- {
- $product_has_images = (bool)Image::getImages($this->context->language->id, $product->id);
-
- $url = $info['image_url'];
- $image = new Image();
- $image->id_product = (int)$product->id;
- $image->position = Image::getHighestPosition($product->id) + 1;
- $image->cover = (!$product_has_images) ? true : false;
-
- $field_error = $image->validateFields(UNFRIENDLY_ERROR, true);
- $lang_field_error = $image->validateFieldsLang(UNFRIENDLY_ERROR, true);
-
- if ($field_error === true && $lang_field_error === true && $image->add())
- {
- $image->associateTo($id_shop_list);
- if (!AdminImportController::copyImg($product->id, $image->id, $url))
- {
- $this->warnings[] = sprintf(Tools::displayError('Error copying image: %s'), $url);
- $image->delete();
- }
- else
- $id_image = array($image->id);
- }
- else
- {
- $this->warnings[] = sprintf(
- Tools::displayError('%s cannot be saved'),
- (isset($image->id_product) ? ' ('.$image->id_product.')' : '')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').mysql_error();
- }
- }
- elseif (isset($info['image_position']) && $info['image_position'])
- {
- $images = $product->getImages($default_language);
-
- if ($images)
- foreach ($images as $row)
- if ($row['position'] == (int)$info['image_position'])
- {
- $id_image = array($row['id_image']);
- break;
- }
- if (!$id_image)
- $this->warnings[] = sprintf(
- Tools::displayError('No image was found for combination with id_product = %s and image position = %s.'),
- $product->id,
- (int)$info['image_position']
- );
- }
-
- $id_attribute_group = 0;
- // groups
- $groups_attributes = array();
- if(isset($info['group']))
- foreach (explode($this->multiple_value_separator, $info['group']) as $key => $group)
- {
- $tab_group = explode(':', $group);
- $group = trim($tab_group[0]);
- if (!isset($tab_group[1]))
- $type = 'select';
- else
- $type = trim($tab_group[1]);
-
- // sets group
- $groups_attributes[$key]['group'] = $group;
-
- // if position is filled
- if (isset($tab_group[2]))
- $position = trim($tab_group[2]);
- else
- $position = false;
-
- if (!isset($groups[$group]))
- {
- $obj = new AttributeGroup();
- $obj->is_color_group = false;
- $obj->group_type = pSQL($type);
- $obj->name[$default_language] = $group;
- $obj->public_name[$default_language] = $group;
- $obj->position = (!$position) ? AttributeGroup::getHigherPosition() + 1 : $position;
-
- if (($field_error = $obj->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $obj->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true)
- {
- $obj->add();
- $obj->associateTo($id_shop_list);
- $groups[$group] = $obj->id;
- }
- else
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '');
-
- // fils groups attributes
- $id_attribute_group = $obj->id;
- $groups_attributes[$key]['id'] = $id_attribute_group;
- }
- else // alreay exists
- {
- $id_attribute_group = $groups[$group];
- $groups_attributes[$key]['id'] = $id_attribute_group;
- }
- }
-
- // inits attribute
- $id_product_attribute = 0;
- $id_product_attribute_update = false;
- $attributes_to_add = array();
-
- // for each attribute
- if(isset($info['attribute']))
- foreach (explode($this->multiple_value_separator, $info['attribute']) as $key => $attribute)
- {
- $tab_attribute = explode(':', $attribute);
- $attribute = trim($tab_attribute[0]);
- // if position is filled
- if (isset($tab_attribute[1]))
- $position = trim($tab_attribute[1]);
- else
- $position = false;
-
- if (isset($groups_attributes[$key]))
- {
- $group = $groups_attributes[$key]['group'];
- if (!isset($attributes[$group.'_'.$attribute]) && count($groups_attributes[$key]) == 2)
- {
- $id_attribute_group = $groups_attributes[$key]['id'];
- $obj = new Attribute();
- // sets the proper id (corresponding to the right key)
- $obj->id_attribute_group = $groups_attributes[$key]['id'];
- $obj->name[$default_language] = str_replace('\n', '', str_replace('\r', '', $attribute));
- $obj->position = (!$position && isset($groups[$group])) ? Attribute::getHigherPosition($groups[$group]) + 1 : $position;
-
- if (($field_error = $obj->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $obj->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true)
- {
- $obj->add();
- $obj->associateTo($id_shop_list);
- $attributes[$group.'_'.$attribute] = $obj->id;
- }
- else
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '');
- }
-
- $info['minimal_quantity'] = isset($info['minimal_quantity']) && $info['minimal_quantity'] ? (int)$info['minimal_quantity'] : 1;
-
- $info['wholesale_price'] = str_replace(',', '.', $info['wholesale_price']);
- $info['price'] = str_replace(',', '.', $info['price']);
- $info['ecotax'] = str_replace(',', '.', $info['ecotax']);
- $info['weight'] = str_replace(',', '.', $info['weight']);
-
- // if a reference is specified for this product, get the associate id_product_attribute to UPDATE
- if (isset($info['reference']) && !empty($info['reference']))
- {
- $id_product_attribute = Combination::getIdByReference($product->id, strval($info['reference']));
-
- // updates the attribute
- if ($id_product_attribute)
- {
- // gets all the combinations of this product
- $attribute_combinations = $product->getAttributeCombinations($default_language);
- foreach ($attribute_combinations as $attribute_combination)
- {
- if ($id_product_attribute && in_array($id_product_attribute, $attribute_combination))
- {
- $product->updateAttribute(
- $id_product_attribute,
- (float)$info['wholesale_price'],
- (float)$info['price'],
- (float)$info['weight'],
- 0,
- (float)$info['ecotax'],
- $id_image,
- strval($info['reference']),
- strval($info['ean13']),
- (int)$info['default_on'],
- 0,
- strval($info['upc']),
- (int)$info['minimal_quantity'],
- 0,
- null,
- $id_shop_list
- );
-
- $id_product_attribute_update = true;
- }
- }
- }
- }
-
- // if no attribute reference is specified, creates a new one
- if (!$id_product_attribute)
- {
- $id_product_attribute = $product->addCombinationEntity(
- (float)$info['wholesale_price'],
- (float)$info['price'],
- (float)$info['weight'],
- 0,
- (float)$info['ecotax'],
- (int)$info['quantity'],
- $id_image,
- strval($info['reference']),
- 0,
- strval($info['ean13']),
- (int)$info['default_on'],
- 0,
- strval($info['upc']),
- (int)$info['minimal_quantity'],
- $id_shop_list
- );
- }
-
- // fills our attributes array, in order to add the attributes to the product_attribute afterwards
- if(isset($attributes[$group.'_'.$attribute]))
- $attributes_to_add[] = (int)$attributes[$group.'_'.$attribute];
-
- // after insertion, we clean attribute position and group attribute position
- $obj = new Attribute();
- $obj->cleanPositions((int)$id_attribute_group, false);
- AttributeGroup::cleanPositions();
- }
- }
-
- $product->checkDefaultAttributes();
- if (!$product->cache_default_attribute)
- Product::updateDefaultAttribute($product->id);
- if ($id_product_attribute)
- {
- // now adds the attributes in the attribute_combination table
- if ($id_product_attribute_update)
- {
- Db::getInstance()->execute('
- DELETE FROM '._DB_PREFIX_.'product_attribute_combination
- WHERE id_product_attribute = '.(int)$id_product_attribute);
- }
-
- foreach ($attributes_to_add as $attribute_to_add)
- {
- Db::getInstance()->execute('
- INSERT IGNORE INTO '._DB_PREFIX_.'product_attribute_combination (id_attribute, id_product_attribute)
- VALUES ('.(int)$attribute_to_add.','.(int)$id_product_attribute.')');
- }
-
- StockAvailable::setQuantity($product->id, $id_product_attribute, (int)$info['quantity']);
- }
- }
-
- $this->closeCsvFile($handle);
- }
-
- public function customerImport()
- {
- $customer_exist = false;
- $this->receiveTab();
- $handle = $this->openCsvFile();
- AdminImportController::setLocale();
- for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)
- {
- if (Tools::getValue('convert'))
- $line = $this->utf8EncodeArray($line);
- $info = AdminImportController::getMaskedRow($line);
-
- AdminImportController::setDefaultValues($info);
-
- if (Tools::getValue('forceIDs') && isset($info['id']) && (int)$info['id'])
- $customer = new Customer((int)$info['id']);
- else
- {
- if (array_key_exists('id', $info) && (int)$info['id'] && Customer::customerIdExistsStatic((int)$info['id']))
- $customer = new Customer((int)$info['id']);
- else
- $customer = new Customer();
- }
-
- if (array_key_exists('id', $info) && (int)$info['id'] && Customer::customerIdExistsStatic((int)$info['id']))
- {
- $current_id_customer = $customer->id;
- $current_id_shop = $customer->id_shop;
- $current_id_shop_group = $customer->id_shop_group;
- $customer_exist = true;
- $customer_groups = $customer->getGroups();
- $addresses = $customer->getAddresses((int)Configuration::get('PS_LANG_DEFAULT'));
- foreach ($customer_groups as $key => $group)
- if ($group == $customer->id_default_group)
- unset($customer_groups[$key]);
- }
-
- AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $customer);
-
- if ($customer->passwd)
- $customer->passwd = Tools::encrypt($customer->passwd);
-
- $id_shop_list = explode($this->multiple_value_separator, $customer->id_shop);
- $customers_shop = array();
- $customers_shop['shared'] = array();
- $default_shop = new Shop((int)Configuration::get('PS_SHOP_DEFAULT'));
- if (Shop::isFeatureActive() && $id_shop_list)
- {
- foreach ($id_shop_list as $id_shop)
- {
- $shop = new Shop((int)$id_shop);
- $group_shop = $shop->getGroup();
- if ($group_shop->share_customer)
- {
- if (!in_array($group_shop->id, $customers_shop['shared']))
- $customers_shop['shared'][(int)$id_shop] = $group_shop->id;
- }
- else
- $customers_shop[(int)$id_shop] = $group_shop->id;
- }
- }
- else
- {
- $default_shop = new Shop((int)Configuration::get('PS_SHOP_DEFAULT'));
- $default_shop->getGroup();
- $customers_shop[$default_shop->id] = $default_shop->getGroup()->id;
- }
-
- //set temporally for validate field
- $customer->id_shop = $default_shop->id;
- $customer->id_shop_group = $default_shop->getGroup()->id;
-
- $res = true;
- if (($field_error = $customer->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $customer->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true)
- {
- foreach ($customers_shop as $id_shop => $id_group)
- {
- if ($id_shop == 'shared')
- {
- foreach ($id_group as $key => $id)
- {
- $customer->id_shop = (int)$key;
- $customer->id_shop_group = (int)$id;
- if ($customer_exist && ($current_id_shop_group == $id || in_array($current_id_shop, ShopGroup::getShopsFromGroup($id))))
- {
- $customer->id = $current_id_customer;
- $res &= $customer->update();
- }
-
- else
- {
- $res &= $customer->add();
- if (isset($customer_groups))
- $customer->addGroups($customer_groups);
- if (isset($addresses))
- foreach ($addresses as $address)
- {
- $address['id_customer'] = $customer->id;
- unset($address['country'], $address['state'], $address['state_iso'], $address['id_address'] );
- Db::getInstance()->insert('address', $address);
- }
- }
- }
- }
- else
- {
- $customer->id_shop = $id_shop;
- $customer->id_shop_group = $id_group;
- if ($customer_exist && $id_shop == $current_id_shop)
- {
- $customer->id = $current_id_customer;
- $res &= $customer->update();
- }
- else
- {
- $res &= $customer->add();
- if (isset($customer_groups))
- $customer->addGroups($customer_groups);
- if (isset($addresses))
- foreach ($addresses as $address)
- {
- $address['id_customer'] = $customer->id;
- unset($address['country'], $address['state'], $address['state_iso'], $address['id_address']);
- Db::getInstance()->insert('address', $address);
- }
- }
- }
- }
- }
- $customer_exist = false;
- if (!$res)
- {
- $this->errors[] = sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- $info['email'],
- (isset($info['id']) ? $info['id'] : 'null')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
- $this->closeCsvFile($handle);
- }
-
- public function addressImport()
- {
- $this->receiveTab();
- $default_language_id = (int)Configuration::get('PS_LANG_DEFAULT');
- $handle = $this->openCsvFile();
- AdminImportController::setLocale();
- for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)
- {
- if (Tools::getValue('convert'))
- $line = $this->utf8EncodeArray($line);
- $info = AdminImportController::getMaskedRow($line);
-
- AdminImportController::setDefaultValues($info);
- $address = new Address();
- AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $address);
-
- if (isset($address->country) && is_numeric($address->country))
- {
- if (Country::getNameById(Configuration::get('PS_LANG_DEFAULT'), (int)$address->country))
- $address->id_country = (int)$address->country;
- }
- else if (isset($address->country) && is_string($address->country) && !empty($address->country))
- {
- if ($id_country = Country::getIdByName(null, $address->country))
- $address->id_country = (int)$id_country;
- else
- {
- $country = new Country();
- $country->active = 1;
- $country->name = AdminImportController::createMultiLangField($address->country);
- $country->id_zone = 0; // Default zone for country to create
- $country->iso_code = strtoupper(substr($address->country, 0, 2)); // Default iso for country to create
- $country->contains_states = 0; // Default value for country to create
- $lang_field_error = $country->validateFieldsLang(UNFRIENDLY_ERROR, true);
- if (($field_error = $country->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $country->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $country->add())
- $address->id_country = (int)$country->id;
- else
- {
- $this->errors[] = sprintf(Tools::displayError('%s cannot be saved'), $country->name[$default_language_id]);
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
- }
-
- if (isset($address->state) && is_numeric($address->state))
- {
- if (State::getNameById((int)$address->state))
- $address->id_state = (int)$address->state;
- }
- else if (isset($address->state) && is_string($address->state) && !empty($address->state))
- {
- if ($id_state = State::getIdByName($address->state))
- $address->id_state = (int)$id_state;
- else
- {
- $state = new State();
- $state->active = 1;
- $state->name = $address->state;
- $state->id_country = isset($country->id) ? (int)$country->id : 0;
- $state->id_zone = 0; // Default zone for state to create
- $state->iso_code = strtoupper(substr($address->state, 0, 2)); // Default iso for state to create
- $state->tax_behavior = 0;
- if (($field_error = $state->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $state->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $state->add())
- $address->id_state = (int)$state->id;
- else
- {
- $this->errors[] = sprintf(Tools::displayError('%s cannot be saved'), $state->name);
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
- }
-
- if (isset($address->customer_email) && !empty($address->customer_email))
- {
- if (Validate::isEmail($address->customer_email))
- {
- // a customer could exists in different shop
- $customer_list = Customer::getCustomersByEmail($address->customer_email);
-
- if (count($customer_list) == 0)
- $this->errors[] = sprintf(
- Tools::displayError('%1$s does not exist in database %2$s (ID: %3$s) cannot be saved'),
- Db::getInstance()->getMsgError(),
- $address->customer_email,
- (isset($info['id']) ? $info['id'] : 'null')
- );
- }
- else
- {
- $this->errors[] = sprintf(Tools::displayError('"%s": Is not a valid email address'), $address->customer_email);
- continue;
- }
- }
- elseif (isset($address->id_customer) && !empty($address->id_customer))
- {
- if (Customer::customerIdExistsStatic((int)$address->id_customer))
- {
- $customer = new Customer((int)$address->id_customer);
-
- // a customer could exists in different shop
- $customer_list = Customer::getCustomersByEmail($customer->email);
-
- if (count($customer_list) == 0)
- $this->errors[] = sprintf(
- Tools::displayError('%1$s does not exist in database %2$s (ID: %3$s) cannot be saved'),
- Db::getInstance()->getMsgError(),
- $customer->email,
- (int)$address->id_customer
- );
- }
- else
- $this->errors[] = sprintf(Tools::displayError('The customer ID n.%d does not exist in the database (ID: %d) cannot be saved'), $address->id_customer);
- }
- else
- {
- $customer_list = array();
- $address->id_customer = 0;
- }
-
- if (isset($address->manufacturer) && is_numeric($address->manufacturer) && Manufacturer::manufacturerExists((int)$address->manufacturer))
- $address->id_manufacturer = (int)$address->manufacturer;
- else if (isset($address->manufacturer) && is_string($address->manufacturer) && !empty($address->manufacturer))
- {
- $manufacturer = new Manufacturer();
- $manufacturer->name = $address->manufacturer;
- if (($field_error = $manufacturer->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $manufacturer->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $manufacturer->add())
- $address->id_manufacturer = (int)$manufacturer->id;
- else
- {
- $this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- $manufacturer->name,
- (isset($manufacturer->id) ? $manufacturer->id : 'null')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
-
- if (isset($address->supplier) && is_numeric($address->supplier) && Supplier::supplierExists((int)$address->supplier))
- $address->id_supplier = (int)$address->supplier;
- else if (isset($address->supplier) && is_string($address->supplier) && !empty($address->supplier))
- {
- $supplier = new Supplier();
- $supplier->name = $address->supplier;
- if (($field_error = $supplier->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $supplier->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $supplier->add())
- $address->id_supplier = (int)$supplier->id;
- else
- {
- $this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- $supplier->name,
- (isset($supplier->id) ? $supplier->id : 'null')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
-
- $res = false;
- if (($field_error = $address->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $address->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true)
- {
- if (isset($customer_list) && count($customer_list) > 0)
- {
- $filter_list = array();
- foreach ($customer_list as $customer)
- {
- if (in_array($customer['id_customer'], $filter_list))
- continue;
-
- $filter_list[] = $customer['id_customer'];
-
- unset($address->id);
- $address->id_customer = $customer['id_customer'];
- $res = $address->add();
-
- if (!$res)
- $this->errors[] = sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- $info['alias'],
- (isset($info['id']) ? $info['id'] : 'null')
- );
- }
- }
- else
- {
- if ($address->id && $address->addressExists($address->id))
- $res = $address->update();
- if (!$res)
- $res = $address->add();
- }
- }
- if (!$res)
- {
- $this->errors[] = sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- $info['alias'],
- (isset($info['id']) ? $info['id'] : 'null')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
- $this->closeCsvFile($handle);
- }
-
- public function manufacturerImport()
- {
- $this->receiveTab();
- $handle = $this->openCsvFile();
- AdminImportController::setLocale();
- for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)
- {
- if (Tools::getValue('convert'))
- $line = $this->utf8EncodeArray($line);
- $info = AdminImportController::getMaskedRow($line);
-
- AdminImportController::setDefaultValues($info);
-
- if (Tools::getValue('forceIDs') && isset($info['id']) && (int)$info['id'])
- $manufacturer = new Manufacturer((int)$info['id']);
- else
- {
- if (array_key_exists('id', $info) && (int)$info['id'] && Manufacturer::existsInDatabase((int)$info['id'], 'manufacturer'))
- $manufacturer = new Manufacturer((int)$info['id']);
- else
- $manufacturer = new Manufacturer();
- }
-
- AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $manufacturer);
-
- $res = false;
- if (($field_error = $manufacturer->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $manufacturer->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true)
- {
- if ($manufacturer->id && $manufacturer->manufacturerExists($manufacturer->id))
- $res = $manufacturer->update();
- if (!$res)
- $res = $manufacturer->add();
-
- if ($res)
- {
- // Associate supplier to group shop
- if (Shop::isFeatureActive() && $manufacturer->shop)
- {
- Db::getInstance()->execute('
- DELETE FROM '._DB_PREFIX_.'manufacturer_shop
- WHERE id_manufacturer = '.(int)$manufacturer->id
- );
- $manufacturer->shop = explode($this->multiple_value_separator, $manufacturer->shop);
- $shops = array();
- foreach ($manufacturer->shop as $shop)
- {
- $shop = trim($shop);
- if (!is_numeric($shop))
- $shop = ShopGroup::getIdByName($shop);
- $shops[] = $shop;
- }
- $manufacturer->associateTo($shops);
- }
- }
- }
-
- if (!$res)
- {
- $this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- (isset($info['name']) ? Tools::safeOutput($info['name']) : 'No Name'),
- (isset($info['id']) ? Tools::safeOutput($info['id']) : 'No ID')
- );
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
- Db::getInstance()->getMsgError();
- }
- }
- $this->closeCsvFile($handle);
- }
-
- public function supplierImport()
- {
- $this->receiveTab();
- $handle = $this->openCsvFile();
- AdminImportController::setLocale();
- for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)
- {
- if (Tools::getValue('convert'))
- $line = $this->utf8EncodeArray($line);
- $info = AdminImportController::getMaskedRow($line);
-
- AdminImportController::setDefaultValues($info);
-
- if (Tools::getValue('forceIDs') && isset($info['id']) && (int)$info['id'])
- $supplier = new Supplier((int)$info['id']);
- else
- {
- if (array_key_exists('id', $info) && (int)$info['id'] && Supplier::existsInDatabase((int)$info['id'], 'supplier'))
- $supplier = new Supplier((int)$info['id']);
- else
- $supplier = new Supplier();
- }
-
-
- AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $supplier);
- if (($field_error = $supplier->validateFields(UNFRIENDLY_ERROR, true)) === true &&
- ($lang_field_error = $supplier->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true)
- {
- $res = false;
- if ($supplier->id && $supplier->supplierExists($supplier->id))
- $res = $supplier->update();
- if (!$res)
- $res = $supplier->add();
-
- if (!$res)
- $this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
- Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
- (isset($info['name']) ? Tools::safeOutput($info['name']) : 'No Name'),
- (isset($info['id']) ? Tools::safeOutput($info['id']) : 'No ID')
- );
- else
- {
- // Associate supplier to group shop
- if (Shop::isFeatureActive() && $supplier->shop)
- {
- Db::getInstance()->execute('
- DELETE FROM '._DB_PREFIX_.'supplier_shop
- WHERE id_supplier = '.(int)$supplier->id
- );
- $supplier->shop = explode($this->multiple_value_separator, $supplier->shop);
- $shops = array();
- foreach ($supplier->shop as $shop)
- {
- $shop = trim($shop);
- if (!is_numeric($shop))
- $shop = ShopGroup::getIdByName($shop);
- $shops[] = $shop;
- }
- $supplier->associateTo($shops);
- }
- }
- }
- else
- {
- $this->errors[] = $this->l('Supplier is invalid').' ('.$supplier->name.')';
- $this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '');
- }
- }
- $this->closeCsvFile($handle);
- }
-
- /**
- * @since 1.5.0
- */
- public function supplyOrdersImport()
- {
- // opens CSV & sets locale
- $this->receiveTab();
- $handle = $this->openCsvFile();
- AdminImportController::setLocale();
-
- // main loop, for each supply orders to import
- for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); ++$current_line)
- {
- // if convert requested
- if (Tools::getValue('convert'))
- $line = $this->utf8EncodeArray($line);
- $info = AdminImportController::getMaskedRow($line);
-
- // sets default values if needed
- AdminImportController::setDefaultValues($info);
-
- // if an id is set, instanciates a supply order with this id if possible
- if (array_key_exists('id', $info) && (int)$info['id'] && SupplyOrder::exists((int)$info['id']))
- $supply_order = new SupplyOrder((int)$info['id']);
- // if a reference is set, instanciates a supply order with this reference if possible
- else if (array_key_exists('reference', $info) && $info['reference'] && SupplyOrder::exists(pSQL($info['reference'])))
- $supply_order = SupplyOrder::getSupplyOrderByReference(pSQL($info['reference']));
- else // new supply order
- $supply_order = new SupplyOrder();
-
- // gets parameters
- $id_supplier = (int)$info['id_supplier'];
- $id_lang = (int)$info['id_lang'];
- $id_warehouse = (int)$info['id_warehouse'];
- $id_currency = (int)$info['id_currency'];
- $reference = pSQL($info['reference']);
- $date_delivery_expected = pSQL($info['date_delivery_expected']);
- $discount_rate = (float)$info['discount_rate'];
- $is_template = (bool)$info['is_template'];
-
- // checks parameters
- if (!Supplier::supplierExists($id_supplier))
- $this->errors[] = sprintf($this->l('Supplier ID (%d) is not valid (at line %d).'), $id_supplier, $current_line + 1);
- if (!Language::getLanguage($id_lang))
- $this->errors[] = sprintf($this->l('Lang ID (%d) is not valid (at line %d).'), $id_lang, $current_line + 1);
- if (!Warehouse::exists($id_warehouse))
- $this->errors[] = sprintf($this->l('Warehouse ID (%d) is not valid (at line %d).'), $id_warehouse, $current_line + 1);
- if (!Currency::getCurrency($id_currency))
- $this->errors[] = sprintf($this->l('Currency ID (%d) is not valid (at line %d).'), $id_currency, $current_line + 1);
- if (empty($supply_order->reference) && SupplyOrder::exists($reference))
- $this->errors[] = sprintf($this->l('Reference (%s) already exists (at line %d).'), $reference, $current_line + 1);
- if (!empty($supply_order->reference) && ($supply_order->reference != $reference && SupplyOrder::exists($reference)))
- $this->errors[] = sprintf($this->l('Reference (%s) already exists (at line %d).'), $reference, $current_line + 1);
- if (!Validate::isDateFormat($date_delivery_expected))
- $this->errors[] = sprintf($this->l('Date (%s) is not valid (at line %d). Format: %s.'), $date_delivery_expected,
- $current_line + 1, $this->l('YYYY-MM-DD'));
- else if (new DateTime($date_delivery_expected) <= new DateTime('yesterday'))
- $this->errors[] = sprintf($this->l('Date (%s) cannot be in the past (at line %d). Format: %s.'), $date_delivery_expected,
- $current_line + 1, $this->l('YYYY-MM-DD'));
- if ($discount_rate < 0 || $discount_rate > 100)
- $this->errors[] = sprintf($this->l('Discount rate (%d) is not valid (at line %d). %s.'), $discount_rate,
- $current_line + 1, $this->l('Format: Between 0 and 100'));
- if ($supply_order->id > 0 && !$supply_order->isEditable())
- $this->errors[] = sprintf($this->l('Supply Order (%d) is not editable (at line %d).'), $supply_order->id, $current_line + 1);
-
- // if no errors, sets supply order
- if (empty($this->errors))
- {
- // adds parameters
- $info['id_ref_currency'] = (int)Currency::getDefaultCurrency()->id;
- $info['supplier_name'] = pSQL(Supplier::getNameById($id_supplier));
- if ($supply_order->id > 0)
- {
- $info['id_supply_order_state'] = (int)$supply_order->id_supply_order_state;
- $info['id'] = (int)$supply_order->id;
- }
- else
- $info['id_supply_order_state'] = 1;
-
- // sets parameters
- AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $supply_order);
-
- // updatesd($supply_order);
- $res = true;
- if ($supply_order->id > 0)
- $res &= $supply_order->update();
- else
- $res &= $supply_order->add();
-
- // errors
- if (!$res)
- $this->errors[] = sprintf($this->l('Supply Order could not be saved (at line %d).'), $current_line + 1);
- }
- }
-
- // closes
- $this->closeCsvFile($handle);
- }
-
- public function supplyOrdersDetailsImport()
- {
- // opens CSV & sets locale
- $this->receiveTab();
- $handle = $this->openCsvFile();
- AdminImportController::setLocale();
-
- $products = array();
- $reset = true;
- // main loop, for each supply orders details to import
- for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); ++$current_line)
- {
- // if convert requested
- if (Tools::getValue('convert'))
- $line = $this->utf8EncodeArray($line);
- $info = AdminImportController::getMaskedRow($line);
-
- // sets default values if needed
- AdminImportController::setDefaultValues($info);
-
- // gets the supply order
- if (array_key_exists('supply_order_reference', $info) && pSQL($info['supply_order_reference']) && SupplyOrder::exists(pSQL($info['supply_order_reference'])))
- $supply_order = SupplyOrder::getSupplyOrderByReference(pSQL($info['supply_order_reference']));
- else
- $this->errors[] = sprintf($this->l('Supply Order (%s) could not be loaded (at line %d).'), (int)$info['supply_order_reference'], $current_line + 1);
-
- if (empty($this->errors))
- {
- // sets parameters
- $id_product = (int)$info['id_product'];
- if (!$info['id_product_attribute'])
- $info['id_product_attribute'] = 0;
- $id_product_attribute = (int)$info['id_product_attribute'];
- $unit_price_te = (float)$info['unit_price_te'];
- $quantity_expected = (int)$info['quantity_expected'];
- $discount_rate = (float)$info['discount_rate'];
- $tax_rate = (float)$info['tax_rate'];
-
- // checks if one product/attribute is there only once
- if (isset($products[$id_product][$id_product_attribute]))
- $this->errors[] = sprintf($this->l('Product/Attribute (%d/%d) cannot be added twice (at line %d).'), $id_product,
- $id_product_attribute, $current_line + 1);
- else
- $products[$id_product][$id_product_attribute] = $quantity_expected;
-
- // checks parameters
- if (false === ($supplier_reference = ProductSupplier::getProductSupplierReference($id_product, $id_product_attribute, $supply_order->id_supplier)))
- $this->errors[] = sprintf($this->l('Product (%d/%d) is not available for this order (at line %d).'), $id_product,
- $id_product_attribute, $current_line + 1);
- if ($unit_price_te < 0)
- $this->errors[] = sprintf($this->l('Unit Price (tax excl.) (%d) is not valid (at line %d).'), $unit_price_te, $current_line + 1);
- if ($quantity_expected < 0)
- $this->errors[] = sprintf($this->l('Quantity Expected (%d) is not valid (at line %d).'), $quantity_expected, $current_line + 1);
- if ($discount_rate < 0 || $discount_rate > 100)
- $this->errors[] = sprintf($this->l('Discount rate (%d) is not valid (at line %d). %s.'), $discount_rate,
- $current_line + 1, $this->l('Format: Between 0 and 100'));
- if ($tax_rate < 0 || $tax_rate > 100)
- $this->errors[] = sprintf($this->l('Quantity Expected (%d) is not valid (at line %d).'), $tax_rate,
- $current_line + 1, $this->l('Format: Between 0 and 100'));
-
- // if no errors, sets supply order details
- if (empty($this->errors))
- {
- // resets order if needed
- if ($reset)
- {
- $supply_order->resetProducts();
- $reset = false;
- }
-
- // creates new product
- $supply_order_detail = new SupplyOrderDetail();
- AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $supply_order_detail);
-
- // sets parameters
- $supply_order_detail->id_supply_order = $supply_order->id;
- $currency = new Currency($supply_order->id_ref_currency);
- $supply_order_detail->id_currency = $currency->id;
- $supply_order_detail->exchange_rate = $currency->conversion_rate;
- $supply_order_detail->supplier_reference = $supplier_reference;
- $supply_order_detail->name = Product::getProductName($id_product, $id_product_attribute, $supply_order->id_lang);
-
- // gets ean13 / ref / upc
- $query = new DbQuery();
- $query->select('
- IFNULL(pa.reference, IFNULL(p.reference, \'\')) as reference,
- IFNULL(pa.ean13, IFNULL(p.ean13, \'\')) as ean13,
- IFNULL(pa.upc, IFNULL(p.upc, \'\')) as upc
- ');
- $query->from('product', 'p');
- $query->leftJoin('product_attribute', 'pa', 'pa.id_product = p.id_product AND id_product_attribute = '.(int)$id_product_attribute);
- $query->where('p.id_product = '.(int)$id_product);
- $query->where('p.is_virtual = 0 AND p.cache_is_pack = 0');
- $res = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
- $product_infos = $res['0'];
-
- $supply_order_detail->reference = $product_infos['reference'];
- $supply_order_detail->ean13 = $product_infos['ean13'];
- $supply_order_detail->upc = $product_infos['upc'];
-
- $supply_order_detail->add();
- $supply_order->update();
- unset($supply_order_detail);
-
- }
- }
- }
-
- // closes
- $this->closeCsvFile($handle);
- }
-
- public function utf8EncodeArray($array)
- {
- return (is_array($array) ? array_map('utf8_encode', $array) : utf8_encode($array));
- }
-
- protected function getNbrColumn($handle, $glue)
- {
- $tmp = fgetcsv($handle, MAX_LINE_SIZE, $glue);
- AdminImportController::rewindBomAware($handle);
- return count($tmp);
- }
-
- protected static function usortFiles($a, $b)
- {
- $a = strrev(substr(strrev($a), 0, 14));
- $b = strrev(substr(strrev($b), 0, 14));
-
- if ($a == $b)
- return 0;
-
- return ($a < $b) ? 1 : -1;
- }
-
- protected function openCsvFile()
- {
- $handle = fopen(_PS_ADMIN_DIR_.'/import/'.strval(preg_replace('/\.{2,}/', '.', Tools::getValue('csv'))), 'r');
-
- if (!$handle)
- $this->errors[] = Tools::displayError('Cannot read the .CSV file');
-
- AdminImportController::rewindBomAware($handle);
-
- for ($i = 0; $i < (int)Tools::getValue('skip'); ++$i)
- $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator);
- return $handle;
- }
-
- protected function closeCsvFile($handle)
- {
- fclose($handle);
- }
-
- protected function truncateTables($case)
- {
- switch ((int)$case)
- {
- case $this->entities[$this->l('Categories')]:
- Db::getInstance()->execute('
- DELETE FROM `'._DB_PREFIX_.'category`
- WHERE id_category NOT IN ('.(int)Configuration::get('PS_HOME_CATEGORY').
- ', '.(int)Configuration::get('PS_ROOT_CATEGORY').')');
- Db::getInstance()->execute('
- DELETE FROM `'._DB_PREFIX_.'category_lang`
- WHERE id_category NOT IN ('.(int)Configuration::get('PS_HOME_CATEGORY').
- ', '.(int)Configuration::get('PS_ROOT_CATEGORY').')');
- Db::getInstance()->execute('
- DELETE FROM `'._DB_PREFIX_.'category_shop`
- WHERE `id_category` NOT IN ('.(int)Configuration::get('PS_HOME_CATEGORY').
- ', '.(int)Configuration::get('PS_ROOT_CATEGORY').')');
- Db::getInstance()->execute('ALTER TABLE `'._DB_PREFIX_.'category` AUTO_INCREMENT = 3');
- foreach (scandir(_PS_CAT_IMG_DIR_) as $d)
- if (preg_match('/^[0-9]+(\-(.*))?\.jpg$/', $d))
- unlink(_PS_CAT_IMG_DIR_.$d);
- break;
- case $this->entities[$this->l('Products')]:
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_shop');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'feature_product');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_lang');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'category_product');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_tag');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'image');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'image_lang');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'image_shop');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'specific_price');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'specific_price_priority');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_carrier');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'cart_product');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'compare_product');
- if (count(Db::getInstance()->executeS('SHOW TABLES LIKE \''._DB_PREFIX_.'favorite_product\' '))) //check if table exist
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'favorite_product');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attachment');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_country_tax');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_download');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_group_reduction_cache');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_sale');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_supplier');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'scene_products');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'warehouse_product_location');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'stock');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'stock_available');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'stock_mvt');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'customization');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'customization_field');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supply_order_detail');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_impact');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute_shop`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute_combination`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute_image`');
- Image::deleteAllImages(_PS_PROD_IMG_DIR_);
- if (!file_exists(_PS_PROD_IMG_DIR_))
- mkdir(_PS_PROD_IMG_DIR_);
- break;
- case $this->entities[$this->l('Combinations')]:
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_impact');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_lang`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_group`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_group_lang`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_group_shop`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_shop`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute_shop`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute_combination`');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute_image`');
- Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'stock_available` WHERE id_product_attribute !=0');
- break;
- case $this->entities[$this->l('Customers')]:
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'customer');
- break;
- case $this->entities[$this->l('Addresses')]:
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'address');
- break;
- case $this->entities[$this->l('Manufacturers')]:
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'manufacturer');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'manufacturer_lang');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'manufacturer_shop');
- foreach (scandir(_PS_MANU_IMG_DIR_) as $d)
- if (preg_match('/^[0-9]+(\-(.*))?\.jpg$/', $d))
- unlink(_PS_MANU_IMG_DIR_.$d);
- break;
- case $this->entities[$this->l('Suppliers')]:
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supplier');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supplier_lang');
- Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supplier_shop');
- foreach (scandir(_PS_SUPP_IMG_DIR_) as $d)
- if (preg_match('/^[0-9]+(\-(.*))?\.jpg$/', $d))
- unlink(_PS_SUPP_IMG_DIR_.$d);
- break;
- }
- Image::clearTmpDir();
- return true;
- }
-
- public function clearSmartyCache()
- {
- Tools::enableCache();
- Tools::clearCache($this->context->smarty);
- Tools::restoreCacheSettings();
- }
-
- public function postProcess()
- {
- /* PrestaShop demo mode */
- if (_PS_MODE_DEMO_)
- {
- $this->errors[] = Tools::displayError('This functionality has been disabled.');
- return;
- }
- /* PrestaShop demo mode*/
-
- if (Tools::isSubmit('submitFileUpload'))
- {
- if (isset($_FILES['file']) && !empty($_FILES['file']['error']))
- {
- switch ($_FILES['file']['error'])
- {
- case UPLOAD_ERR_INI_SIZE:
- $this->errors[] = Tools::displayError('The uploaded file exceeds the upload_max_filesize directive in php.ini. If your server configuration allows it, you may add a directive in your .htaccess.');
- break;
- case UPLOAD_ERR_FORM_SIZE:
- $this->errors[] = Tools::displayError('The uploaded file exceeds the post_max_size directive in php.ini.
- If your server configuration allows it, you may add a directive in your .htaccess, for example:')
- .'
- php_value post_max_size 20M '.
- Tools::displayError('(click to open "Generators" page)').'';
- break;
- break;
- case UPLOAD_ERR_PARTIAL:
- $this->errors[] = Tools::displayError('The uploaded file was only partially uploaded.');
- break;
- break;
- case UPLOAD_ERR_NO_FILE:
- $this->errors[] = Tools::displayError('No file was uploaded.');
- break;
- break;
- }
- }
- else if (!file_exists($_FILES['file']['tmp_name']) ||
- !@move_uploaded_file($_FILES['file']['tmp_name'], _PS_ADMIN_DIR_.'/import/'.date('Ymdhis').'-'.$_FILES['file']['name']))
- $this->errors[] = $this->l('An error occurred while uploading / copying the file.');
- else
- Tools::redirectAdmin(self::$currentIndex.'&token='.Tools::getValue('token').'&conf=18');
- }
- else if (Tools::getValue('import'))
- {
- // Check if the CSV file exist
- if (Tools::getValue('csv'))
- {
- // If i am a superadmin, i can truncate table
- if (((Shop::isFeatureActive() && $this->context->employee->isSuperAdmin()) || !Shop::isFeatureActive()) && Tools::getValue('truncate'))
- $this->truncateTables((int)Tools::getValue('entity'));
- $import_type = false;
- switch ((int)Tools::getValue('entity'))
- {
- case $this->entities[$import_type = $this->l('Categories')]:
- $this->categoryImport();
- $this->clearSmartyCache();
- break;
- case $this->entities[$import_type = $this->l('Products')]:
- $import_type = $this->l('Categories');
- $this->productImport();
- $this->clearSmartyCache();
- break;
- case $this->entities[$import_type = $this->l('Customers')]:
- $this->customerImport();
- break;
- case $this->entities[$import_type = $this->l('Addresses')]:
- $this->addressImport();
- break;
- case $this->entities[$import_type = $this->l('Combinations')]:
- $this->attributeImport();
- $this->clearSmartyCache();
- break;
- case $this->entities[$import_type = $this->l('Manufacturers')]:
- $this->manufacturerImport();
- $this->clearSmartyCache();
- break;
- case $this->entities[$import_type = $this->l('Suppliers')]:
- $this->supplierImport();
- $this->clearSmartyCache();
- break;
- // @since 1.5.0
- case $this->entities[$import_type = $this->l('Supply Orders')]:
- if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'))
- $this->supplyOrdersImport();
- break;
- // @since 1.5.0
- case $this->entities[$import_type = $this->l('Supply Order Details')]:
- if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'))
- $this->supplyOrdersDetailsImport();
- break;
- default:
- $this->errors[] = $this->l('Please select what you would like to import');
- }
- if ($import_type !== false)
- {
- $log_message = sprintf($this->l('%s import'), $import_type);
- if (Tools::getValue('truncate'))
- $log_message .= ' '.$this->l('with truncate');
- Logger::addLog($log_message, 1, null, $import_type, null, true, (int)$this->context->employee->id);
- }
- }
- else
- $this->errors[] = $this->l('You must upload a file in order to proceed to the next step');
- }
-
- parent::postProcess();
- }
-
- public static function setLocale()
- {
- $iso_lang = trim(Tools::getValue('iso_lang'));
- setlocale(LC_COLLATE, strtolower($iso_lang).'_'.strtoupper($iso_lang).'.UTF-8');
- setlocale(LC_CTYPE, strtolower($iso_lang).'_'.strtoupper($iso_lang).'.UTF-8');
- }
-
- protected function addProductWarning($product_name, $product_id = null, $message = '')
- {
- $this->warnings[] = $product_name.(isset($product_id) ? ' (ID '.$product_id.')' : '').' '.Tools::displayError($message);
- }
-
- public function ajaxProcessSaveImportMatchs()
- {
- if ($this->tabAccess['edit'] === '1')
- {
- $match = implode('|', Tools::getValue('type_value'));
- Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'import_match` (
- `id_import_match` ,
- `name` ,
- `match`,
- `skip`
- )
- VALUES (
- NULL ,
- \''.pSQL(Tools::getValue('newImportMatchs')).'\',
- \''.pSQL($match).'\',
- \''.pSQL(Tools::getValue('skip')).'\'
- )');
-
- die('{"id" : "'.Db::getInstance()->Insert_ID().'"}');
- }
- }
-
- public function ajaxProcessLoadImportMatchs()
- {
- if ($this->tabAccess['edit'] === '1')
- {
- $return = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'import_match` WHERE `id_import_match` = '.(int)Tools::getValue('idImportMatchs'));
- die('{"id" : "'.$return[0]['id_import_match'].'", "matchs" : "'.$return[0]['match'].'", "skip" : "'.$return[0]['skip'].'"}');
- }
- }
-
- public function ajaxProcessDeleteImportMatchs()
- {
- if ($this->tabAccess['edit'] === '1')
- {
- Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'import_match` WHERE `id_import_match` = '.(int)Tools::getValue('idImportMatchs'));
- die;
- }
- }
-}
\ No newline at end of file
+ if (isset($cat_moved[$category->parent
\ No newline at end of file