[-] BO : fix #PSCFV-3207 && normalize

This commit is contained in:
lLefevre
2012-07-23 15:06:06 +00:00
parent 9e8546946b
commit e5053ed412
2 changed files with 49 additions and 42 deletions
+2 -2
View File
@@ -92,13 +92,13 @@ class TagCore extends ObjectModel
* @param string|array $tag_list List of tags, as array or as a string with comas * @param string|array $tag_list List of tags, as array or as a string with comas
* @return boolean Operation success * @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)) if (!Validate::isUnsignedId($id_lang))
return false; return false;
if (!is_array($tag_list)) 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(); $list = array();
foreach ($tag_list as $tag) foreach ($tag_list as $tag)
+44 -37
View File
@@ -76,6 +76,9 @@ class AdminImportControllerCore extends AdminController
'online_only' => array('AdminImportController', 'getBoolean') 'online_only' => array('AdminImportController', 'getBoolean')
); );
public $separator;
public $multiple_value_separator;
public function __construct() public function __construct()
{ {
$this->entities = array( $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(); parent::__construct();
} }
@@ -474,9 +484,8 @@ class AdminImportControllerCore extends AdminController
{ {
$this->addJS(_PS_JS_DIR_.'adminImport.js'); $this->addJS(_PS_JS_DIR_.'adminImport.js');
$glue = Tools::getValue('separator', ';');
$handle = $this->openCsvFile(); $handle = $this->openCsvFile();
$nb_column = $this->getNbrColumn($handle, $glue); $nb_column = $this->getNbrColumn($handle, $this->separator);
$nb_table = ceil($nb_column / MAX_COLUMNS); $nb_table = ceil($nb_column / MAX_COLUMNS);
$res = array(); $res = array();
@@ -485,7 +494,7 @@ class AdminImportControllerCore extends AdminController
$data = array(); $data = array();
for ($i = 0; $i < $nb_table; $i++) 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( $this->tpl_view_vars = array(
'import_matchs' => Db::getInstance()->executeS('SELECT * FROM '._DB_PREFIX_.'import_match'), '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'), 'iso_lang' => Tools::getValue('iso_lang'),
'truncate' => Tools::getValue('truncate'), 'truncate' => Tools::getValue('truncate'),
'match_ref' => Tools::getValue('match_ref'), 'match_ref' => Tools::getValue('match_ref'),
'separator' => strval(trim(Tools::getValue('separator'))), 'separator' => $this->separator,
'multiple_value_separator' => strval(trim(Tools::getValue('multiple_value_separator'))) 'multiple_value_separator' => $this->multiple_value_separator
), ),
'nb_table' => $nb_table, 'nb_table' => $nb_table,
'nb_column' => $nb_column, 'nb_column' => $nb_column,
@@ -515,7 +524,6 @@ class AdminImportControllerCore extends AdminController
{ {
switch ($this->display) switch ($this->display)
{ {
// @todo defining default buttons
case 'import': case 'import':
// Default cancel button - like old back link // Default cancel button - like old back link
$back = Tools::safeOutput(Tools::getValue('back', '')); $back = Tools::safeOutput(Tools::getValue('back', ''));
@@ -828,7 +836,7 @@ class AdminImportControllerCore extends AdminController
$handle = $this->openCsvFile(); $handle = $this->openCsvFile();
$default_language_id = (int)Configuration::get('PS_LANG_DEFAULT'); $default_language_id = (int)Configuration::get('PS_LANG_DEFAULT');
AdminImportController::setLocale(); 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')) if (Tools::getValue('convert'))
$line = $this->utf8EncodeArray($line); $line = $this->utf8EncodeArray($line);
@@ -957,7 +965,7 @@ class AdminImportControllerCore extends AdminController
DELETE FROM '._DB_PREFIX_.'category_shop DELETE FROM '._DB_PREFIX_.'category_shop
WHERE id_category = '.(int)$category->id 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) foreach ($info['shop'] as $shop)
if (!is_numeric($shop)) if (!is_numeric($shop))
$category->addShop(Shop::getIdByName($shop)); $category->addShop(Shop::getIdByName($shop));
@@ -979,7 +987,7 @@ class AdminImportControllerCore extends AdminController
$handle = $this->openCsvFile(); $handle = $this->openCsvFile();
$default_language_id = (int)Configuration::get('PS_LANG_DEFAULT'); $default_language_id = (int)Configuration::get('PS_LANG_DEFAULT');
AdminImportController::setLocale(); 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')) if (Tools::getValue('convert'))
$line = $this->utf8EncodeArray($line); $line = $this->utf8EncodeArray($line);
@@ -1001,7 +1009,7 @@ class AdminImportControllerCore extends AdminController
if (!Shop::isFeatureActive() || !isset($product->shop) || empty($product->shop)) if (!Shop::isFeatureActive() || !isset($product->shop) || empty($product->shop))
$product->shop = 1; $product->shop = 1;
// link product to shops // 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) if ((int)$product->id_tax_rules_group != 0)
{ {
@@ -1176,6 +1184,12 @@ class AdminImportControllerCore extends AdminController
$product->link_rewrite = AdminImportController::createMultiLangField($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);
$res = false; $res = false;
$field_error = $product->validateFields(UNFRIENDLY_ERROR, true); $field_error = $product->validateFields(UNFRIENDLY_ERROR, true);
$lang_field_error = $product->validateFieldsLang(UNFRIENDLY_ERROR, true); $lang_field_error = $product->validateFieldsLang(UNFRIENDLY_ERROR, true);
@@ -1219,7 +1233,7 @@ class AdminImportControllerCore extends AdminController
} }
$shops = array(); $shops = array();
$product_shop = explode(',', $product->shop); $product_shop = explode($this->multiple_value_separator, $product->shop);
foreach ($product_shop as $shop) foreach ($product_shop as $shop)
{ {
$shop = trim($shop); $shop = trim($shop);
@@ -1286,20 +1300,18 @@ class AdminImportControllerCore extends AdminController
// Delete tags for this id product, for no duplicating error // Delete tags for this id product, for no duplicating error
Tag::deleteTagsForProduct($product->id); Tag::deleteTagsForProduct($product->id);
$tag = new Tag();
if (!is_array($product->tags)) if (!is_array($product->tags))
{ {
$product->tags = AdminImportController::createMultiLangField($product->tags); $product->tags = AdminImportController::createMultiLangField($product->tags);
foreach ($product->tags as $key => $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) if (!$is_tag_added)
{ {
$this->addProductWarning($info['name'], $product->id, $this->l('Tags list is invalid')); $this->addProductWarning($info['name'], $product->id, $this->l('Tags list is invalid'));
break; break;
} }
} }
} }
else else
{ {
@@ -1307,10 +1319,10 @@ class AdminImportControllerCore extends AdminController
{ {
$str = ''; $str = '';
foreach ($tags as $one_tag) foreach ($tags as $one_tag)
$str .= $one_tag.','; $str .= $one_tag.$this->multiple_value_separator;
$str = rtrim($str, ','); $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) if (!$is_tag_added)
{ {
$this->addProductWarning($info['name'], $product->id, 'Invalid tag(s) ('.$str.')'); $this->addProductWarning($info['name'], $product->id, 'Invalid tag(s) ('.$str.')');
@@ -1360,9 +1372,7 @@ class AdminImportControllerCore extends AdminController
$error = true; $error = true;
if ($error) if ($error)
{
$this->warnings[] = sprintf(Tools::displayError('Product n°%1$d: the picture cannot be saved: %2$s'), $image->id_product, $url); $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)) if (isset($product->id_category))
@@ -1372,7 +1382,7 @@ class AdminImportControllerCore extends AdminController
$features = get_object_vars($product); $features = get_object_vars($product);
if (isset($features['features']) && !empty($features['features'])) 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); $tab_feature = explode(':', $single_feature);
$feature_name = trim($tab_feature[0]); $feature_name = trim($tab_feature[0]);
@@ -1417,9 +1427,8 @@ class AdminImportControllerCore extends AdminController
$this->receiveTab(); $this->receiveTab();
$handle = $this->openCsvFile(); $handle = $this->openCsvFile();
$fsep = ((is_null(Tools::getValue('multiple_value_separator')) || trim(Tools::getValue('multiple_value_separator')) == '' ) ? ',' : Tools::getValue('multiple_value_separator'));
AdminImportController::setLocale(); 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])) if (count($line) == 1 && empty($line[0]))
continue; continue;
@@ -1432,7 +1441,7 @@ class AdminImportControllerCore extends AdminController
AdminImportController::setDefaultValues($info); AdminImportController::setDefaultValues($info);
// Get shops for each attributes // Get shops for each attributes
$info['shop'] = explode(',', $info['shop']); $info['shop'] = explode($this->multiple_value_separator, $info['shop']);
$id_shop_list = array(); $id_shop_list = array();
foreach ($info['shop'] as $shop) foreach ($info['shop'] as $shop)
if (!is_numeric($shop)) if (!is_numeric($shop))
@@ -1505,7 +1514,7 @@ class AdminImportControllerCore extends AdminController
$id_attribute_group = 0; $id_attribute_group = 0;
// groups // groups
$groups_attributes = array(); $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); $tab_group = explode(':', $group);
$group = trim($tab_group[0]); $group = trim($tab_group[0]);
@@ -1559,7 +1568,7 @@ class AdminImportControllerCore extends AdminController
$attributes_to_add = array(); $attributes_to_add = array();
// for each attribute // 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); $tab_attribute = explode(':', $attribute);
$attribute = trim($tab_attribute[0]); $attribute = trim($tab_attribute[0]);
@@ -1695,7 +1704,7 @@ class AdminImportControllerCore extends AdminController
$this->receiveTab(); $this->receiveTab();
$handle = $this->openCsvFile(); $handle = $this->openCsvFile();
AdminImportController::setLocale(); 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')) if (Tools::getValue('convert'))
$line = $this->utf8EncodeArray($line); $line = $this->utf8EncodeArray($line);
@@ -1724,7 +1733,7 @@ class AdminImportControllerCore extends AdminController
if ($customer->passwd) if ($customer->passwd)
$customer->passwd = Tools::encrypt($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 = array();
$customers_shop['shared'] = array(); $customers_shop['shared'] = array();
$default_shop = new Shop((int)Configuration::get('PS_SHOP_DEFAULT')); $default_shop = new Shop((int)Configuration::get('PS_SHOP_DEFAULT'));
@@ -1811,9 +1820,7 @@ class AdminImportControllerCore extends AdminController
Db::getInstance()->insert('address', $address); Db::getInstance()->insert('address', $address);
} }
} }
} }
} }
} }
$customer_exist = false; $customer_exist = false;
@@ -1837,7 +1844,7 @@ class AdminImportControllerCore extends AdminController
$default_language_id = (int)Configuration::get('PS_LANG_DEFAULT'); $default_language_id = (int)Configuration::get('PS_LANG_DEFAULT');
$handle = $this->openCsvFile(); $handle = $this->openCsvFile();
AdminImportController::setLocale(); 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')) if (Tools::getValue('convert'))
$line = $this->utf8EncodeArray($line); $line = $this->utf8EncodeArray($line);
@@ -2021,7 +2028,7 @@ class AdminImportControllerCore extends AdminController
$this->receiveTab(); $this->receiveTab();
$handle = $this->openCsvFile(); $handle = $this->openCsvFile();
AdminImportController::setLocale(); 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')) if (Tools::getValue('convert'))
$line = $this->utf8EncodeArray($line); $line = $this->utf8EncodeArray($line);
@@ -2053,7 +2060,7 @@ class AdminImportControllerCore extends AdminController
DELETE FROM '._DB_PREFIX_.'manufacturer_shop DELETE FROM '._DB_PREFIX_.'manufacturer_shop
WHERE id_manufacturer = '.(int)$manufacturer->id WHERE id_manufacturer = '.(int)$manufacturer->id
); );
$manufacturer->shop = explode(',', $manufacturer->shop); $manufacturer->shop = explode($this->multiple_value_separator, $manufacturer->shop);
$shops = array(); $shops = array();
foreach ($manufacturer->shop as $shop) foreach ($manufacturer->shop as $shop)
{ {
@@ -2086,7 +2093,7 @@ class AdminImportControllerCore extends AdminController
$this->receiveTab(); $this->receiveTab();
$handle = $this->openCsvFile(); $handle = $this->openCsvFile();
AdminImportController::setLocale(); 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')) if (Tools::getValue('convert'))
$line = $this->utf8EncodeArray($line); $line = $this->utf8EncodeArray($line);
@@ -2124,7 +2131,7 @@ class AdminImportControllerCore extends AdminController
DELETE FROM '._DB_PREFIX_.'supplier_shop DELETE FROM '._DB_PREFIX_.'supplier_shop
WHERE id_supplier = '.(int)$supplier->id WHERE id_supplier = '.(int)$supplier->id
); );
$supplier->shop = explode(',', $supplier->shop); $supplier->shop = explode($this->multiple_value_separator, $supplier->shop);
$shops = array(); $shops = array();
foreach ($supplier->shop as $shop) foreach ($supplier->shop as $shop)
{ {
@@ -2157,7 +2164,7 @@ class AdminImportControllerCore extends AdminController
AdminImportController::setLocale(); AdminImportController::setLocale();
// main loop, for each supply orders to import // 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 convert requested
if (Tools::getValue('convert')) if (Tools::getValue('convert'))
@@ -2255,7 +2262,7 @@ class AdminImportControllerCore extends AdminController
$products = array(); $products = array();
$reset = true; $reset = true;
// main loop, for each supply orders details to import // 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 convert requested
if (Tools::getValue('convert')) if (Tools::getValue('convert'))
@@ -2401,7 +2408,7 @@ class AdminImportControllerCore extends AdminController
AdminImportController::rewindBomAware($handle); AdminImportController::rewindBomAware($handle);
for ($i = 0; $i < (int)Tools::getValue('skip'); ++$i) 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; return $handle;
} }