From 6bb71edd158cfbdfb7fb51c4e4b5d801caf255ac Mon Sep 17 00:00:00 2001 From: "m.korolev" Date: Mon, 19 Aug 2013 10:43:59 +0400 Subject: [PATCH] Fix bugs in export encoding --- .../classes/general/ICMLLoader.php | 60 +++------ .../install/export/intarocrm_setup.php | 9 +- intaro.intarocrm/install/step4.php | 51 +++---- intaro.intarocrm/lang/export_crm.php | 109 --------------- intaro.intarocrm/lang/export_setup_templ.php | 124 ------------------ intaro.intarocrm/lang/icml_export_setup.php | 10 -- .../lang/ru/icml_export_setup.php | 2 + intaro.intarocrm/lang/ru/install/step4.php | 3 +- 8 files changed, 55 insertions(+), 313 deletions(-) delete mode 100644 intaro.intarocrm/lang/export_crm.php delete mode 100644 intaro.intarocrm/lang/export_setup_templ.php delete mode 100644 intaro.intarocrm/lang/icml_export_setup.php diff --git a/intaro.intarocrm/classes/general/ICMLLoader.php b/intaro.intarocrm/classes/general/ICMLLoader.php index c2ee5c29..4ba5659b 100644 --- a/intaro.intarocrm/classes/general/ICMLLoader.php +++ b/intaro.intarocrm/classes/general/ICMLLoader.php @@ -49,16 +49,7 @@ class ICMLLoader { $categories = $this->GetCategories(); $offers = $this->GetOffers(); - - /*foreach ($offers as $obj) - if (is_array($obj)) - foreach ($obj as $obj2) - print(htmlspecialcharsbx($obj2) . "
"); - else - print(htmlspecialcharsbx($obj) . "
"); - */ - - + $this->PrepareFile(); $this->PreWriteCatalog(); @@ -74,13 +65,7 @@ class ICMLLoader { protected function PrepareValue($text) { - - //$text = htmlspecialcharsbx($text); - //$text = str_replace('"', '"', $text); - //$text = preg_replace("/[\x1-\x8\xB-\xC\xE-\x1F]/", "", $text); - //$text = str_replace("'", "'", $text); - $text = $this->application->ConvertCharset($text, LANG_CHARSET, $this->encoding); - return $text; + return $this->application->ConvertCharset($text, LANG_CHARSET, $this->encoding); } protected function PrepareFile() @@ -96,12 +81,12 @@ class ICMLLoader { protected function PreWriteCatalog() { - @fwrite($this->fp, "\n"); + @fwrite($this->fp, "PrepareValue(Date("Y-m-d H:i:s")) . "\">\n"); @fwrite($this->fp, "\n"); - @fwrite($this->fp, "".$this->application->ConvertCharset(htmlspecialcharsbx(COption::GetOptionString("main", "site_name", "")), LANG_CHARSET, $encoding)."\n"); + @fwrite($this->fp, "". $this->PrepareValue(COption::GetOptionString("main", "site_name", ""))."\n"); - @fwrite($this->fp, "".$this->application->ConvertCharset(htmlspecialcharsbx(COption::GetOptionString("main", "site_name", "")), LANG_CHARSET, $encoding)."\n"); + @fwrite($this->fp, "".$this->PrepareValue(COption::GetOptionString("main", "site_name", ""))."\n"); } @@ -160,12 +145,12 @@ class ICMLLoader { protected function BuildCategory($arCategory) { return " - PrepareValue($arCategory["ID"]) . "\"" . ( intval($arCategory["IBLOCK_SECTION_ID"] ) > 0 ? - " parentId=\"" . $arCategory["IBLOCK_SECTION_ID"] . "\"" + " parentId=\"" . $this->PrepareValue($arCategory["IBLOCK_SECTION_ID"]) . "\"" :"") . ">" - . $arCategory["NAME"] + . $this->PrepareValue($arCategory["NAME"]) . ""; } @@ -203,7 +188,7 @@ class ICMLLoader { "ACTIVE" => "Y", "INCLUDE_SUBSECTIONS" => "Y" ); - $counter = 0; + $dbResProducts = CIBlockElement::GetList(array(), $filter, false, false, $arSelect); while ($product = $dbResProducts->GetNextElement()) { @@ -281,14 +266,12 @@ class ICMLLoader { protected function BuildOffer($arOffer, $categoriesString, $iblock) { $offer = ""; - $offer .= "\n"; - $offer .= "http://" . $iblock['IBLOCK_DB']['SERVER_NAME'] . $arOffer['DETAIL_PAGE_URL'] . "\n"; + $offer .= "PrepareValue($arOffer["ID"]) . "\" ". + "productId=\"" . $this->PrepareValue($arOffer["PRODUCT_ID"]) . "\" ". + "quantity=\"" . $this->PrepareValue(DoubleVal($arOffer['QUANTITY'])) . "\">\n"; + $offer .= "http://" . $this->PrepareValue($iblock['IBLOCK_DB']['SERVER_NAME']) . $this->PrepareValue($arOffer['DETAIL_PAGE_URL']) . "\n"; - $offer .= "" . $arOffer['PRICE'] . "\n"; + $offer .= "" . $this->PrepareValue($arOffer['PRICE']) . "\n"; $offer .= $categoriesString; $detailPicture = intval($arOffer["DETAIL_PICTURE"]); @@ -304,23 +287,22 @@ class ICMLLoader { if ($arFile = CFile::GetFileArray($picture)) { if(substr($arFile["SRC"], 0, 1) == "/") - $strFile = "http://" . $iblock['IBLOCK_DB']['SERVER_NAME'] . implode("/", array_map("rawurlencode", explode("/", $arFile["SRC"]))); + $strFile = "http://" . $this->PrepareValue($iblock['IBLOCK_DB']['SERVER_NAME']) . implode("/", array_map("rawurlencode", explode("/", $arFile["SRC"]))); elseif(preg_match("/^(http|https):\\/\\/(.*?)\\/(.*)\$/", $arFile["SRC"], $match)) - $strFile = "http://" . $match[2] . '/' . implode("/", array_map("rawurlencode", explode("/", $match[3]))); + $strFile = "http://" . $this->PrepareValue($match[2]) . '/' . implode("/", array_map("rawurlencode", explode("/", $this->PrepareValue($match[3])))); else $strFile = $arFile["SRC"]; - $offer .= "" . $strFile . "\n"; + $offer .= "" . $this->PrepareValue($strFile) . "\n"; } } $offer .= "" . $this->PrepareValue($arOffer["NAME"]) . "\n"; - $offer .= "" . (strip_tags( html_entity_decode(str_replace(" ", ' ', $this->PrepareValue($arOffer["DETAIL_TEXT"]))))) . - "\n"; + $offer .= "" . (strip_tags( html_entity_decode(str_replace(" ", ' ', $this->PrepareValue($arOffer["DETAIL_TEXT"]))))) ."\n"; - $offer .= "" . $arOffer["EXTERNAL_ID"] . "\n"; - $offer .= "" . $arOffer["PRODUCT_NAME"] . "\n"; - $offer .= "
" . $arOffer["ARTICLE"] . "
\n"; + $offer .= "" . $this->PrepareValue($arOffer["EXTERNAL_ID"]) . "\n"; + $offer .= "" . $this->PrepareValue($arOffer["PRODUCT_NAME"]) . "\n"; + $offer .= "
" . $this->PrepareValue($arOffer["ARTICLE"]) . "
\n"; $offer.= "
\n"; return $offer; diff --git a/intaro.intarocrm/install/export/intarocrm_setup.php b/intaro.intarocrm/install/export/intarocrm_setup.php index 60eee5bd..c567272a 100644 --- a/intaro.intarocrm/install/export/intarocrm_setup.php +++ b/intaro.intarocrm/install/export/intarocrm_setup.php @@ -55,7 +55,7 @@ if ($STEP==1) } $boolAll = false; - $intCountChecked = 2; + $intCountChecked = 0; $intCountAvailIBlock = 0; $arIBlockList = array(); $db_res = CIBlock::GetList(Array("IBLOCK_TYPE"=>"ASC", "NAME"=>"ASC"),array('CHECK_PERMISSIONS' => 'Y','MIN_PERMISSION' => 'W')); @@ -94,8 +94,8 @@ if ($STEP==1) } } } - if ($intCountChecked == $intCountAvailIBlock) - $boolAll = true; + $intCountChecked = $intCountAvailIBlock; + $boolAll = true; ?> @@ -189,7 +189,7 @@ if ($STEP==1) 'catalog', 'export_default_path', '/bitrix/catalog_export/')) - .'testintarocrm'/* .mt_rand(0, 999999) */.'.xml' + .'intarocrm'/* .mt_rand(0, 999999) */.'.xml' ); ?>" size="50">
@@ -249,7 +249,6 @@ if ($STEP==1) } elseif ($STEP==2) { - $FINITE = true; } diff --git a/intaro.intarocrm/install/step4.php b/intaro.intarocrm/install/step4.php index 3a5ace94..00a72f55 100644 --- a/intaro.intarocrm/install/step4.php +++ b/intaro.intarocrm/install/step4.php @@ -3,9 +3,11 @@ if(!check_bitrix_sessid()) return; IncludeModuleLangFile(__FILE__); __IncludeLang(GetLangFileName($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/intaro.intarocrm/lang/", "/icml_export_setup.php")); - -if(isset($arResult['errCode']) && $arResult['errCode']) - echo CAdminMessage::ShowMessage(GetMessage($arResult['errCode'])); +?> +

+


@@ -14,7 +16,7 @@ if(isset($arResult['errCode']) && $arResult['errCode']) { $IBLOCK_EXPORT = array(); } - + $boolAll = false; $intCountChecked = 0; $intCountAvailIBlock = 0; @@ -35,10 +37,10 @@ if(isset($arResult['errCode']) && $arResult['errCode']) $db_properties = CIBlock::GetProperties($res['ID'], Array()); $properties = Array(); - while($prop = $db_properties->Fetch()) + while($prop = $db_properties->Fetch()) $properties[] = $prop; - - + + $boolExport = (in_array($res['ID'],$IBLOCK_EXPORT)); $arIBlockList[] = array( 'ID' => $res['ID'], @@ -48,7 +50,7 @@ if(isset($arResult['errCode']) && $arResult['errCode']) 'PROPERTIES' => $properties, 'SITE_LIST' => '('.implode(' ',$arSiteList).')', ); - + if ($boolExport) $intCountChecked++; $intCountAvailIBlock++; @@ -57,11 +59,11 @@ if(isset($arResult['errCode']) && $arResult['errCode']) } $intCountChecked = $intCountAvailIBlock; $boolAll = true; - + ?> - - - + + + @@ -152,35 +154,35 @@ if(isset($arResult['errCode']) && $arResult['errCode']) '/bitrix/catalog_export/')) .'intarocrm'/* .mt_rand(0, 999999) */.'.xml' ); ?>" size="50"> - +


- +





-
+
 


- +
  - " size="30">


- + - - + + - + @@ -228,4 +230,3 @@ if(isset($arResult['errCode']) && $arResult['errCode']) - diff --git a/intaro.intarocrm/lang/export_crm.php b/intaro.intarocrm/lang/export_crm.php deleted file mode 100644 index 1d7584ba..00000000 --- a/intaro.intarocrm/lang/export_crm.php +++ /dev/null @@ -1,109 +0,0 @@ -http://partner.market.yandex.ru/legal/tt/"; -$MESS["YANDEX_PROPS_COMMON"] = "Общие настройки"; -$MESS["YANDEX_PROPS_TYPE"] = "Настройки типа описания"; -$MESS["YANDEX_PROPS_NO"] = "нет"; -$MESS["YANDEX_PROPS_ADDITIONAL"] = "Дополнительные свойства для выгрузки"; -$MESS["YANDEX_PROPS_ADDITIONAL_TITLE"] = "Выберите свойства"; -$MESS["YANDEX_PROPS_ADDITIONAL_MORE"] = "Еще"; -$MESS["YANDEX_PRICES"] = "Цены"; -$MESS["YANDEX_PRICE_TYPE"] = "Выводить цену"; -$MESS["YANDEX_PRICE_TYPE_NONE"] = "оптимальную"; -$MESS["YANDEX_CURRENCIES"] = "Валюты"; -$MESS["YANDEX_CURRENCY"] = "валюта"; -$MESS["YANDEX_CURRENCY_RATE"] = "курс"; -$MESS["YANDEX_CURRENCY_RATE_SITE"] = "сайт"; -$MESS["YANDEX_CURRENCY_RATE_CBRF"] = "Центральный банк РФ"; -$MESS["YANDEX_CURRENCY_RATE_NBU"] = "Национальный банк Украины"; -$MESS["YANDEX_CURRENCY_RATE_NBK"] = "Национальный банк Казахстана"; -$MESS["YANDEX_CURRENCY_RATE_CB"] = "банк своего региона"; -$MESS["YANDEX_CURRENCY_PLUS"] = "коррекция курса"; -$MESS["YANDEX_PARAMS_TITLE"] = "Свойство"; -$MESS["YANDEX_ERR_NO_ACCESS_IBLOCK_SKU"] = "Нет доступа к инфоблоку торговых предложений"; -$MESS["YANDEX_ERR_NO_IBLOCK_SKU_FOUND"] = "Инфоблок торговых предложений #ID# не найден"; -$MESS["YANDEX_ERR_NO_IBLOCK_FOUND_EXT"] = "Инфоблок #ID# не найден"; -$MESS["YANDEX_ERR_NO_IBLOCK_IS_CATALOG"] = "Инфоблок #ID# не является торговым каталогом и не имеет торговых предложений"; -$MESS["YANDEX_ERR_NO_SECTION_LIST"] = "Список разделов не задан"; -$MESS["YANDEX_ERR_FILE_ACCESS_DENIED"] = "Недостаточно прав для перезаписи файла #FILE#"; -$MESS["YANDEX_ERR_FILE_OPEN_WRITING"] = "Невозможно открыть файл #FILE# для записи"; -$MESS["YANDEX_ERR_SETUP_FILE_WRITE"] = "Запись в файл #FILE# невозможна"; -$MESS["YANDEX_PRODUCT_PROPS"] = "--- Инфоблок товаров ---"; -$MESS["YANDEX_OFFERS_PROPS"] = "--- Инфоблок торговых предложений ---"; -$MESS["YANDEX_SKU_SETTINGS"] = "Выгрузка торговых предложений"; -$MESS["YANDEX_OFFERS_SELECT"] = "Условие отбора"; -$MESS["YANDEX_SKU_EXPORT_ALL_TITLE"] = "Все предложения товара"; -$MESS["YANDEX_SKU_EXPORT_MIN_PRICE_TITLE"] = "Предложение с минимальной ценой"; -$MESS["YANDEX_SKU_EXPORT_PROP_TITLE"] = "Отбор по свойству"; -$MESS["YANDEX_SKU_EXPORT_PROP_ID"] = "Свойство"; -$MESS["YANDEX_SKU_EXPORT_PROP_COND"] = "Условие отбора"; -$MESS["YANDEX_SKU_EXPORT_PROP_VALUE"] = "Значения"; -$MESS["YANDEX_SKU_EXPORT_PROP_EMPTY"] = "--- выберите свойство ---"; -$MESS["YANDEX_SKU_EXPORT_PROP_SELECT_ZERO"] = "пусто"; -$MESS["YANDEX_SKU_EXPORT_PROP_SELECT_NONZERO"] = "не пусто"; -$MESS["YANDEX_SKU_EXPORT_PROP_SELECT_EQUAL"] = "равно"; -$MESS["YANDEX_SKU_EXPORT_PROP_SELECT_NONEQUAL"] = "не равно"; -$MESS["YANDEX_SKU_EXPORT_ERR_CONDITION_ABSENT"] = "Не указано, по какому принципу фильтровать экспортируемые торговые предложения"; -$MESS["YANDEX_SKU_EXPORT_ERR_PROPERTY_ABSENT"] = "Не указано свойство, по значению которого фильтруются торговые предложения"; -$MESS["YANDEX_SKU_EXPORT_ERR_PROPERTY_COND_ABSENT"] = "Не указано условие фильтрации торговых предложений по свойству"; -$MESS["YANDEX_SKU_EXPORT_ERR_PROPERTY_VALUES_ABSENT"] = "Не указаны значения свойств для фильтрации торговых предложений"; -$MESS["YANDEX_SAVE_ERR"] = "Ошибки сохранения"; -$MESS["YANDEX_ERR_BAD_PRICE_TYPE"] = "Задан неверный тип цен для выгрузки"; -$MESS["YANDEX_ERR_BAD_OFFERS_IBLOCK_ID"] = "Неверный ID инфоблока торговых предложений"; -$MESS["YANDEX_ERR_SKU_SETTINGS_ABSENT"] = "Отсутствуют настройки экспорта торговых предложений"; -$MESS["YANDEX_ROOT_DIRECTORY"] = "Основной раздел каталога"; -$MESS["CET_ERROR_IBLOCK_PERM"] = "Недостаточно прав для работы с инфоблоком ##IBLOCK_ID#"; -$MESS["CES_ERROR_BAD_EXPORT_FILENAME"] = "Имя файла экспорта содержит запрещенные символы"; \ No newline at end of file diff --git a/intaro.intarocrm/lang/export_setup_templ.php b/intaro.intarocrm/lang/export_setup_templ.php deleted file mode 100644 index 91f43fbc..00000000 --- a/intaro.intarocrm/lang/export_setup_templ.php +++ /dev/null @@ -1,124 +0,0 @@ -Путь по умолчанию для экспортируемых файлов настроек модуля."; -$MESS["CAT_ADM_CSV_EXP_TAB1"] = "Инфоблок"; -$MESS["CAT_ADM_CSV_EXP_TAB1_TITLE"] = "Выбор информационного блока для экспорта"; -$MESS["CAT_ADM_CSV_EXP_TAB2"] = "Параметры экспорта"; -$MESS["CAT_ADM_CSV_EXP_TAB2_TITLE"] = "Настройка параметров экспорта"; -$MESS["CAT_ADM_CSV_EXP_TAB3"] = "Результат"; -$MESS["CAT_ADM_CSV_EXP_TAB3_TITLE"] = "Результат экспорта"; -$MESS["CAT_ADM_CSV_EXP_IBLOCK_ID"] = "Инфоблок"; -$MESS["CAT_ADM_CSV_EXP_ADD_SETTINGS"] = "Дополнительные настройки"; -$MESS["CAT_ADM_CSV_EXP_EXPORT_FILES"] = "Выгружать файлы"; -$MESS["CAT_ADM_CSV_EXP_TIME_STEP"] = "Время выполнения шага"; -$MESS["CAT_ADM_CSV_EXP_TIME_STEP_COMMENT"] = "0 - загрузить все сразу
положительное значение - число секунд на выполнение одного шага"; -$MESS["CAT_ADM_CSV_EXP_SEP_ELEMENTS"] = "Поля и свойства элементов"; -$MESS["CAT_ADM_CSV_EXP_SEP_SECTIONS"] = "Поля разделов"; -$MESS["CAT_ADM_CSV_EXP_SEP_SECTIONS_EXT"] = "Поля и пользовательские свойства разделов"; -$MESS["CAT_ADM_CSV_EXP_SEP_PRODUCT"] = "Свойства товара"; -$MESS["CAT_ADM_CSV_EXP_SEP_PRICES"] = "Цены"; -$MESS["CAT_ADM_CSV_EXP_SEP_SKU"] = "Поля и свойства торговых предложений"; -$MESS["CAT_ADM_CSV_EXP_DESCR_SECT_PROP"] = "Пользовательское свойство"; -$MESS["CAT_ADM_CSV_EXP_SECTION_LEVEL"] = "Раздел уровня #LEVEL#"; -$MESS["CATI_FI_PRICE_TYPE2"] = "Цена типа \"#TYPE#\""; -$MESS["CATI_FI_PRICE_TYPE3"] = "Цена типа \"#NAME#\" (#TYPE#)"; -$MESS["CATI_FI_PRICE_CURRENCY"] = "в валюте #CURRENCY#"; \ No newline at end of file diff --git a/intaro.intarocrm/lang/icml_export_setup.php b/intaro.intarocrm/lang/icml_export_setup.php deleted file mode 100644 index 3a47d2fe..00000000 --- a/intaro.intarocrm/lang/icml_export_setup.php +++ /dev/null @@ -1,10 +0,0 @@ - \ No newline at end of file diff --git a/intaro.intarocrm/lang/ru/icml_export_setup.php b/intaro.intarocrm/lang/ru/icml_export_setup.php index 3a47d2fe..de7d80b4 100644 --- a/intaro.intarocrm/lang/ru/icml_export_setup.php +++ b/intaro.intarocrm/lang/ru/icml_export_setup.php @@ -7,4 +7,6 @@ $MESS["EXPORT2INTAROCML"] = "Выгрузить в ICML"; $MESS["FILENAME"] = "Укажите имя файла данных:"; $MESS["PROPERTY"] = "Свойство, содержащее артикул товара"; $MESS["ALL_CATALOG"] = "Все каталоги"; +$MESS["CET_EXPORT"] = "Экспортировать"; +$MESS["CET_SAVE"] = "Сохранить"; ?> \ No newline at end of file diff --git a/intaro.intarocrm/lang/ru/install/step4.php b/intaro.intarocrm/lang/ru/install/step4.php index def40c16..d8799e89 100755 --- a/intaro.intarocrm/lang/ru/install/step4.php +++ b/intaro.intarocrm/lang/ru/install/step4.php @@ -17,7 +17,8 @@ $MESS ['CRON_LOADING'] = 'Cron'; $MESS ['AGENT_LOADING'] = 'Агент (по умолчанию)'; $MESS ['LOAD_NOW'] = 'Выгрузить сейчас'; $MESS ['PROFILE_NAME'] = 'Имя профиля:'; +$MESS ['PROFILE_NAME_EXAMPLE'] = 'Выгрузка каталога IntaroCRM'; $MESS ['ERR_FIELDS_PROFILE'] = 'Неверно заполнено поле имени профиля'; $MESS ['ERR_FIELDS_IBLOCK'] = 'Не выбрано ни одного информационного блока'; $MESS ['ERR_FIELDS_ARTICLE'] = 'Не выбраны артикулы'; -$MESS ['ERR_FIELDS_FILE'] = 'Не указано имя файла'; +$MESS ['ERR_FIELDS_FILE'] = 'Не указано имя файла'; \ No newline at end of file