From e5053ed412f2eb01d1308321e92c99e5b91fc6ff Mon Sep 17 00:00:00 2001 From: lLefevre Date: Mon, 23 Jul 2012 15:06:06 +0000 Subject: [PATCH] [-] BO : fix #PSCFV-3207 && normalize --- classes/Tag.php | 4 +- controllers/admin/AdminImportController.php | 87 +++++++++++---------- 2 files changed, 49 insertions(+), 42 deletions(-) diff --git a/classes/Tag.php b/classes/Tag.php index ffb393a13..cbb123983 100644 --- a/classes/Tag.php +++ b/classes/Tag.php @@ -92,13 +92,13 @@ class TagCore extends ObjectModel * @param string|array $tag_list List of tags, as array or as a string with comas * @return boolean Operation success */ - public static function addTags($id_lang, $id_product, $tag_list) + public static function addTags($id_lang, $id_product, $tag_list, $separator = ',') { if (!Validate::isUnsignedId($id_lang)) return false; if (!is_array($tag_list)) - $tag_list = array_unique(array_map('trim', preg_split('/,/', $tag_list, null, PREG_SPLIT_NO_EMPTY))); + $tag_list = array_unique(array_map('trim', preg_split('#\\'.$separator.'#', $tag_list, null, PREG_SPLIT_NO_EMPTY))); $list = array(); foreach ($tag_list as $tag) diff --git a/controllers/admin/AdminImportController.php b/controllers/admin/AdminImportController.php index 7e670a177..0023d00b6 100644 --- a/controllers/admin/AdminImportController.php +++ b/controllers/admin/AdminImportController.php @@ -76,6 +76,9 @@ class AdminImportControllerCore extends AdminController 'online_only' => array('AdminImportController', 'getBoolean') ); + public $separator; + public $multiple_value_separator; + public function __construct() { $this->entities = array( @@ -423,6 +426,13 @@ class AdminImportControllerCore extends AdminController } } + $this->separator = strval(trim(Tools::getValue('separator', ';'))); + + if (is_null(Tools::getValue('multiple_value_separator')) || trim(Tools::getValue('multiple_value_separator')) == '') + $this->multiple_value_separator = ','; + else + $this->multiple_value_separator = Tools::getValue('multiple_value_separator'); + parent::__construct(); } @@ -474,9 +484,8 @@ class AdminImportControllerCore extends AdminController { $this->addJS(_PS_JS_DIR_.'adminImport.js'); - $glue = Tools::getValue('separator', ';'); $handle = $this->openCsvFile(); - $nb_column = $this->getNbrColumn($handle, $glue); + $nb_column = $this->getNbrColumn($handle, $this->separator); $nb_table = ceil($nb_column / MAX_COLUMNS); $res = array(); @@ -485,7 +494,7 @@ class AdminImportControllerCore extends AdminController $data = array(); for ($i = 0; $i < $nb_table; $i++) - $data[$i] = $this->generateContentTable($i, $nb_column, $handle, $glue); + $data[$i] = $this->generateContentTable($i, $nb_column, $handle, $this->separator); $this->tpl_view_vars = array( 'import_matchs' => Db::getInstance()->executeS('SELECT * FROM '._DB_PREFIX_.'import_match'), @@ -496,8 +505,8 @@ class AdminImportControllerCore extends AdminController 'iso_lang' => Tools::getValue('iso_lang'), 'truncate' => Tools::getValue('truncate'), 'match_ref' => Tools::getValue('match_ref'), - 'separator' => strval(trim(Tools::getValue('separator'))), - 'multiple_value_separator' => strval(trim(Tools::getValue('multiple_value_separator'))) + 'separator' => $this->separator, + 'multiple_value_separator' => $this->multiple_value_separator ), 'nb_table' => $nb_table, 'nb_column' => $nb_column, @@ -515,7 +524,6 @@ class AdminImportControllerCore extends AdminController { switch ($this->display) { - // @todo defining default buttons case 'import': // Default cancel button - like old back link $back = Tools::safeOutput(Tools::getValue('back', '')); @@ -719,7 +727,7 @@ class AdminImportControllerCore extends AdminController $res = array(); foreach (self::$column_mask as $type => $nb) $res[$type] = isset($row[$nb]) ? $row[$nb] : null; - + if (Tools::getValue('truncate')) //if you choose to truncate table before import the column id is remove from the CSV file. unset($res['id']); @@ -828,7 +836,7 @@ class AdminImportControllerCore extends AdminController $handle = $this->openCsvFile(); $default_language_id = (int)Configuration::get('PS_LANG_DEFAULT'); AdminImportController::setLocale(); - for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); $current_line++) + for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++) { if (Tools::getValue('convert')) $line = $this->utf8EncodeArray($line); @@ -957,7 +965,7 @@ class AdminImportControllerCore extends AdminController DELETE FROM '._DB_PREFIX_.'category_shop WHERE id_category = '.(int)$category->id ); - $info['shop'] = explode(',', $info['shop']); + $info['shop'] = explode($this->multiple_value_separator, $info['shop']); foreach ($info['shop'] as $shop) if (!is_numeric($shop)) $category->addShop(Shop::getIdByName($shop)); @@ -979,7 +987,7 @@ class AdminImportControllerCore extends AdminController $handle = $this->openCsvFile(); $default_language_id = (int)Configuration::get('PS_LANG_DEFAULT'); AdminImportController::setLocale(); - for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); $current_line++) + for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++) { if (Tools::getValue('convert')) $line = $this->utf8EncodeArray($line); @@ -1001,7 +1009,7 @@ class AdminImportControllerCore extends AdminController if (!Shop::isFeatureActive() || !isset($product->shop) || empty($product->shop)) $product->shop = 1; // link product to shops - $product->id_shop_list = explode(',', $product->shop); + $product->id_shop_list = explode($this->multiple_value_separator, $product->shop); if ((int)$product->id_tax_rules_group != 0) { @@ -1176,6 +1184,12 @@ class AdminImportControllerCore extends AdminController $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); + $res = false; $field_error = $product->validateFields(UNFRIENDLY_ERROR, true); $lang_field_error = $product->validateFieldsLang(UNFRIENDLY_ERROR, true); @@ -1219,7 +1233,7 @@ class AdminImportControllerCore extends AdminController } $shops = array(); - $product_shop = explode(',', $product->shop); + $product_shop = explode($this->multiple_value_separator, $product->shop); foreach ($product_shop as $shop) { $shop = trim($shop); @@ -1286,20 +1300,18 @@ class AdminImportControllerCore extends AdminController // Delete tags for this id product, for no duplicating error Tag::deleteTagsForProduct($product->id); - $tag = new Tag(); 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); + $is_tag_added = Tag::addTags($key, $product->id, $tags, $this->multiple_value_separator); if (!$is_tag_added) { $this->addProductWarning($info['name'], $product->id, $this->l('Tags list is invalid')); break; } } - } else { @@ -1307,10 +1319,10 @@ class AdminImportControllerCore extends AdminController { $str = ''; foreach ($tags as $one_tag) - $str .= $one_tag.','; - $str = rtrim($str, ','); + $str .= $one_tag.$this->multiple_value_separator; + $str = rtrim($str, $this->multiple_value_separator); - $is_tag_added = $tag->addTags($key, $product->id, $str); + $is_tag_added = Tag::addTags($key, $product->id, $str, $this->multiple_value_separator); if (!$is_tag_added) { $this->addProductWarning($info['name'], $product->id, 'Invalid tag(s) ('.$str.')'); @@ -1360,9 +1372,7 @@ class AdminImportControllerCore extends AdminController $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)) @@ -1372,7 +1382,7 @@ class AdminImportControllerCore extends AdminController $features = get_object_vars($product); if (isset($features['features']) && !empty($features['features'])) - foreach (explode(',', $features['features']) as $single_feature) + foreach (explode($this->multiple_value_separator, $features['features']) as $single_feature) { $tab_feature = explode(':', $single_feature); $feature_name = trim($tab_feature[0]); @@ -1417,9 +1427,8 @@ class AdminImportControllerCore extends AdminController $this->receiveTab(); $handle = $this->openCsvFile(); - $fsep = ((is_null(Tools::getValue('multiple_value_separator')) || trim(Tools::getValue('multiple_value_separator')) == '' ) ? ',' : Tools::getValue('multiple_value_separator')); AdminImportController::setLocale(); - for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); $current_line++) + for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++) { if (count($line) == 1 && empty($line[0])) continue; @@ -1432,7 +1441,7 @@ class AdminImportControllerCore extends AdminController AdminImportController::setDefaultValues($info); // Get shops for each attributes - $info['shop'] = explode(',', $info['shop']); + $info['shop'] = explode($this->multiple_value_separator, $info['shop']); $id_shop_list = array(); foreach ($info['shop'] as $shop) if (!is_numeric($shop)) @@ -1505,7 +1514,7 @@ class AdminImportControllerCore extends AdminController $id_attribute_group = 0; // groups $groups_attributes = array(); - foreach (explode($fsep, $info['group']) as $key => $group) + foreach (explode($this->multiple_value_separator, $info['group']) as $key => $group) { $tab_group = explode(':', $group); $group = trim($tab_group[0]); @@ -1559,7 +1568,7 @@ class AdminImportControllerCore extends AdminController $attributes_to_add = array(); // for each attribute - foreach (explode($fsep, $info['attribute']) as $key => $attribute) + foreach (explode($this->multiple_value_separator, $info['attribute']) as $key => $attribute) { $tab_attribute = explode(':', $attribute); $attribute = trim($tab_attribute[0]); @@ -1695,7 +1704,7 @@ class AdminImportControllerCore extends AdminController $this->receiveTab(); $handle = $this->openCsvFile(); AdminImportController::setLocale(); - for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); $current_line++) + for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++) { if (Tools::getValue('convert')) $line = $this->utf8EncodeArray($line); @@ -1723,8 +1732,8 @@ class AdminImportControllerCore extends AdminController if ($customer->passwd) $customer->passwd = Tools::encrypt($customer->passwd); - - $id_shop_list = explode(',', $customer->id_shop); + + $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')); @@ -1771,7 +1780,7 @@ class AdminImportControllerCore extends AdminController $customer->id = $current_id_customer; $res &= $customer->update(); } - + else { unset($customer->id); @@ -1811,9 +1820,7 @@ class AdminImportControllerCore extends AdminController Db::getInstance()->insert('address', $address); } } - } - } } $customer_exist = false; @@ -1837,7 +1844,7 @@ class AdminImportControllerCore extends AdminController $default_language_id = (int)Configuration::get('PS_LANG_DEFAULT'); $handle = $this->openCsvFile(); AdminImportController::setLocale(); - for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); $current_line++) + for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++) { if (Tools::getValue('convert')) $line = $this->utf8EncodeArray($line); @@ -2021,7 +2028,7 @@ class AdminImportControllerCore extends AdminController $this->receiveTab(); $handle = $this->openCsvFile(); AdminImportController::setLocale(); - for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); $current_line++) + for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++) { if (Tools::getValue('convert')) $line = $this->utf8EncodeArray($line); @@ -2053,7 +2060,7 @@ class AdminImportControllerCore extends AdminController DELETE FROM '._DB_PREFIX_.'manufacturer_shop WHERE id_manufacturer = '.(int)$manufacturer->id ); - $manufacturer->shop = explode(',', $manufacturer->shop); + $manufacturer->shop = explode($this->multiple_value_separator, $manufacturer->shop); $shops = array(); foreach ($manufacturer->shop as $shop) { @@ -2086,7 +2093,7 @@ class AdminImportControllerCore extends AdminController $this->receiveTab(); $handle = $this->openCsvFile(); AdminImportController::setLocale(); - for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); $current_line++) + for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++) { if (Tools::getValue('convert')) $line = $this->utf8EncodeArray($line); @@ -2124,7 +2131,7 @@ class AdminImportControllerCore extends AdminController DELETE FROM '._DB_PREFIX_.'supplier_shop WHERE id_supplier = '.(int)$supplier->id ); - $supplier->shop = explode(',', $supplier->shop); + $supplier->shop = explode($this->multiple_value_separator, $supplier->shop); $shops = array(); foreach ($supplier->shop as $shop) { @@ -2157,7 +2164,7 @@ class AdminImportControllerCore extends AdminController AdminImportController::setLocale(); // main loop, for each supply orders to import - for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); ++$current_line) + for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); ++$current_line) { // if convert requested if (Tools::getValue('convert')) @@ -2255,7 +2262,7 @@ class AdminImportControllerCore extends AdminController $products = array(); $reset = true; // main loop, for each supply orders details to import - for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); ++$current_line) + for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); ++$current_line) { // if convert requested if (Tools::getValue('convert')) @@ -2401,7 +2408,7 @@ class AdminImportControllerCore extends AdminController AdminImportController::rewindBomAware($handle); for ($i = 0; $i < (int)Tools::getValue('skip'); ++$i) - $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator', ';')); + $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); return $handle; }