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