CSV (new) /** @global int $line_num */ /** @global int $correct_lines */ /** @global int $error_lines */ /** @global string $tmpid */ /** @global string $URL_DATA_FILE */ /** @global int $IBLOCK_ID */ /** @global array $arIBlock */ /** @global string $fields_type */ /** @global string $delimiter_r */ /** @global string $delimiter_other_r */ /** @global string $metki_f */ /** @global string $first_names_r */ /** @global string $first_names_f */ /** @global int $CUR_FILE_POS */ /** @global string $USE_TRANSLIT */ /** @global string $TRANSLIT_LANG */ /** @global string $USE_UPDATE_TRANSLIT */ /** @global string $PATH2IMAGE_FILES */ /** @global string $outFileAction */ /** @global string $inFileAction */ use Bitrix\Main, Bitrix\Catalog, Bitrix\Iblock; IncludeModuleLangFile($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/catalog/import_setup_templ.php'); $startImportExecTime = getmicrotime(); global $USER; global $APPLICATION; $bTmpUserCreated = false; if (!CCatalog::IsUserExists()) { $bTmpUserCreated = true; if (isset($USER)) $USER_TMP = $USER; $USER = new CUser(); } $strImportErrorMessage = ""; $strImportOKMessage = ""; global $arCatalogAvailProdFields, $defCatalogAvailProdFields, $arCatalogAvailPriceFields, $defCatalogAvailPriceFields, $arCatalogAvailValueFields, $defCatalogAvailValueFields, $arCatalogAvailQuantityFields, $defCatalogAvailQuantityFields, $arCatalogAvailGroupFields, $defCatalogAvailGroupFields, $defCatalogAvailCurrencies; if (!isset($arCatalogAvailProdFields)) $arCatalogAvailProdFields = CCatalogCSVSettings::getSettingsFields(CCatalogCSVSettings::FIELDS_ELEMENT); if (!isset($arCatalogAvailPriceFields)) $arCatalogAvailPriceFields = CCatalogCSVSettings::getSettingsFields(CCatalogCSVSettings::FIELDS_CATALOG); if (!isset($arCatalogAvailValueFields)) $arCatalogAvailValueFields = CCatalogCSVSettings::getSettingsFields(CCatalogCSVSettings::FIELDS_PRICE); if (!isset($arCatalogAvailQuantityFields)) $arCatalogAvailQuantityFields = CCatalogCSVSettings::getSettingsFields(CCatalogCSVSettings::FIELDS_PRICE_EXT); if (!isset($arCatalogAvailGroupFields)) $arCatalogAvailGroupFields = CCatalogCSVSettings::getSettingsFields(CCatalogCSVSettings::FIELDS_SECTION); if (!isset($defCatalogAvailProdFields)) $defCatalogAvailProdFields = CCatalogCSVSettings::getDefaultSettings(CCatalogCSVSettings::FIELDS_ELEMENT); if (!isset($defCatalogAvailPriceFields)) $defCatalogAvailPriceFields = CCatalogCSVSettings::getDefaultSettings(CCatalogCSVSettings::FIELDS_CATALOG); if (!isset($defCatalogAvailValueFields)) $defCatalogAvailValueFields = CCatalogCSVSettings::getDefaultSettings(CCatalogCSVSettings::FIELDS_PRICE); if (!isset($defCatalogAvailQuantityFields)) $defCatalogAvailQuantityFields = CCatalogCSVSettings::getDefaultSettings(CCatalogCSVSettings::FIELDS_PRICE_EXT); if (!isset($defCatalogAvailGroupFields)) $defCatalogAvailGroupFields = CCatalogCSVSettings::getDefaultSettings(CCatalogCSVSettings::FIELDS_SECTION); if (!isset($defCatalogAvailCurrencies)) $defCatalogAvailCurrencies = CCatalogCSVSettings::getDefaultSettings(CCatalogCSVSettings::FIELDS_CURRENCY); $NUM_CATALOG_LEVELS = intval(COption::GetOptionString("catalog", "num_catalog_levels")); $max_execution_time = intval($max_execution_time); if ($max_execution_time <= 0) $max_execution_time = 0; if (defined('BX_CAT_CRON') && true == BX_CAT_CRON) $max_execution_time = 0; if (defined("CATALOG_LOAD_NO_STEP") && CATALOG_LOAD_NO_STEP) $max_execution_time = 0; $separateSku = (string)Main\Config\Option::get('catalog', 'show_catalog_tab_with_offers') === 'Y'; $bAllLinesLoaded = true; $io = CBXVirtualIo::GetInstance(); if (!function_exists('CSVCheckTimeout')) { function CSVCheckTimeout($max_execution_time) { return ($max_execution_time <= 0) || (getmicrotime()-START_EXEC_TIME <= (2*$max_execution_time/3)); } } $DATA_FILE_NAME = ""; if ($URL_DATA_FILE <> '') { $URL_DATA_FILE = Rel2Abs("/", $URL_DATA_FILE); if (file_exists($_SERVER["DOCUMENT_ROOT"].$URL_DATA_FILE) && is_file($_SERVER["DOCUMENT_ROOT"].$URL_DATA_FILE)) $DATA_FILE_NAME = $URL_DATA_FILE; } if ($DATA_FILE_NAME == '') $strImportErrorMessage .= GetMessage("CATI_NO_DATA_FILE")."
"; $IBLOCK_ID = intval($IBLOCK_ID); if ($IBLOCK_ID <= 0) { $strImportErrorMessage .= GetMessage("CATI_NO_IBLOCK")."
"; } else { $arIBlock = CIBlock::GetArrayByID($IBLOCK_ID); if (false === $arIBlock) { $strImportErrorMessage .= GetMessage("CATI_NO_IBLOCK")."
"; } } if ('' == $strImportErrorMessage) { $bWorkflow = CModule::IncludeModule("workflow") && ($arIBlock["WORKFLOW"] != "N"); $bIBlockIsCatalog = false; $arSku = false; $rsCatalogs = CCatalog::GetList( array(), array('IBLOCK_ID' => $IBLOCK_ID), false, false, array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID') ); if ($arCatalog = $rsCatalogs->Fetch()) { $bIBlockIsCatalog = true; $arCatalog['IBLOCK_ID'] = (int)$arCatalog['IBLOCK_ID']; $arCatalog['PRODUCT_IBLOCK_ID'] = (int)$arCatalog['PRODUCT_IBLOCK_ID']; $arCatalog['SKU_PROPERTY_ID'] = (int)$arCatalog['SKU_PROPERTY_ID']; if (0 < $arCatalog['PRODUCT_IBLOCK_ID'] && 0 < $arCatalog['SKU_PROPERTY_ID']) { $arSku = $arCatalog; } } $csvFile = new CCSVData(); $csvFile->LoadFile($_SERVER["DOCUMENT_ROOT"].$DATA_FILE_NAME); if ($fields_type!="F" && $fields_type!="R") $strImportErrorMessage .= GetMessage("CATI_NO_FILE_FORMAT")."
"; } if ('' == $strImportErrorMessage) { $arDataFileFields = array(); $fields_type = (($fields_type=="F") ? "F" : "R" ); $csvFile->SetFieldsType($fields_type); if ($fields_type == "R") { $first_names_r = (($first_names_r=="Y") ? "Y" : "N" ); $csvFile->SetFirstHeader(($first_names_r=="Y") ? true : false); $delimiter_r_char = ""; switch ($delimiter_r) { case "TAB": $delimiter_r_char = "\t"; break; case "ZPT": $delimiter_r_char = ","; break; case "SPS": $delimiter_r_char = " "; break; case "OTR": $delimiter_r_char = mb_substr($delimiter_other_r, 0, 1); break; case "TZP": $delimiter_r_char = ";"; break; } if (mb_strlen($delimiter_r_char) != 1) $strImportErrorMessage .= GetMessage("CATI_NO_DELIMITER")."
"; if ('' == $strImportErrorMessage) $csvFile->SetDelimiter($delimiter_r_char); } else { $first_names_f = (($first_names_f=="Y") ? "Y" : "N" ); $csvFile->SetFirstHeader(($first_names_f=="Y") ? true : false); if ($metki_f == '') $strImportErrorMessage .= GetMessage("CATI_NO_METKI")."
"; if ('' == $strImportErrorMessage) { $arMetkiTmp = preg_split("/[\D]/i", $metki_f); $arMetki = array(); for ($i = 0, $intCount = count($arMetkiTmp); $i < $intCount; $i++) { if (intval($arMetkiTmp[$i]) > 0) { $arMetki[] = intval($arMetkiTmp[$i]); } } if (!is_array($arMetki) || count($arMetki)<1) $strImportErrorMessage .= GetMessage("CATI_NO_METKI")."
"; if ('' == $strImportErrorMessage) $csvFile->SetWidthMap($arMetki); } } if ('' == $strImportErrorMessage) { $bFirstHeaderTmp = $csvFile->GetFirstHeader(); $csvFile->SetFirstHeader(false); if ($arRes = $csvFile->Fetch()) { for ($i = 0, $intCount = count($arRes); $i < $intCount; $i++) { $arDataFileFields[$i] = $arRes[$i]; } } else { $strImportErrorMessage .= GetMessage("CATI_NO_DATA")."
"; } global $NUM_FIELDS; $NUM_FIELDS = count($arDataFileFields); } } if ('' == $strImportErrorMessage) { $bFieldsPres = false; for ($i = 0; $i < $NUM_FIELDS; $i++) { if (${"field_".$i} <> '') { $bFieldsPres = true; break; } } if (!$bFieldsPres) $strImportErrorMessage .= GetMessage("CATI_NO_FIELDS")."
"; } if ('' == $strImportErrorMessage) { $USE_TRANSLIT = (isset($USE_TRANSLIT) && 'Y' == $USE_TRANSLIT ? 'Y' : 'N'); if ('Y' == $USE_TRANSLIT) { $boolOutTranslit = false; if (isset($arIBlock['FIELDS']['CODE']['DEFAULT_VALUE'])) { if ('Y' == $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']['TRANSLITERATION'] && 'Y' == $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']['USE_GOOGLE']) { $boolOutTranslit = true; } } if (isset($arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE'])) { if ('Y' == $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']['TRANSLITERATION'] && 'Y' == $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']['USE_GOOGLE']) { $boolOutTranslit = true; } } if ($boolOutTranslit) { $USE_TRANSLIT = 'N'; $strImportErrorMessage .= GetMessage("CATI_USE_CODE_TRANSLIT_OUT")."
"; } } if ('Y' == $USE_TRANSLIT) { $TRANSLIT_LANG = (isset($TRANSLIT_LANG) ? strval($TRANSLIT_LANG) : ''); if (!empty($TRANSLIT_LANG)) { $rsTransLangs = CLanguage::GetByID($TRANSLIT_LANG); if (!($arTransLang = $rsTransLangs->Fetch())) { $TRANSLIT_LANG = ''; } } if (empty($TRANSLIT_LANG)) { $USE_TRANSLIT = 'N'; $strImportErrorMessage .= GetMessage("CATI_CODE_TRANSLIT_LANG_ERR")."
"; } } $updateTranslit = false; if ($USE_TRANSLIT == 'Y') { $updateTranslit = true; if (isset($USE_UPDATE_TRANSLIT) && $USE_UPDATE_TRANSLIT == 'N') $updateTranslit = false; } } $IMAGE_RESIZE = (isset($IMAGE_RESIZE) && 'Y' == $IMAGE_RESIZE ? 'Y' : 'N'); $CLEAR_EMPTY_PRICE = (isset($CLEAR_EMPTY_PRICE) && 'Y' == $CLEAR_EMPTY_PRICE ? 'Y' : 'N'); $CML2_LINK_IS_XML = (isset($CML2_LINK_IS_XML) && 'Y' == $CML2_LINK_IS_XML ? 'Y' : 'N'); if (empty($arSku)) $CML2_LINK_IS_XML = 'N'; if ('' == $strImportErrorMessage) { $currentUserID = $USER->GetID(); $boolUseStoreControl = Catalog\Config\State::isUsedInventoryManagement(); $arDisableFields = array( 'CP_QUANTITY' => true, 'CP_PURCHASING_PRICE' => true, 'CP_PURCHASING_CURRENCY' => true, ); $arProductCache = array(); $arPropertyListCache = array(); $arSectionCache = array(); $arElementCache = array(); $productPriceCache = array(); $processedProductPriceCache = array(); $csvFile->SetPos($CUR_FILE_POS); $arRes = $csvFile->Fetch(); if ($CUR_FILE_POS<=0 && $bFirstHeaderTmp) { $arRes = $csvFile->Fetch(); } $bs = new CIBlockSection(); $el = new CIBlockElement(); $bWasIterations = false; $defaultMeasureId = null; $measure = CCatalogMeasure::getDefaultMeasure(); if (!empty($measure)) { if ($measure['ID'] > 0) $defaultMeasureId = $measure['ID']; } unset($measure); Iblock\PropertyIndex\Manager::enableDeferredIndexing(); Catalog\Product\Sku::enableDeferredCalculation(); if ($arRes) { $bWasIterations = true; if ($bFirstLoadStep) { $tmpid = md5(uniqid("")); $line_num = 0; $correct_lines = 0; $error_lines = 0; $killed_lines = 0; $arIBlockProperty = array(); $arIBlockPropertyValue = array(); $multiplePropertyValuesCheck = array(); $bThereIsGroups = false; $bDeactivationStarted = false; $arProductGroups = array(); $currentProductSection = []; $bUpdatePrice = 'N'; } $boolTranslitElement = false; $boolTranslitSection = false; $arTranslitElement = array(); $arTranslitSection = array(); if ('Y' == $USE_TRANSLIT) { if (isset($arIBlock['FIELDS']['CODE']['DEFAULT_VALUE'])) { $arTransSettings = $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']; $boolTranslitElement = ($arTransSettings['TRANSLITERATION'] == 'Y'); $arTranslitElement = array( "max_len" => $arTransSettings['TRANS_LEN'], "change_case" => $arTransSettings['TRANS_CASE'], "replace_space" => $arTransSettings['TRANS_SPACE'], "replace_other" => $arTransSettings['TRANS_OTHER'], "delete_repeat_replace" => ($arTransSettings['TRANS_EAT'] == 'Y'), ); } if (isset($arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE'])) { $arTransSettings = $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']; $boolTranslitSection = ($arTransSettings['TRANSLITERATION'] == 'Y'); $arTranslitSection = array( "max_len" => $arTransSettings['TRANS_LEN'], "change_case" => $arTransSettings['TRANS_CASE'], "replace_space" => $arTransSettings['TRANS_SPACE'], "replace_other" => $arTransSettings['TRANS_OTHER'], "delete_repeat_replace" => ($arTransSettings['TRANS_EAT'] == 'Y'), ); } } // Prepare load arrays $strAvailGroupFields = COption::GetOptionString("catalog", "allowed_group_fields", $defCatalogAvailGroupFields); $arAvailGroupFields = explode(",", $strAvailGroupFields); $arAvailGroupFields_names = array(); for ($i = 0, $intCount = count($arAvailGroupFields), $intCount2 = count($arCatalogAvailGroupFields); $i < $intCount; $i++) { for ($j = 0; $j < $intCount2; $j++) { if ($arCatalogAvailGroupFields[$j]["value"]==$arAvailGroupFields[$i]) { $arAvailGroupFields_names[$arAvailGroupFields[$i]] = array( "field" => $arCatalogAvailGroupFields[$j]["field"], "important" => $arCatalogAvailGroupFields[$j]["important"] ); break; } } } // Prepare load arrays $strAvailProdFields = COption::GetOptionString("catalog", "allowed_product_fields", $defCatalogAvailProdFields); $arAvailProdFields = explode(",", $strAvailProdFields); $arAvailProdFields_names = array(); for ($i = 0, $intCount = count($arAvailProdFields), $intCount2 = count($arCatalogAvailProdFields); $i < $intCount; $i++) { for ($j = 0; $j < $intCount2; $j++) { if ($arCatalogAvailProdFields[$j]["value"]==$arAvailProdFields[$i]) { $arAvailProdFields_names[$arAvailProdFields[$i]] = array( "field" => $arCatalogAvailProdFields[$j]["field"], "important" => $arCatalogAvailProdFields[$j]["important"] ); break; } } } // Prepare load arrays $strAvailPriceFields = COption::GetOptionString("catalog", "allowed_product_fields", $defCatalogAvailPriceFields); $arAvailPriceFields = explode(",", $strAvailPriceFields); $arAvailPriceFields_names = array(); for ($i = 0, $intCount = count($arAvailPriceFields), $intCount2 = count($arCatalogAvailPriceFields); $i < $intCount; $i++) { if ($boolUseStoreControl && array_key_exists($arAvailPriceFields[$i], $arDisableFields)) continue; for ($j = 0; $j < $intCount2; $j++) { if ($arCatalogAvailPriceFields[$j]["value"]==$arAvailPriceFields[$i]) { $arAvailPriceFields_names[$arAvailPriceFields[$i]] = array( "field" => $arCatalogAvailPriceFields[$j]["field"], "important" => $arCatalogAvailPriceFields[$j]["important"] ); break; } } } // Prepare load arrays $strAvailValueFields = COption::GetOptionString("catalog", "allowed_price_fields", $defCatalogAvailValueFields); $arAvailValueFields = explode(",", $strAvailValueFields); $arAvailValueFields_names = array(); for ($i = 0, $intCount = count($arAvailValueFields), $intCount2 = count($arCatalogAvailValueFields); $i < $intCount; $i++) { for ($j = 0; $j < $intCount2; $j++) { if ($arCatalogAvailValueFields[$j]["value"] == $arAvailValueFields[$i]) { $arAvailValueFields_names[$arAvailValueFields[$i]] = array( "field_name_size" => $arCatalogAvailValueFields[$j]["value_size"], "field" => $arCatalogAvailValueFields[$j]["field"], "important" => $arCatalogAvailValueFields[$j]["important"] ); break; } } } $previousProductId = false; $updateFacet = false; $newProducts = array(); CIBlock::disableClearTagCache(); // main do { $strErrorR = ""; $line_num++; $arGroupsTmp = array(); for ($i = 0; $i < $NUM_CATALOG_LEVELS; $i++) { $arGroupsTmp1 = array(); foreach ($arAvailGroupFields_names as $key => $value) { $ind = -1; for ($i_tmp = 0; $i_tmp < $NUM_FIELDS; $i_tmp++) { if (${"field_".$i_tmp} == $key.$i) { $ind = $i_tmp; break; } } if ($ind>-1) { $arGroupsTmp1[$value["field"]] = trim($arRes[$ind]); $bThereIsGroups = true; } } $arGroupsTmp[] = $arGroupsTmp1; } $i = count($arGroupsTmp)-1; while ($i>=0) { foreach ($arAvailGroupFields_names as $key => $value) { if ($value["important"]=="Y" && isset($arGroupsTmp[$i][$value["field"]]) && '' !== $arGroupsTmp[$i][$value["field"]]) { break 2; } } unset($arGroupsTmp[$i]); $i--; } for ($i = 0, $intCount = count($arGroupsTmp); $i < $intCount; $i++) { if (isset($arGroupsTmp[$i]['NAME']) && '' === $arGroupsTmp[$i]["NAME"]) { $arGroupsTmp[$i]["NAME"] = GetMessage("CATI_NOMAME"); } $arGroupsTmp[$i]["TMP_ID"] = $tmpid; } $LAST_GROUP_CODE = 0; $sectionKey = ''; for ($i = 0, $intCount = count($arGroupsTmp); $i < $intCount; $i++) { $sectionFilter = ''; $arFilter = array("IBLOCK_ID" => $IBLOCK_ID, 'CHECK_PERMISSIONS' => 'N'); if (isset($arGroupsTmp[$i]["XML_ID"]) && '' !== $arGroupsTmp[$i]["XML_ID"]) { $arFilter["=XML_ID"] = $arGroupsTmp[$i]["XML_ID"]; $sectionFilter = 'XML'.md5($arGroupsTmp[$i]["XML_ID"]); } elseif (isset($arGroupsTmp[$i]["NAME"]) && '' !== $arGroupsTmp[$i]["NAME"]) { $arFilter["=NAME"] = $arGroupsTmp[$i]["NAME"]; $sectionFilter = 'NAME'.md5($arGroupsTmp[$i]["NAME"]); } if ($LAST_GROUP_CODE>0) { $arFilter["SECTION_ID"] = $LAST_GROUP_CODE; $arGroupsTmp[$i]["IBLOCK_SECTION_ID"] = $LAST_GROUP_CODE; } else { $arFilter["SECTION_ID"] = 0; $arGroupsTmp[$i]["IBLOCK_SECTION_ID"] = false; } $sectionKey .= $LAST_GROUP_CODE.':'; $sectionIndex = $sectionKey.$sectionFilter; if (!isset($arSectionCache[$sectionIndex])) { if (isset($arGroupsTmp[$i]["PICTURE"])) { $arGroupsTmp[$i]["PICTURE"] = trim($arGroupsTmp[$i]["PICTURE"]); $bFilePres = false; if ('' !== $arGroupsTmp[$i]["PICTURE"]) { if (preg_match("/^(ftp|ftps|http|https):\\/\\//", $arGroupsTmp[$i]["PICTURE"])) { $arGroupsTmp[$i]["PICTURE"] = CFile::MakeFileArray($arGroupsTmp[$i]["PICTURE"]); } else { $arGroupsTmp[$i]["PICTURE"] = CFile::MakeFileArray($io->GetPhysicalName($_SERVER["DOCUMENT_ROOT"].$PATH2IMAGE_FILES."/".$arGroupsTmp[$i]["PICTURE"])); if (!empty($arGroupsTmp[$i]["PICTURE"]) && is_array($arGroupsTmp[$i]["PICTURE"])) $arGroupsTmp[$i]["PICTURE"]['COPY_FILE'] = 'Y'; } $bFilePres = (!empty($arGroupsTmp[$i]["PICTURE"]) && isset($arGroupsTmp[$i]["PICTURE"]["tmp_name"]) && '' !== $arGroupsTmp[$i]["PICTURE"]["tmp_name"] ); } if (!$bFilePres) unset($arGroupsTmp[$i]["PICTURE"]); } if (isset($arGroupsTmp[$i]["DETAIL_PICTURE"])) { $arGroupsTmp[$i]["DETAIL_PICTURE"] = trim($arGroupsTmp[$i]["DETAIL_PICTURE"]); $bFilePres = false; if ('' !== $arGroupsTmp[$i]["DETAIL_PICTURE"]) { if (preg_match("/^(ftp|ftps|http|https):\\/\\//", $arGroupsTmp[$i]["DETAIL_PICTURE"])) { $arGroupsTmp[$i]["DETAIL_PICTURE"] = CFile::MakeFileArray($arGroupsTmp[$i]["DETAIL_PICTURE"]); } else { $arGroupsTmp[$i]["DETAIL_PICTURE"] = CFile::MakeFileArray($io->GetPhysicalName($_SERVER["DOCUMENT_ROOT"].$PATH2IMAGE_FILES."/".$arGroupsTmp[$i]["DETAIL_PICTURE"])); if (!empty($arGroupsTmp[$i]["DETAIL_PICTURE"]) && is_array($arGroupsTmp[$i]["DETAIL_PICTURE"])) $arGroupsTmp[$i]["DETAIL_PICTURE"]['COPY_FILE'] = 'Y'; } $bFilePres = (!empty($arGroupsTmp[$i]["DETAIL_PICTURE"]) && isset($arGroupsTmp[$i]["DETAIL_PICTURE"]["tmp_name"]) && '' !== $arGroupsTmp[$i]["DETAIL_PICTURE"]["tmp_name"] ); } if (!$bFilePres) unset($arGroupsTmp[$i]["DETAIL_PICTURE"]); } $res = CIBlockSection::GetList(array(), $arFilter, false, array('ID')); if ($arr = $res->Fetch()) { if ($boolTranslitSection && $updateTranslit) { if (!isset($arGroupsTmp[$i]['CODE']) || '' === $arGroupsTmp[$i]['CODE']) { $arGroupsTmp[$i]['CODE'] = CUtil::translit($arGroupsTmp[$i]["NAME"], $TRANSLIT_LANG, $arTranslitSection); } } $LAST_GROUP_CODE = $arr["ID"]; $res = $bs->Update($LAST_GROUP_CODE, $arGroupsTmp[$i], true, true, 'Y' === $IMAGE_RESIZE); if (!$res) { $strErrorR .= GetMessage("CATI_LINE_NO")." ".$line_num.". ".GetMessage("CATI_ERR_UPDATE_SECT")." ".$bs->LAST_ERROR."
"; } } else { if ($boolTranslitSection) { if (!isset($arGroupsTmp[$i]['CODE']) || '' === $arGroupsTmp[$i]['CODE']) { $arGroupsTmp[$i]['CODE'] = CUtil::translit($arGroupsTmp[$i]["NAME"], $TRANSLIT_LANG, $arTranslitSection); } } $arGroupsTmp[$i]["IBLOCK_ID"] = $IBLOCK_ID; $arGroupsTmp[$i]["ACTIVE"] = (isset($arGroupsTmp[$i]["ACTIVE"]) && 'N' === $arGroupsTmp[$i]["ACTIVE"] ? 'N' : 'Y'); $LAST_GROUP_CODE = $bs->Add($arGroupsTmp[$i], true, true, 'Y' === $IMAGE_RESIZE); if (!$LAST_GROUP_CODE) { $strErrorR .= GetMessage("CATI_LINE_NO")." ".$line_num.". ".GetMessage("CATI_ERR_ADD_SECT")." ".$bs->LAST_ERROR."
"; } } if ('' === $strErrorR) { $arSectionCache[$sectionIndex] = $LAST_GROUP_CODE; } } else { $LAST_GROUP_CODE = $arSectionCache[$sectionIndex]; } } $arFilter = array("IBLOCK_ID" => $IBLOCK_ID); if ('' === $strErrorR) { $arLoadProductArray = array( "MODIFIED_BY" => $currentUserID, "IBLOCK_ID" => $IBLOCK_ID, "TMP_ID" => $tmpid ); foreach ($arAvailProdFields_names as $key => $value) { $ind = -1; for ($i_tmp = 0; $i_tmp < $NUM_FIELDS; $i_tmp++) { if (${"field_".$i_tmp} == $key) { $ind = $i_tmp; break; } } if ($ind>-1) { $arLoadProductArray[$value["field"]] = trim($arRes[$ind]); } } if (isset($arLoadProductArray["XML_ID"]) && '' !== $arLoadProductArray["XML_ID"]) { $arFilter["=XML_ID"] = $arLoadProductArray["XML_ID"]; } else { if (isset($arLoadProductArray["NAME"]) && '' !== $arLoadProductArray["NAME"]) { $arFilter["=NAME"] = $arLoadProductArray["NAME"]; } else { $strErrorR .= GetMessage("CATI_LINE_NO")." ".$line_num.". ".GetMessage("CATI_NOIDNAME")."
"; } } } if ('' === $strErrorR) { if (isset($arLoadProductArray["PREVIEW_PICTURE"])) { $arLoadProductArray["PREVIEW_PICTURE"] = trim($arLoadProductArray["PREVIEW_PICTURE"]); $bFilePres = false; if ('' !== $arLoadProductArray["PREVIEW_PICTURE"]) { if (preg_match("/^(ftp|ftps|http|https):\\/\\//", $arLoadProductArray["PREVIEW_PICTURE"])) { $arLoadProductArray["PREVIEW_PICTURE"] = CFile::MakeFileArray($arLoadProductArray["PREVIEW_PICTURE"]); } else { $arLoadProductArray["PREVIEW_PICTURE"] = CFile::MakeFileArray($io->GetPhysicalName($_SERVER["DOCUMENT_ROOT"].$PATH2IMAGE_FILES."/".$arLoadProductArray["PREVIEW_PICTURE"])); if (!empty($arLoadProductArray["PREVIEW_PICTURE"]) && is_array($arLoadProductArray["PREVIEW_PICTURE"])) $arLoadProductArray["PREVIEW_PICTURE"]["COPY_FILE"] = "Y"; } $bFilePres = (!empty($arLoadProductArray["PREVIEW_PICTURE"]) && isset($arLoadProductArray["PREVIEW_PICTURE"]["tmp_name"]) && '' !== $arLoadProductArray["PREVIEW_PICTURE"]["tmp_name"] ); } if (!$bFilePres) unset($arLoadProductArray["PREVIEW_PICTURE"]); } if (isset($arLoadProductArray["DETAIL_PICTURE"])) { $arLoadProductArray["DETAIL_PICTURE"] = trim($arLoadProductArray["DETAIL_PICTURE"]); $bFilePres = false; if ('' !== $arLoadProductArray["DETAIL_PICTURE"]) { if (preg_match("/^(ftp|ftps|http|https):\\/\\//", $arLoadProductArray["DETAIL_PICTURE"])) { $arLoadProductArray["DETAIL_PICTURE"] = CFile::MakeFileArray($arLoadProductArray["DETAIL_PICTURE"]); } else { $arLoadProductArray["DETAIL_PICTURE"] = CFile::MakeFileArray($io->GetPhysicalName($_SERVER["DOCUMENT_ROOT"].$PATH2IMAGE_FILES."/".$arLoadProductArray["DETAIL_PICTURE"])); if (!empty($arLoadProductArray["DETAIL_PICTURE"]) && is_array($arLoadProductArray["DETAIL_PICTURE"])) $arLoadProductArray["DETAIL_PICTURE"]["COPY_FILE"] = "Y"; } $bFilePres = (!empty($arLoadProductArray["DETAIL_PICTURE"]) && isset($arLoadProductArray["DETAIL_PICTURE"]["tmp_name"]) && '' !== $arLoadProductArray["DETAIL_PICTURE"]["tmp_name"] ); } if (!$bFilePres) unset($arLoadProductArray["DETAIL_PICTURE"]); } $res = CIBlockElement::GetList( array(), $arFilter, false, false, array('ID', 'PREVIEW_PICTURE', 'DETAIL_PICTURE', 'IBLOCK_SECTION_ID') ); if ($arr = $res->Fetch()) { $PRODUCT_ID = (int)$arr['ID']; if (isset($arLoadProductArray["PREVIEW_PICTURE"]) && intval($arr["PREVIEW_PICTURE"])>0) { $arLoadProductArray["PREVIEW_PICTURE"]["old_file"] = $arr["PREVIEW_PICTURE"]; } if (isset($arLoadProductArray["DETAIL_PICTURE"]) && intval($arr["DETAIL_PICTURE"])>0) { $arLoadProductArray["DETAIL_PICTURE"]["old_file"] = $arr["DETAIL_PICTURE"]; } if ($boolTranslitElement && $updateTranslit) { if (!isset($arLoadProductArray['CODE']) || '' === $arLoadProductArray['CODE']) { $arLoadProductArray['CODE'] = CUtil::translit($arLoadProductArray["NAME"], $TRANSLIT_LANG, $arTranslitElement); } } if ($bThereIsGroups) { if (!isset($currentProductSection[$PRODUCT_ID])) $currentProductSection[$PRODUCT_ID] = $arr['IBLOCK_SECTION_ID']; $LAST_GROUP_CODE_tmp = (($LAST_GROUP_CODE > 0) ? $LAST_GROUP_CODE : false); if (!isset($arProductGroups[$PRODUCT_ID])) $arProductGroups[$PRODUCT_ID] = array(); if (!in_array($LAST_GROUP_CODE_tmp, $arProductGroups[$PRODUCT_ID])) { $arProductGroups[$PRODUCT_ID][] = $LAST_GROUP_CODE_tmp; } $arLoadProductArray["IBLOCK_SECTION"] = $arProductGroups[$PRODUCT_ID]; $arLoadProductArray['IBLOCK_SECTION_ID'] = $currentProductSection[$PRODUCT_ID]; $updateFacet = true; } $res = $el->Update($PRODUCT_ID, $arLoadProductArray, $bWorkflow, false, 'Y' === $IMAGE_RESIZE); } else { if ($bThereIsGroups) { $arLoadProductArray["IBLOCK_SECTION"] = (($LAST_GROUP_CODE>0) ? $LAST_GROUP_CODE : false); } if ($arLoadProductArray["ACTIVE"] != "N") $arLoadProductArray["ACTIVE"] = "Y"; if ($boolTranslitElement) { if (!isset($arLoadProductArray['CODE']) || '' === $arLoadProductArray['CODE']) { $arLoadProductArray['CODE'] = CUtil::translit($arLoadProductArray["NAME"], $TRANSLIT_LANG, $arTranslitElement); } } $PRODUCT_ID = $el->Add($arLoadProductArray, $bWorkflow, false, 'Y' === $IMAGE_RESIZE); if ($bThereIsGroups) { if (!isset($arProductGroups[$PRODUCT_ID])) $arProductGroups[$PRODUCT_ID] = array(); $arProductGroups[$PRODUCT_ID][] = (($LAST_GROUP_CODE > 0) ? $LAST_GROUP_CODE : false); } $res = ($PRODUCT_ID > 0); if ($res) $newProducts[$PRODUCT_ID] = true; } if (!$res) { $strErrorR .= GetMessage("CATI_LINE_NO")." ".$line_num.". ".GetMessage("CATI_ERROR_LOADING")." ".$el->LAST_ERROR."
"; } } if ('' === $strErrorR) { $PROP = array(); for ($i = 0; $i < $NUM_FIELDS; $i++) { if (0 == strncmp(${"field_".$i}, "IP_PROP", 7)) { $cur_prop_id = intval(mb_substr(${"field_".$i}, 7)); if (!isset($arIBlockProperty[$cur_prop_id])) { $res1 = CIBlockProperty::GetByID($cur_prop_id, $IBLOCK_ID); if ($arRes1 = $res1->Fetch()) $arIBlockProperty[$cur_prop_id] = $arRes1; else $arIBlockProperty[$cur_prop_id] = array(); } if (!empty($arIBlockProperty[$cur_prop_id]) && is_array($arIBlockProperty[$cur_prop_id])) { $multipleCheckId = $arRes[$i]; if ('Y' == $CML2_LINK_IS_XML && $cur_prop_id == $arSku['SKU_PROPERTY_ID']) { $arRes[$i] = trim($arRes[$i]); if ('' != $arRes[$i]) { if (!isset($arProductCache[$arRes[$i]])) { $rsProducts = CIBlockElement::GetList( array(), array('IBLOCK_ID' => $arSku['PRODUCT_IBLOCK_ID'], '=XML_ID' => $arRes[$i]), false, false, array('ID') ); if ($arParentProduct = $rsProducts->Fetch()) $arProductCache[$arRes[$i]] = $arParentProduct['ID']; } $arRes[$i] = (isset($arProductCache[$arRes[$i]]) ? $arProductCache[$arRes[$i]] : ''); } } elseif ($arIBlockProperty[$cur_prop_id]["PROPERTY_TYPE"]=="L") { $arRes[$i] = trim($arRes[$i]); if ('' !== $arRes[$i]) { $propValueHash = md5($arRes[$i]); if (!isset($arPropertyListCache[$cur_prop_id])) { $arPropertyListCache[$cur_prop_id] = array(); $propEnumRes = CIBlockPropertyEnum::GetList( array('SORT' => 'ASC', 'VALUE' => 'ASC'), array('IBLOCK_ID' => $IBLOCK_ID, 'PROPERTY_ID' => $arIBlockProperty[$cur_prop_id]['ID']) ); while ($propEnumValue = $propEnumRes->Fetch()) $arPropertyListCache[$cur_prop_id][md5($propEnumValue['VALUE'])] = $propEnumValue['ID']; } if (!isset($arPropertyListCache[$cur_prop_id][$propValueHash])) { $arPropertyListCache[$cur_prop_id][$propValueHash] = CIBlockPropertyEnum::Add( array( "PROPERTY_ID" => $arIBlockProperty[$cur_prop_id]['ID'], "VALUE" => $arRes[$i], "TMP_ID" => $tmpid ) ); } if (isset($arPropertyListCache[$cur_prop_id][$propValueHash])) { $arRes[$i] = $arPropertyListCache[$cur_prop_id][$propValueHash]; } else { $arRes[$i] = ''; } } } elseif ($arIBlockProperty[$cur_prop_id]["PROPERTY_TYPE"]=="F") { $arRes[$i] = trim($arRes[$i]); if(preg_match("/^(ftp|ftps|http|https):\\/\\//", $arRes[$i])) $arRes[$i] = CFile::MakeFileArray($arRes[$i]); else $arRes[$i] = CFile::MakeFileArray($io->GetPhysicalName($_SERVER["DOCUMENT_ROOT"].$PATH2IMAGE_FILES.'/'.$arRes[$i])); if (!is_array($arRes[$i]) || !array_key_exists("tmp_name", $arRes[$i])) $arRes[$i] = ''; } if (!is_array($arRes[$i])) { $arRes[$i] = trim($arRes[$i]); if ($arRes[$i] == '') $multipleCheckId = $arRes[$i]; } if ($arIBlockProperty[$cur_prop_id]["MULTIPLE"]=="Y") { if (!isset($arIBlockPropertyValue[$PRODUCT_ID])) { $arIBlockPropertyValue[$PRODUCT_ID] = array(); $multiplePropertyValuesCheck[$PRODUCT_ID] = array(); } if ( !isset($arIBlockPropertyValue[$PRODUCT_ID][$cur_prop_id]) || !is_array($arIBlockPropertyValue[$PRODUCT_ID][$cur_prop_id]) ) { $arIBlockPropertyValue[$PRODUCT_ID][$cur_prop_id] = array(); $multiplePropertyValuesCheck[$PRODUCT_ID][$cur_prop_id] = array(); } if ( !in_array($multipleCheckId, $multiplePropertyValuesCheck[$PRODUCT_ID][$cur_prop_id]) ) { $arIBlockPropertyValue[$PRODUCT_ID][$cur_prop_id][] = $arRes[$i]; $multiplePropertyValuesCheck[$PRODUCT_ID][$cur_prop_id][] = $multipleCheckId; } $PROP[$cur_prop_id] = $arIBlockPropertyValue[$PRODUCT_ID][$cur_prop_id]; } else { $PROP[$cur_prop_id] = $arRes[$i]; } } } } if (!empty($PROP)) { CIBlockElement::SetPropertyValuesEx($PRODUCT_ID, $IBLOCK_ID, $PROP); $updateFacet = true; } } if ('' == $strErrorR && $bIBlockIsCatalog) { $arLoadOfferArray = array( 'ID' => $PRODUCT_ID, 'TMP_ID' => $tmpid ); foreach ($arAvailPriceFields_names as $key => $value) { $ind = -1; for ($i_tmp = 0; $i_tmp < $NUM_FIELDS; $i_tmp++) { if (${"field_".$i_tmp} == $key) { $ind = $i_tmp; break; } } if ($ind > -1) $arLoadOfferArray[$value["field"]] = trim($arRes[$ind]); } $arLoadOfferArray = array( 'fields' => $arLoadOfferArray, 'external_fields' => array( 'IBLOCK_ID' => $IBLOCK_ID ) ); $row = Catalog\Model\Product::getList(array( 'select' => array('ID'), 'filter' => array('=ID' => $PRODUCT_ID) ))->fetch(); if (empty($row)) { if ($boolUseStoreControl) { $arLoadOfferArray['fields']['QUANTITY'] = 0; $arLoadOfferArray['fields']['QUANTITY_RESERVED'] = 0; $arLoadOfferArray['fields']['QUANTITY_TRACE'] = Catalog\ProductTable::STATUS_YES; $arLoadOfferArray['fields']['CAN_BUY_ZERO'] = Catalog\ProductTable::STATUS_NO; $arLoadOfferArray['fields']['PURCHASING_PRICE'] = null; $arLoadOfferArray['fields']['PURCHASING_CURRENCY'] = null; } else { if (isset($arLoadOfferArray['fields']['QUANTITY']) && $arLoadOfferArray['fields']['QUANTITY'] === '') unset($arLoadOfferArray['fields']['QUANTITY']); $emptyStartPrice = ( ( isset($arLoadOfferArray['fields']['PURCHASING_PRICE']) && $arLoadOfferArray['fields']['PURCHASING_PRICE'] === '' ) && ( isset($arLoadOfferArray['fields']['PURCHASING_CURRENCY']) && $arLoadOfferArray['fields']['PURCHASING_CURRENCY'] === '' ) ); if ($emptyStartPrice) { unset($arLoadOfferArray['fields']['PURCHASING_PRICE']); unset($arLoadOfferArray['fields']['PURCHASING_CURRENCY']); } unset($emptyStartPrice); if (isset($arLoadOfferArray['fields']['PURCHASING_PRICE'])) { $arLoadOfferArray['fields']['PURCHASING_PRICE'] = str_replace( array(' ', ','), array('', '.'), $arLoadOfferArray['fields']['PURCHASING_PRICE'] ); } } if (isset($arLoadOfferArray['fields']['WEIGHT']) && $arLoadOfferArray['fields']['WEIGHT'] === '') unset($arLoadOfferArray['fields']['WEIGHT']); if (empty($arLoadOfferArray['fields']['MEASURE']) && $defaultMeasureId !== null) $arLoadOfferArray['fields']['MEASURE'] = $defaultMeasureId; $productResult = Catalog\Model\Product::add($arLoadOfferArray); } else { if (!$boolUseStoreControl) { if (isset($arLoadOfferArray['fields']['QUANTITY']) && $arLoadOfferArray['fields']['QUANTITY'] === '') $arLoadOfferArray['fields']['QUANTITY'] = 0; $emptyStartPrice = ( ( isset($arLoadOfferArray['fields']['PURCHASING_PRICE']) && $arLoadOfferArray['fields']['PURCHASING_PRICE'] === '' ) && ( isset($arLoadOfferArray['fields']['PURCHASING_CURRENCY']) && $arLoadOfferArray['fields']['PURCHASING_CURRENCY'] === '' ) ); if ($emptyStartPrice) { $arLoadOfferArray['fields']['PURCHASING_PRICE'] = null; $arLoadOfferArray['fields']['PURCHASING_CURRENCY'] = null; } unset($emptyStartPrice); if (isset($arLoadOfferArray['fields']['PURCHASING_PRICE'])) { $arLoadOfferArray['fields']['PURCHASING_PRICE'] = str_replace( array(' ', ','), array('', '.'), $arLoadOfferArray['fields']['PURCHASING_PRICE'] ); } } if (isset($arLoadOfferArray['fields']['WEIGHT']) && $arLoadOfferArray['fields']['WEIGHT'] === '') $arLoadOfferArray['fields']['WEIGHT'] = 0; $productResult = Catalog\Model\Product::update($PRODUCT_ID, $arLoadOfferArray); } unset($row); unset($arLoadOfferArray); if (!$productResult->isSuccess()) { $strErrorR .= GetMessage('CATI_LINE_NO').' '.$line_num.'. '.implode('; ', $productResult->getErrorMessages()); } else { $quantityFrom = 0; $quantityTo = 0; for ($j = 0; $j < $NUM_FIELDS; $j++) { if (${"field_".$j} == "CV_QUANTITY_FROM") $quantityFrom = (int)$arRes[$j]; elseif (${"field_".$j} == "CV_QUANTITY_TO") $quantityTo = (int)$arRes[$j]; } if ($quantityFrom <= 0) $quantityFrom = null; if ($quantityTo <= 0) $quantityTo = null; $arFields = array(); $priceTypeList = array(); for ($j = 0; $j < $NUM_FIELDS; $j++) { foreach ($arAvailValueFields_names as $key => $value) { if (0 == strncmp(${"field_".$j}, $key."_", $value['field_name_size'] + 1)) { $strTempKey = intval(mb_substr(${"field_".$j}, $value['field_name_size'] + 1)); if (!isset($arFields[$strTempKey])) { $arFields[$strTempKey] = array( "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $strTempKey, "QUANTITY_FROM" => $quantityFrom, "QUANTITY_TO" => $quantityTo, "TMP_ID" => $tmpid ); $priceTypeList[$strTempKey] = $strTempKey; } $arFields[$strTempKey][$value["field"]] = trim($arRes[$j]); } } } if (!empty($arFields)) { if (!isset($productPriceCache[$PRODUCT_ID])) { $productPriceCache[$PRODUCT_ID] = array(); $priceIterator = Catalog\Model\Price::getList(array( 'select' => array('ID', 'CATALOG_GROUP_ID', 'QUANTITY_FROM', 'QUANTITY_TO'), 'filter' => array('=PRODUCT_ID' => $PRODUCT_ID, '@CATALOG_GROUP_ID' => $priceTypeList) )); while ($row = $priceIterator->fetch()) { $hash = ($row['QUANTITY_FROM'] === null ? 'ZERO' : $row['QUANTITY_FROM']).'-'. ($row['QUANTITY_TO'] === null ? 'INF' : $row['QUANTITY_TO']); $priceType = (int)$row['CATALOG_GROUP_ID']; if (!isset($productPriceCache[$PRODUCT_ID][$priceType])) $productPriceCache[$PRODUCT_ID][$priceType] = array(); $productPriceCache[$PRODUCT_ID][$priceType][$hash] = (int)$row['ID']; } unset($row, $priceIterator); } foreach ($arFields as $key => $value) { $strPriceErr = ''; $hash = ($value['QUANTITY_FROM'] === null ? 'ZERO' : $value['QUANTITY_FROM']).'-'. ($value['QUANTITY_TO'] === null ? 'INF' : $value['QUANTITY_TO']); $priceType = (int)$value['CATALOG_GROUP_ID']; if (!isset($processedProductPriceCache[$PRODUCT_ID][$priceType][$hash])) { if (!isset($processedProductPriceCache[$PRODUCT_ID])) $processedProductPriceCache[$PRODUCT_ID] = array(); if (!isset($processedProductPriceCache[$PRODUCT_ID][$priceType])) $processedProductPriceCache[$PRODUCT_ID][$priceType] = array(); $priceId = (isset($productPriceCache[$PRODUCT_ID][$priceType][$hash]) ? $productPriceCache[$PRODUCT_ID][$priceType][$hash] : null ); if ($priceId !== null) { $emptyPrice = ( (isset($value['PRICE']) && '' === $value['PRICE']) && (isset($value['CURRENCY']) && '' === $value['CURRENCY']) ); $boolEraseClear = ('Y' == $CLEAR_EMPTY_PRICE ? $emptyPrice :false); if ($boolEraseClear) { $priceResult = Catalog\Model\Price::delete($priceId); if (!$priceResult->isSuccess()) { $strPriceErr = implode('; ', $priceResult->getErrorMessages()); if ($strPriceErr !== '') $strPriceErr = GetMessage('CATI_ERR_PRICE_DELETE').$strPriceErr; else $strPriceErr = GetMessage('CATI_ERR_PRICE_DELETE'); } unset($priceResult); } else { if (!$emptyPrice) { if (isset($value['PRICE'])) $value['PRICE'] = str_replace(array(' ', ','), array('', '.'), $value['PRICE']); } else { $value = [ "TMP_ID" => $tmpid ]; } $priceResult = Catalog\Model\Price::update($priceId, $value); if ($priceResult->isSuccess()) { $bUpdatePrice = 'Y'; } else { $strPriceErr = implode('; ', $priceResult->getErrorMessages()); if ($strPriceErr !== '') $strPriceErr = GetMessage('CATI_ERR_PRICE_UPDATE').$strPriceErr; else $strPriceErr = GetMessage('CATI_ERR_PRICE_UPDATE_UNKNOWN'); } unset($priceResult); } unset($productPriceCache[$PRODUCT_ID][$priceType][$hash]); $processedProductPriceCache[$PRODUCT_ID][$priceType][$hash] = $priceId; } else { $boolEmptyNewPrice = ( (isset($value['PRICE']) && '' === $value['PRICE']) && (isset($value['CURRENCY']) && '' === $value['CURRENCY']) ); if (!$boolEmptyNewPrice) { if (isset($value['PRICE'])) $value['PRICE'] = str_replace(array(' ', ','), array('', '.'), $value['PRICE']); $priceResult = Catalog\Model\Price::add($value); if ($priceResult->isSuccess()) { $bUpdatePrice = 'Y'; $processedProductPriceCache[$PRODUCT_ID][$priceType][$hash] = $priceResult->getId(); } else { $strPriceErr = implode('; ', $priceResult->getErrorMessages()); if ($strPriceErr !== '') $strPriceErr = GetMessage('CATI_ERR_PRICE_ADD').$strPriceErr; else $strPriceErr = GetMessage('CATI_ERR_PRICE_ADD_UNKNOWN'); } unset($priceResult); } } if ('' != $strPriceErr) { $strErrorR .= GetMessage("CATI_LINE_NO")." ".$line_num.". ".$strPriceErr.'
'; break; } else { $updateFacet = true; } } } } } } if ('' == $strErrorR) { $correct_lines++; if ($previousProductId === false) $previousProductId = $PRODUCT_ID; if ($previousProductId != $PRODUCT_ID) { CIBlockElement::UpdateSearch($previousProductId, true); $ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues($IBLOCK_ID, $previousProductId); $ipropValues->clearValues(); unset($ipropValues); if ($updateFacet) { if (isset($newProducts[$previousProductId])) CCatalogSKU::ClearCache(); } $updateFacet = false; if (!empty($productPriceCache[$previousProductId])) { foreach ($productPriceCache[$previousProductId] as $priceTypeRows) { if (!empty($priceTypeRows) && is_array($priceTypeRows)) { foreach ($priceTypeRows as $priceId) { $priceResult = Catalog\Model\Price::delete($priceId); if (!$priceResult->isSuccess()) { $strPriceErr = implode('; ', $priceResult->getErrorMessages()); if ($strPriceErr !== '') $strPriceErr = GetMessage('CATI_ERR_PRICE_DELETE').$strPriceErr; else $strPriceErr = GetMessage('CATI_ERR_PRICE_DELETE'); $strErrorR .= GetMessage("CATI_LINE_NO")." ".$line_num.". ".$strPriceErr.'
'; break 2; } } } } unset($productPriceCache[$previousProductId]); } if (!empty($processedProductPriceCache[$previousProductId])) unset($processedProductPriceCache[$previousProductId]); $previousProductId = $PRODUCT_ID; } } else { $error_lines++; $strImportErrorMessage .= $strErrorR; } if (!($bAllLinesLoaded = CSVCheckTimeout($max_execution_time))) break; } while ($arRes = $csvFile->Fetch()); } if ($PRODUCT_ID > 0) { CIBlockElement::UpdateSearch($PRODUCT_ID, true); $ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues($IBLOCK_ID, $PRODUCT_ID); $ipropValues->clearValues(); unset($ipropValues); if ($updateFacet) { if (isset($newProducts[$PRODUCT_ID])) CCatalogSKU::ClearCache(); } $updateFacet = false; if (!empty($productPriceCache[$PRODUCT_ID])) { foreach ($productPriceCache[$PRODUCT_ID] as $priceTypeRows) { if (!empty($priceTypeRows) && is_array($priceTypeRows)) { foreach ($priceTypeRows as $priceId) { $priceResult = Catalog\Model\Price::delete($priceId); if (!$priceResult->isSuccess()) { $strPriceErr = implode('; ', $priceResult->getErrorMessages()); if ($strPriceErr !== '') $strPriceErr = GetMessage('CATI_ERR_PRICE_DELETE').$strPriceErr; else $strPriceErr = GetMessage('CATI_ERR_PRICE_DELETE'); $strErrorR .= GetMessage("CATI_LINE_NO")." ".$line_num.". ".$strPriceErr.'
'; break 2; } } } } unset($productPriceCache[$PRODUCT_ID]); } if (!empty($processedProductPriceCache[$PRODUCT_ID])) unset($processedProductPriceCache[$PRODUCT_ID]); } Catalog\Product\Sku::disableDeferredCalculation(); Catalog\Product\Sku::calculate(); Iblock\PropertyIndex\Manager::disableDeferredIndexing(); Iblock\PropertyIndex\Manager::runDeferredIndexing($IBLOCK_ID); ////////////////////////////// // start additional actions // ////////////////////////////// // activate 'in-file' sections if ($bAllLinesLoaded && $bThereIsGroups && $inFileAction == 'A' && !$bDeactivationStarted) { $res = CIBlockSection::GetList( array(), array("IBLOCK_ID" => $IBLOCK_ID, "TMP_ID" => $tmpid, "ACTIVE" => "N", 'CHECK_PERMISSIONS' => 'N'), false, array('ID', 'NAME') ); while($arr = $res->Fetch()) { $bs->Update($arr["ID"], array("NAME"=>$arr["NAME"], "ACTIVE" => "Y")); if (!($bAllLinesLoaded = CSVCheckTimeout($max_execution_time))) break; } } // activate 'in-file' elements if ($bAllLinesLoaded && $inFileAction=="A" && !$bDeactivationStarted) { Catalog\Product\Sku::enableDeferredCalculation(); $res = CIBlockElement::GetList( array(), array("IBLOCK_ID" => $IBLOCK_ID, "TMP_ID" => $tmpid, "ACTIVE" => "N"), false, false, array('ID') ); while($arr = $res->Fetch()) { $el->Update($arr["ID"], array("ACTIVE" => "Y")); if (!($bAllLinesLoaded = CSVCheckTimeout($max_execution_time))) break; } Catalog\Product\Sku::disableDeferredCalculation(); Catalog\Product\Sku::calculate(); } // update or delete 'not-in-file sections' if ($bAllLinesLoaded && $outFileAction != 'F' && $bThereIsGroups) { if ($outFileAction == "D") Catalog\Product\Sku::enableDeferredCalculation(); $res = CIBlockSection::GetList( array(), array("IBLOCK_ID" => $IBLOCK_ID, "!TMP_ID" => $tmpid, 'CHECK_PERMISSIONS' => 'N'), false, array('ID', 'NAME') ); while($arr = $res->Fetch()) { if ($outFileAction=="D") { CIBlockSection::Delete($arr["ID"]); } elseif ($outFileAction == 'H' || $outFileAction == 'M') // H or M { $bDeactivationStarted = true; $bs->Update($arr["ID"], array("NAME"=>$arr["NAME"], "ACTIVE" => "N", "TMP_ID" => $tmpid)); } if (!($bAllLinesLoaded = CSVCheckTimeout($max_execution_time))) break; } if ($outFileAction == "D") { Catalog\Product\Sku::disableDeferredCalculation(); Catalog\Product\Sku::calculate(); } } // update or delete 'not-in-file' elements if ($bAllLinesLoaded && $outFileAction != "F") { Catalog\Product\Sku::enableDeferredCalculation(); if ($bIBlockIsCatalog && $outFileAction=="M") { $arProductArray = Catalog\ProductTable::getDefaultAvailableSettings(); $arProductArray['TMP_ID'] = $tmpid; $filter = array('=IBLOCK_ELEMENT.IBLOCK_ID' => $IBLOCK_ID, '!=TMP_ID' => $tmpid); if (!$separateSku) { $filter['!=TYPE'] = Catalog\ProductTable::TYPE_SKU; } $res = Catalog\Model\Product::getList(array( 'select' => array('ID'), 'filter' => $filter, 'order' => array('ID' => 'ASC') )); while($arr = $res->fetch()) { $result = Catalog\Model\Product::update($arr['ID'], $arProductArray); $killed_lines++; if (!($bAllLinesLoaded = CSVCheckTimeout($max_execution_time))) break; } unset($arr, $res); } else { $res = CIBlockElement::GetList( array('ID' => 'ASC'), array("IBLOCK_ID" => $IBLOCK_ID, "!TMP_ID" => $tmpid), false, false, array('ID') ); while($arr = $res->Fetch()) { if ($outFileAction == "D") { CIBlockElement::Delete($arr["ID"]); $killed_lines++; } elseif ($outFileAction == "H") // H { $bDeactivationStarted = true; $el->Update($arr["ID"], array("ACTIVE" => "N", "TMP_ID" => $tmpid)); $killed_lines++; } if (!($bAllLinesLoaded = CSVCheckTimeout($max_execution_time))) break; } unset($arr, $res); } Catalog\Product\Sku::disableDeferredCalculation(); Catalog\Product\Sku::calculate(); } // delete 'not-in-file' element prices if ($bAllLinesLoaded && $bIBlockIsCatalog && 'Y' == $bUpdatePrice && $outFileAction=="D") { $filter = array( '=ELEMENT.IBLOCK_ID' => $IBLOCK_ID, '!=TMP_ID' => $tmpid ); if (!$separateSku) { $filter['!=PRODUCT.TYPE'] = Catalog\ProductTable::TYPE_SKU; } Catalog\Product\Sku::enableDeferredCalculation(); $res = Catalog\Model\Price::getList(array( 'select' => array('ID'), 'filter' => $filter )); while($arr = $res->fetch()) { $priceResult = Catalog\Model\Price::delete($arr['ID']); if (!($bAllLinesLoaded = CSVCheckTimeout($max_execution_time))) break; } Catalog\Product\Sku::disableDeferredCalculation(); Catalog\Product\Sku::calculate(); } if (!$bAllLinesLoaded) { $bAllDataLoaded = false; $INTERNAL_VARS_LIST = "tmpid,line_num,correct_lines,error_lines,killed_lines,arIBlockProperty,bThereIsGroups,arProductGroups,arIBlockPropertyValue,bDeactivationStarted,bUpdatePrice"; $SETUP_VARS_LIST = "IBLOCK_ID,URL_DATA_FILE,fields_type,first_names_r,delimiter_r,delimiter_other_r,first_names_f,metki_f,PATH2IMAGE_FILES,outFileAction,inFileAction,max_execution_time,IMAGE_RESIZE,USE_TRANSLIT,TRANSLIT_LANG,CLEAR_EMPTY_PRICE,CML2_LINK_IS_XML"; for ($i = 0; $i < $NUM_FIELDS; $i++) $SETUP_VARS_LIST .= ",field_".$i; $CUR_FILE_POS = $csvFile->GetPos(); } else { CIBlock::enableClearTagCache(); CIBlock::clearIblockTagCache($IBLOCK_ID); } } if ($bTmpUserCreated) { if (isset($USER_TMP)) { $USER = $USER_TMP; unset($USER_TMP); } }