IsAdmin()) $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); if(!isset($INTERVAL)) $INTERVAL = 30; else $INTERVAL = intval($INTERVAL); @set_time_limit(0); $start_time = time(); $arErrors = array(); $arMessages = array(); if($_SERVER["REQUEST_METHOD"] == "POST" && $_REQUEST["Import"]=="Y") { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php"); //Initialize NS variable which will save step data if(array_key_exists("NS", $_POST) && is_array($_POST["NS"])) { $NS = $_POST["NS"]; if(array_key_exists("charset", $NS) && $NS["charset"] === "false") $NS["charset"] = false; if(array_key_exists("PREVIEW", $NS) && $NS["PREVIEW"] === "false") $NS["PREVIEW"] = false; if(array_key_exists("bOffer", $NS) && $NS["bOffer"] === "false") $NS["bOffer"] = false; } else { $NS = array( "STEP" => 0, "IBLOCK_TYPE" => $_REQUEST["IBLOCK_TYPE"], "LID" => is_array($_REQUEST["LID"])? $_REQUEST["LID"]: array(), "URL_DATA_FILE" => $_REQUEST["URL_DATA_FILE"], "ACTION" => $_REQUEST["outFileAction"], "PREVIEW" => $_REQUEST["GENERATE_PREVIEW"]==="Y", ); } //We have to strongly check all about file names at server side $ABS_FILE_NAME = false; $WORK_DIR_NAME = false; if(isset($NS["URL_DATA_FILE"]) && ($NS["URL_DATA_FILE"] <> '')) { $filename = trim(str_replace("\\", "/", trim($NS["URL_DATA_FILE"])), "/"); $FILE_NAME = rel2abs($_SERVER["DOCUMENT_ROOT"], "/".$filename); if((mb_strlen($FILE_NAME) > 1) && ($FILE_NAME === "/".$filename) && ($APPLICATION->GetFileAccessPermission($FILE_NAME) >= "W")) { $ABS_FILE_NAME = $_SERVER["DOCUMENT_ROOT"].$FILE_NAME; $WORK_DIR_NAME = mb_substr($ABS_FILE_NAME, 0, mb_strrpos($ABS_FILE_NAME, "/") + 1); } } //This object will load file into database $obXMLFile = new CIBlockXMLFile; if(!check_bitrix_sessid()) { $arErrors[] = GetMessage("IBLOCK_CML2_ACCESS_DENIED"); } elseif($ABS_FILE_NAME) { if($NS["STEP"] < 1) { //This will save mapping for ID to XML_ID translation $_SESSION["BX_CML2_IMPORT"] = array( "SECTION_MAP" => false, "PRICES_MAP" => false, ); $obXMLFile->DropTemporaryTables(); if(CIBlockCMLImport::CheckIfFileIsCML($ABS_FILE_NAME)) $NS["STEP"]++; else $arErrors[] = GetMessage("IBLOCK_CML2_WRONG_FILE_ERROR"); } elseif($NS["STEP"] < 2) { if($obXMLFile->CreateTemporaryTables()) $NS["STEP"]++; else $arErrors[] = GetMessage("IBLOCK_CML2_TABLE_CREATE_ERROR"); } elseif($NS["STEP"] < 3) { if(file_exists($ABS_FILE_NAME) && is_file($ABS_FILE_NAME) && ($fp = fopen($ABS_FILE_NAME, "rb"))) { if($obXMLFile->ReadXMLToDatabase($fp, $NS, $INTERVAL)) $NS["STEP"]++; fclose($fp); } else { $arErrors[] = GetMessage("IBLOCK_CML2_FILE_ERROR"); } } elseif($NS["STEP"] < 4) { if($obXMLFile->IndexTemporaryTables()) $NS["STEP"]++; else $arErrors[] = GetMessage("IBLOCK_CML2_INDEX_ERROR"); } elseif($NS["STEP"] < 5) { $obCatalog = new CIBlockCMLImport; $obCatalog->Init($NS, $WORK_DIR_NAME, true, $NS["PREVIEW"], false, true); $result = $obCatalog->ImportMetaData(array(1, 2), $NS["IBLOCK_TYPE"], $NS["LID"]); if($result === true) { $result = $obCatalog->ImportSections(); if($result === true) $obCatalog->DeactivateSections("A"); } if($result === true) $NS["STEP"]++; else $arErrors[] = $result; } elseif($NS["STEP"] < 6) { if(($NS["DONE"]["ALL"] <= 0) && $NS["XML_ELEMENTS_PARENT"]) { $rs = $DB->Query("select count(*) C from b_xml_tree where PARENT_ID = ".intval($NS["XML_ELEMENTS_PARENT"])); $ar = $rs->Fetch(); $NS["DONE"]["ALL"] = $ar["C"]; } $obCatalog = new CIBlockCMLImport; $obCatalog->Init($NS, $WORK_DIR_NAME, true, $NS["PREVIEW"], false, true); $obCatalog->ReadCatalogData($_SESSION["BX_CML2_IMPORT"]["SECTION_MAP"], $_SESSION["BX_CML2_IMPORT"]["PRICES_MAP"]); $result = $obCatalog->ImportElements($start_time, $INTERVAL); $counter = 0; foreach($result as $key=>$value) { $NS["DONE"][$key] += $value; $counter+=$value; } if(!$counter) $NS["STEP"]++; } elseif($NS["STEP"] < 7) { $obCatalog = new CIBlockCMLImport; $obCatalog->Init($NS, $WORK_DIR_NAME, true, $NS["PREVIEW"], false, true); $result = $obCatalog->DeactivateElement($NS["ACTION"], $start_time, $INTERVAL); $counter = 0; foreach($result as $key=>$value) { $NS["DONE"][$key] += $value; $counter+=$value; } if(!$counter) $NS["STEP"]++; } elseif($NS["STEP"] < 8) { $obCatalog = new CIBlockCMLImport; $obCatalog->Init($NS, $WORK_DIR_NAME, true, $NS["PREVIEW"], false, true); $obCatalog->ImportProductSets(); $NS["STEP"]++; } } else { $arErrors[] = GetMessage("IBLOCK_CML2_FILE_ERROR"); } ?> $strMessage,"TYPE"=>"OK")); if(count($arErrors) == 0) { if($NS["STEP"] < 8) { $progressItems = array( GetMessage("IBLOCK_CML2_TABLES_DROPPED"), ); $progressTotal = 0; $progressValue = 0; if($NS["STEP"] < 1) echo GetMessage("IBLOCK_CML2_TABLES_CREATION"); elseif($NS["STEP"] < 2) echo "".GetMessage("IBLOCK_CML2_TABLES_CREATION").""; else echo GetMessage("IBLOCK_CML2_TABLES_CREATED"); if($NS["STEP"] < 2) $progressItems[] = GetMessage("IBLOCK_CML2_FILE_READING"); elseif($NS["STEP"] < 3) { if(file_exists($ABS_FILE_NAME)) $file_size = filesize($ABS_FILE_NAME); else $file_size = 0; $progressItems[] = "".GetMessage("IBLOCK_CML2_FILE_PROGRESS2")."
#PROGRESS_BAR#"; $progressTotal = $file_size; $progressValue = $obXMLFile->GetFilePosition(); } else $progressItems[] = GetMessage("IBLOCK_CML2_FILE_READ"); if($NS["STEP"] < 3) $progressItems[] = GetMessage("IBLOCK_CML2_INDEX_CREATION"); elseif($NS["STEP"] < 4) $progressItems[] = "".GetMessage("IBLOCK_CML2_INDEX_CREATION").""; else $progressItems[] = GetMessage("IBLOCK_CML2_INDEX_CREATED"); if($NS["STEP"] < 4) $progressItems[] = GetMessage("IBLOCK_CML2_METADATA"); elseif($NS["STEP"] < 5) $progressItems[] = "".GetMessage("IBLOCK_CML2_METADATA").""; else $progressItems[] = GetMessage("IBLOCK_CML2_METADATA_DONE"); if($NS["STEP"] < 5) $progressItems[] = GetMessage("IBLOCK_CML2_ELEMENTS"); elseif($NS["STEP"] < 6) { $progressItems[] = "".GetMessage("IBLOCK_CML2_ELEMENTS_PROGRESS", array( "#DONE#" => intval($NS["DONE"]["CRC"]), "#TOTAL#"=> intval($NS["DONE"]["ALL"]), ))."
"; $progressTotal = intval($NS["DONE"]["ALL"]); $progressValue = intval($NS["DONE"]["CRC"]); } else $progressItems[] = GetMessage("IBLOCK_CML2_ELEMENTS_DONE"); if($NS["ACTION"]=="A" || $NS["ACTION"]=="D") { if($NS["ACTION"]=="A") if($NS["STEP"] < 6) $progressItems[] = GetMessage("IBLOCK_CML2_DEACTIVATION"); elseif($NS["STEP"] < 7) $progressItems[] = "".GetMessage("IBLOCK_CML2_DEACTIVATION_PROGRESS", array( "#DONE#" => intval($NS["DONE"]["DEA"]), )).""; else $progressItems[] = GetMessage("IBLOCK_CML2_DEACTIVATION_DONE"); else if($NS["STEP"] < 6) $progressItems[] = GetMessage("IBLOCK_CML2_DELETE"); elseif($NS["STEP"] < 7) $progressItems[] = "".GetMessage("IBLOCK_CML2_DELETE_PROGRESS", array( "#DONE#" => intval($NS["DONE"]["DEL"]), )).""; else $progressItems[] = GetMessage("IBLOCK_CML2_DELETE_DONE"); } CAdminMessage::ShowMessage(array( "DETAILS" => "

".implode("

", $progressItems)."

", "HTML" => true, "TYPE" => "PROGRESS", "PROGRESS_TOTAL" => $progressTotal, "PROGRESS_VALUE" => $progressValue, )); if($NS["STEP"] > 0) echo ''; } else { $progressItems = array( GetMessage("IBLOCK_CML2_ADDED", array("#COUNT#"=>intval($NS["DONE"]["ADD"]))), GetMessage("IBLOCK_CML2_UPDATED", array("#COUNT#"=>intval($NS["DONE"]["UPD"]))), GetMessage("IBLOCK_CML2_DELETED", array("#COUNT#"=>intval($NS["DONE"]["DEL"]))), GetMessage("IBLOCK_CML2_DEACTIVATED", array("#COUNT#"=>intval($NS["DONE"]["DEA"]))), GetMessage("IBLOCK_CML2_WITH_ERRORS", array("#COUNT#"=>intval($NS["DONE"]["ERR"]))), ); CAdminMessage::ShowMessage(array( "MESSAGE" => GetMessage("IBLOCK_CML2_DONE"), "DETAILS" => "

".implode("

", $progressItems)."

", "HTML" => true, "TYPE" => "PROGRESS", "BUTTONS" => array( array( "VALUE" => GetMessage("IBLOCK_CML2_ELEMENTS_LIST"), "ONCLICK" => "window.location = '".CUtil::JSEscape(CIBlock::GetAdminElementListLink( $NS["IBLOCK_ID"] , array('find_el_y'=>'Y', 'clear_filter'=>'Y', 'apply_filter'=>'Y')))."';", ), ), )); echo ''; } } else { echo ''; } require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/epilog_admin_js.php"); } $APPLICATION->SetTitle(GetMessage("IBLOCK_CML2_TITLE")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ?>
"edit1", "TAB" => GetMessage("IBLOCK_CML2_TAB"), "ICON" => "main_user_edit", "TITLE" => GetMessage("IBLOCK_CML2_TAB_TITLE"), ), ); $tabControl = new CAdminTabControl("tabControl", $aTabs, true, true); ?>
"asc"), array("ACTIVE"=>"Y")); $arIBlockType = array("reference"=>array(), "reference_id"=>array()); while($arr = $rsIBlockType->Fetch()) { if($ar = CIBlockType::GetByIDLang($arr["ID"], LANGUAGE_ID)) { $arIBlockType["reference"][] = "[".$arr["ID"]."] ".$ar["~NAME"]; $arIBlockType["reference_id"][] = $arr["ID"]; } } $tabControl->Begin(); $tabControl->BeginNextTab(); ?> :