Advertisement
Guest User

Untitled

a guest
Apr 10th, 2018
467
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 24.08 KB | None | 0 0
  1. <?
  2. if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
  3. /** @global CMain $APPLICATION */
  4. /** @global CUser $USER */
  5. /** @global CDatabase $DB */
  6. /** @var CBitrixCatalogImport1C $this */
  7. /** @var array $arParams */
  8. /** @var array $arResult */
  9. /** @var string $componentName */
  10. /** @var string $componentPath */
  11. /** @var string $componentTemplate */
  12. /** @var string $parentComponentName */
  13. /** @var string $parentComponentPath */
  14. /** @var string $parentComponentTemplate */
  15. $this->setFrameMode(false);
  16.  
  17. /*************************************************************************
  18.     Processing of received parameters
  19. *************************************************************************/
  20.  
  21. $arParams["IBLOCK_TYPE"] = trim($arParams["IBLOCK_TYPE"]);
  22. $arParams["INTERVAL"] = intval($arParams["INTERVAL"]);
  23.  
  24. if (!is_array($arParams["GROUP_PERMISSIONS"]))
  25.     $arParams["GROUP_PERMISSIONS"] = array(1);
  26.  
  27. if (!is_array($arParams["SITE_LIST"]))
  28.     $arParams["SITE_LIST"] = array();
  29.  
  30. if ($arParams["ELEMENT_ACTION"]!="N" && $arParams["ELEMENT_ACTION"]!="A")
  31.     $arParams["ELEMENT_ACTION"] = "D";
  32. if ($arParams["SECTION_ACTION"]!="N" && $arParams["SECTION_ACTION"]!="A")
  33.     $arParams["SECTION_ACTION"] = "D";
  34.  
  35. $arParams["FILE_SIZE_LIMIT"] = intval($arParams["FILE_SIZE_LIMIT"]);
  36. if ($arParams["FILE_SIZE_LIMIT"] < 1)
  37.     $arParams["FILE_SIZE_LIMIT"] = 200*1024; //200KB
  38.  
  39. $arParams["USE_CRC"] = $arParams["USE_CRC"]!="N";
  40. $arParams["USE_ZIP"] = $arParams["USE_ZIP"]!="N";
  41. $arParams["USE_OFFERS"] = $arParams["USE_OFFERS"]=="Y";
  42. $arParams["FORCE_OFFERS"] = $arParams["FORCE_OFFERS"]=="Y";
  43. $arParams["USE_IBLOCK_TYPE_ID"] = $arParams["USE_IBLOCK_TYPE_ID"]=="Y";
  44. $arParams["USE_IBLOCK_PICTURE_SETTINGS"] = $arParams["USE_IBLOCK_PICTURE_SETTINGS"]=="Y";
  45. $arParams["SKIP_ROOT_SECTION"] = $arParams["SKIP_ROOT_SECTION"]=="Y";
  46. if ($arParams["USE_TEMP_DIR"] !== "Y" && $arParams["USE_TEMP_DIR"] !== "N")
  47.     $arParams["USE_TEMP_DIR"] = (defined("BX24_HOST_NAME")? "Y": "N");
  48. if (!isset($arParams["DISABLE_CHANGE_PRICE_NAME"]))
  49.     $arParams["DISABLE_CHANGE_PRICE_NAME"] = COption::GetOptionString("catalog", "1C_DISABLE_CHANGE_PRICE_NAME");
  50. $arParams["DISABLE_CHANGE_PRICE_NAME"] = (isset($arParams["DISABLE_CHANGE_PRICE_NAME"]) && $arParams["DISABLE_CHANGE_PRICE_NAME"] == 'Y');
  51.  
  52. if ($arParams["USE_IBLOCK_PICTURE_SETTINGS"])
  53. {
  54.     $preview = true;
  55.     $detail = true;
  56. }
  57. else
  58. {
  59.     $arParams["GENERATE_PREVIEW"] = $arParams["GENERATE_PREVIEW"]!="N";
  60.     if ($arParams["GENERATE_PREVIEW"])
  61.     {
  62.         $preview = array(
  63.             intval($arParams["PREVIEW_WIDTH"]) > 1? intval($arParams["PREVIEW_WIDTH"]): 100,
  64.             intval($arParams["PREVIEW_HEIGHT"]) > 1? intval($arParams["PREVIEW_HEIGHT"]): 100,
  65.         );
  66.     }
  67.     else
  68.     {
  69.         $preview = false;
  70.     }
  71.  
  72.     $arParams["DETAIL_RESIZE"] = $arParams["DETAIL_RESIZE"]!="N";
  73.     if ($arParams["DETAIL_RESIZE"])
  74.     {
  75.         $detail = array(
  76.             intval($arParams["DETAIL_WIDTH"]) > 1? intval($arParams["DETAIL_WIDTH"]): 300,
  77.             intval($arParams["DETAIL_HEIGHT"]) > 1? intval($arParams["DETAIL_HEIGHT"]): 300,
  78.         );
  79.     }
  80.     else
  81.     {
  82.         $detail = false;
  83.     }
  84. }
  85.  
  86. if (isset($arParams["TRANSLIT_REPLACE_CHAR"]) && strlen($arParams["TRANSLIT_REPLACE_CHAR"]) > 0)
  87.     $replaceChar = substr($arParams["TRANSLIT_REPLACE_CHAR"], 0, 1);
  88. else
  89.     $replaceChar = '_';
  90.  
  91. $arParams["TRANSLIT_MAX_LEN"] = intval($arParams["TRANSLIT_MAX_LEN"]);
  92. if ($arParams["TRANSLIT_MAX_LEN"] <= 0)
  93.     $arParams["TRANSLIT_MAX_LEN"] = 100;
  94. if (!array_key_exists("TRANSLIT_CHANGE_CASE", $arParams))
  95.     $arParams["TRANSLIT_CHANGE_CASE"] = 'L'; // 'L' - toLower, 'U' - toUpper, false - do not change
  96. if (!array_key_exists("TRANSLIT_REPLACE_SPACE", $arParams))
  97.     $arParams["TRANSLIT_REPLACE_SPACE"] = $replaceChar;
  98. if (!array_key_exists("TRANSLIT_REPLACE_OTHER", $arParams))
  99.     $arParams["TRANSLIT_REPLACE_OTHER"] = $replaceChar;
  100. $arParams["TRANSLIT_DELETE_REPEAT_REPLACE"] = $arParams["TRANSLIT_DELETE_REPEAT_REPLACE"] !== "N";
  101.  
  102. $arTranslitParams = array(
  103.     "max_len" => $arParams["TRANSLIT_MAX_LEN"],
  104.     "change_case" => $arParams["TRANSLIT_CHANGE_CASE"],
  105.     "replace_space" => $arParams["TRANSLIT_REPLACE_SPACE"],
  106.     "replace_other" => $arParams["TRANSLIT_REPLACE_OTHER"],
  107.     "delete_repeat_replace" => $arParams["TRANSLIT_DELETE_REPEAT_REPLACE"],
  108. );
  109.  
  110. $arParams["TRANSLIT_ON_ADD"] = $arParams["TRANSLIT_ON_ADD"] !== "N";
  111. $arParams["TRANSLIT_ON_UPDATE"] = $arParams["TRANSLIT_ON_UPDATE"] !== "N";
  112.  
  113. if (
  114.     //Parameter was not passed to the component
  115.     !isset($arParams["SKIP_SOURCE_CHECK"])
  116.     || !in_array($arParams["SKIP_SOURCE_CHECK"], array("Y", "N"))
  117. )
  118. {
  119.     //If default skip mode is not set
  120.     if (
  121.         isset($_GET["mode"])
  122.         && $_GET["mode"] !== "checkauth"
  123.         && check_bitrix_sessid() //we got valid token from 1C
  124.         && COption::GetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y") === "Y"//and option is set
  125.     )
  126.     {
  127.         //then change default to the secure one
  128.         COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "N");
  129.     }
  130.  
  131.     if (COption::GetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y") === "Y")
  132.         $arParams["SKIP_SOURCE_CHECK"] = $arParams["SKIP_SOURCE_CHECK"] !== "N";
  133.     else
  134.         $arParams["SKIP_SOURCE_CHECK"] = $arParams["SKIP_SOURCE_CHECK"] === "Y";
  135. }
  136. else
  137. {
  138.     $arParams["SKIP_SOURCE_CHECK"] = $arParams["SKIP_SOURCE_CHECK"] === "Y";
  139. }
  140.  
  141. if ($arParams["INTERVAL"] <= 0)
  142.     @set_time_limit(0);
  143.  
  144. $start_time = time();
  145.  
  146. $bUSER_HAVE_ACCESS = false;
  147. if (isset($USER) && is_object($USER))
  148. {
  149.     $bUSER_HAVE_ACCESS = $USER->IsAdmin();
  150.     if (!$bUSER_HAVE_ACCESS)
  151.     {
  152.         $arUserGroupArray = $USER->GetUserGroupArray();
  153.         foreach ($arParams["GROUP_PERMISSIONS"] as $PERM)
  154.         {
  155.             if (in_array($PERM, $arUserGroupArray))
  156.             {
  157.                 $bUSER_HAVE_ACCESS = true;
  158.                 break;
  159.             }
  160.         }
  161.     }
  162. }
  163.  
  164. $bDesignMode = $APPLICATION->GetShowIncludeAreas()
  165.         && !isset($_GET["mode"])
  166.         && is_object($USER)
  167.         && $USER->IsAdmin();
  168.  
  169. if (!$bDesignMode)
  170. {
  171.     if (!isset($_GET["mode"]))
  172.         return;
  173.     $APPLICATION->RestartBuffer();
  174.     header("Pragma: no-cache");
  175. }
  176.  
  177. //We have to strongly check all about file names at server side
  178. $FILE_NAME = false;
  179. $ABS_FILE_NAME = false;
  180. $WORK_DIR_NAME = false;
  181.  
  182. if ($arParams["USE_TEMP_DIR"] === "Y" && strlen($_SESSION["BX_CML2_IMPORT"]["TEMP_DIR"]) > 0)
  183.     $DIR_NAME = $_SESSION["BX_CML2_IMPORT"]["TEMP_DIR"];
  184. else
  185.     $DIR_NAME = $_SERVER["DOCUMENT_ROOT"]."/".COption::GetOptionString("main", "upload_dir", "upload")."/1c_catalog/";
  186.  
  187. if (
  188.     isset($_GET["filename"])
  189.     && (strlen($_GET["filename"]) > 0)
  190.     && (strlen($DIR_NAME) > 0)
  191. )
  192. {
  193.     //This check for 1c server on linux
  194.     $filename = preg_replace("#^(/tmp/|upload/1c/webdata)#", "", $_GET["filename"]);
  195.     $filename = trim(str_replace("\\", "/", trim($filename)), "/");
  196.  
  197.     $io = CBXVirtualIo::GetInstance();
  198.     $bBadFile = HasScriptExtension($filename)
  199.         || IsFileUnsafe($filename)
  200.         || !$io->ValidatePathString("/".$filename)
  201.     ;
  202.  
  203.     if (!$bBadFile)
  204.     {
  205.         $FILE_NAME = rel2abs($DIR_NAME, "/".$filename);
  206.         if ((strlen($FILE_NAME) > 1) && ($FILE_NAME === "/".$filename))
  207.         {
  208.             $ABS_FILE_NAME = $DIR_NAME.$filename;
  209.             $WORK_DIR_NAME = substr($ABS_FILE_NAME, 0, strrpos($ABS_FILE_NAME, "/")+1);
  210.  
  211.         }
  212.     }
  213. }
  214. /*AddMessage2Log($ABS_FILE_NAME, "component");
  215. AddMessage2Log($WORK_DIR_NAME, "component");
  216. AddMessage2Log($_GET, "component");*/
  217. ob_start();
  218.  
  219. //This is the first exchange command
  220. if ($_GET["mode"] == "checkauth" && $USER->IsAuthorized())
  221. {
  222.     if (
  223.         (COption::GetOptionString("main", "use_session_id_ttl", "N") == "Y")
  224.         && (COption::GetOptionInt("main", "session_id_ttl", 0) > 0)
  225.         && !defined("BX_SESSION_ID_CHANGE")
  226.     )
  227.     {
  228.         echo "failure\n",GetMessage("CC_BSC1_ERROR_SESSION_ID_CHANGE");
  229.     }
  230.     elseif (!$this->checkDatabaseServerTime(600))
  231.     {
  232.         echo "failure\n",GetMessage("CC_BSC1_ERROR_DATABASE_SERVER_TIME");
  233.     }
  234.     else
  235.     {
  236.         echo "success\n";
  237.         echo session_name()."\n";
  238.         echo session_id() ."\n";
  239.         echo bitrix_sessid_get()."\n";
  240.         echo "timestamp=".time()."\n";
  241.     }
  242. }
  243. //Security checks are follow
  244. elseif ((!$arParams["SKIP_SOURCE_CHECK"]) && (!check_bitrix_sessid()))
  245. {
  246.     echo "failure\n",GetMessage("CC_BSC1_ERROR_SOURCE_CHECK");
  247. }
  248. elseif (!$USER->IsAuthorized())
  249. {
  250.     echo "failure\n",GetMessage("CC_BSC1_ERROR_AUTHORIZE");
  251. }
  252. elseif (!$bUSER_HAVE_ACCESS)
  253. {
  254.     echo "failure\n",GetMessage("CC_BSC1_PERMISSION_DENIED");
  255. }
  256. elseif (!CModule::IncludeModule('iblock'))
  257. {
  258.     echo "failure\n",GetMessage("CC_BSC1_ERROR_MODULE");
  259. }
  260. //Prepare exchange place
  261. elseif ($_GET["mode"]=="init")
  262. {
  263.     if ($arParams["USE_TEMP_DIR"] === "Y")
  264.     {
  265.         $DIR_NAME = CTempFile::GetDirectoryName(6, "1c_catalog");
  266.     }
  267.     else
  268.     {
  269.         //Cleanup previous import files
  270.         $this->cleanUpDirectory($DIR_NAME);
  271.     }
  272.  
  273.     CheckDirPath($DIR_NAME);
  274.     if (!is_dir($DIR_NAME))
  275.     {
  276.         echo "failure\n",GetMessage("CC_BSC1_ERROR_INIT");
  277.     }
  278.     else
  279.     {
  280.         $_SESSION["BX_CML2_IMPORT"] = array(
  281.             "zip" => $arParams["USE_ZIP"] && function_exists("zip_open"),
  282.             "TEMP_DIR" => ($arParams["USE_TEMP_DIR"] === "Y"? $DIR_NAME: ""),
  283.             "NS" => array(
  284.                 "STEP" => 0,
  285.             ),
  286.             "SECTION_MAP" => false,
  287.             "PRICES_MAP" => false,
  288.         );
  289.         echo "zip=".($_SESSION["BX_CML2_IMPORT"]["zip"]? "yes": "no")."\n";
  290.         echo "file_limit=".$arParams["FILE_SIZE_LIMIT"];
  291.     }
  292. }
  293. //Receive files
  294. elseif (($_GET["mode"] == "file") && $ABS_FILE_NAME)
  295. {
  296.     //Read http data
  297.  
  298.     $DATA = file_get_contents("php://input");
  299.     $DATA_LEN = defined("BX_UTF")? mb_strlen($DATA, 'latin1'): strlen($DATA);
  300.  
  301.     //And save it the file
  302.     if (isset($DATA) && $DATA !== false)
  303.     {
  304.         CheckDirPath($ABS_FILE_NAME);
  305.         if ($fp = fopen($ABS_FILE_NAME, "ab"))
  306.         {
  307.             $result = fwrite($fp, $DATA);
  308.             if ($result === $DATA_LEN)
  309.             {
  310.                 echo "success\n";
  311.                 if ($_SESSION["BX_CML2_IMPORT"]["zip"])
  312.                     $_SESSION["BX_CML2_IMPORT"]["zip"] = $ABS_FILE_NAME;
  313.             }
  314.             else
  315.             {
  316.                 echo "failure\n",GetMessage("CC_BSC1_ERROR_FILE_WRITE", array("#FILE_NAME#"=>$FILE_NAME));
  317.             }
  318.         }
  319.         else
  320.         {
  321.             echo "failure\n",GetMessage("CC_BSC1_ERROR_FILE_OPEN", array("#FILE_NAME#"=>$FILE_NAME));
  322.         }
  323.     }
  324.     else
  325.     {
  326.         echo "failure\n",GetMessage("CC_BSC1_ERROR_HTTP_READ");
  327.     }
  328. }
  329. //Unpack them if necessary
  330. elseif (($_GET["mode"] == "import") && $_SESSION["BX_CML2_IMPORT"]["zip"])
  331. {
  332.     if (!array_key_exists("last_zip_entry", $_SESSION["BX_CML2_IMPORT"]))
  333.         $_SESSION["BX_CML2_IMPORT"]["last_zip_entry"] = "";
  334.     $result = CIBlockXMLFile::UnZip($_SESSION["BX_CML2_IMPORT"]["zip"], $_SESSION["BX_CML2_IMPORT"]["last_zip_entry"]);
  335.     if ($result===false)
  336.     {
  337.         echo "failure\n",GetMessage("CC_BSC1_ZIP_ERROR");
  338.     }
  339.     elseif ($result===true)
  340.     {
  341.         $_SESSION["BX_CML2_IMPORT"]["zip"] = false;
  342.         echo "progress\n".GetMessage("CC_BSC1_ZIP_DONE");
  343.     }
  344.     else
  345.     {
  346.         $_SESSION["BX_CML2_IMPORT"]["last_zip_entry"] = $result;
  347.         echo "progress\n".GetMessage("CC_BSC1_ZIP_PROGRESS");
  348.     }
  349. }
  350. //Step by step import
  351. elseif (($_GET["mode"] == "import") && $ABS_FILE_NAME)
  352. {
  353.     addmessage2log('dddd','component');
  354.     $NS = &$_SESSION["BX_CML2_IMPORT"]["NS"];
  355.     $strError = "";
  356.     $strMessage = "";
  357.  
  358.     if ($NS["STEP"] < 1)
  359.     {
  360.         CIBlockXMLFile::DropTemporaryTables();
  361.         $strMessage = GetMessage("CC_BSC1_TABLES_DROPPED");
  362.         $NS["STEP"] = 1;
  363.     }
  364.     elseif ($NS["STEP"] == 1)
  365.     {
  366.         if (CIBlockXMLFile::CreateTemporaryTables())
  367.         {
  368.             $strMessage = GetMessage("CC_BSC1_TABLES_CREATED");
  369.             $NS["STEP"] = 2;
  370.  
  371.             foreach (GetModuleEvents("catalog", "OnBeforeCatalogImport1C", true) as $arEvent)
  372.             {
  373.                 $strError = ExecuteModuleEventEx($arEvent, array($arParams, $ABS_FILE_NAME));
  374.             }
  375.         }
  376.         else
  377.         {
  378.             $strError = GetMessage("CC_BSC1_TABLE_CREATE_ERROR");
  379.         }
  380.     }
  381.     elseif ($NS["STEP"] == 2)
  382.     {
  383.  
  384.         $fp = fopen($ABS_FILE_NAME, "rb");
  385.         $total = filesize($ABS_FILE_NAME);
  386.  
  387.         if (($total > 0) && is_resource($fp))
  388.         {
  389.             $obXMLFile = new CIBlockXMLFile;
  390.             if ($obXMLFile->ReadXMLToDatabase($fp, $NS, $arParams["INTERVAL"]))
  391.             {
  392.                 $NS["STEP"] = 3;
  393.                 $strMessage = GetMessage("CC_BSC1_FILE_READ");
  394.             }
  395.             else
  396.             {
  397.                 $strMessage = GetMessage("CC_BSC1_FILE_PROGRESS", array("#PERCENT#"=>$total > 0? round($obXMLFile->GetFilePosition()/$total*100, 2): 0));
  398.             }
  399.             fclose($fp);
  400.         }
  401.         else
  402.         {
  403.             $strError = GetMessage("CC_BSC1_FILE_ERROR");
  404.         }
  405.     }
  406.     elseif ($NS["STEP"] == 3)
  407.     {
  408.         $obXMLFile = new CIBlockXMLFile;
  409.         if ($obXMLFile->IndexTemporaryTables())
  410.         {
  411.             $strMessage = GetMessage("CC_BSC1_INDEX_CREATED");
  412.             $NS["STEP"] = 4;
  413.         }
  414.         else
  415.             $strError = GetMessage("CC_BSC1_INDEX_CREATE_ERROR");
  416.     }
  417.     elseif ($NS["STEP"] == 4)
  418.     {
  419.         $obCatalog = new CIBlockCMLImport;
  420.         $obCatalog->InitEx($NS, array(
  421.             "files_dir" => $WORK_DIR_NAME,
  422.             "use_crc" => $arParams["USE_CRC"],
  423.             "preview" => $preview,
  424.             "detail" => $detail,
  425.             "use_offers" => $arParams["USE_OFFERS"],
  426.             "force_offers" => $arParams["FORCE_OFFERS"],
  427.             "use_iblock_type_id" => $arParams["USE_IBLOCK_TYPE_ID"],
  428.             "translit_on_add" => $arParams["TRANSLIT_ON_ADD"],
  429.             "translit_on_update" => $arParams["TRANSLIT_ON_UPDATE"],
  430.             "translit_params" => $arTranslitParams,
  431.             "skip_root_section" => $arParams["SKIP_ROOT_SECTION"],
  432.             "disable_change_price_name" => $arParams["DISABLE_CHANGE_PRICE_NAME"]
  433.         ));
  434.         $result = $obCatalog->ImportMetaData(array(1,2), $arParams["IBLOCK_TYPE"], $arParams["SITE_LIST"]);
  435.         if ($result === true)
  436.         {
  437.             $strMessage = GetMessage("CC_BSC1_METADATA_IMPORTED");
  438.             $NS["STEP"] = 5;
  439.         }
  440.         elseif (is_array($result))
  441.         {
  442.             $strError = GetMessage("CC_BSC1_METADATA_ERROR").implode("\n", $result);
  443.         }
  444.         else
  445.         {
  446.             $strError = GetMessage("CC_BSC1_METADATA_ERROR").$result;
  447.         }
  448.     }
  449.     elseif ($NS["STEP"] == 5)
  450.     {
  451.         $obCatalog = new CIBlockCMLImport;
  452.         $obCatalog->InitEx($NS, array(
  453.             "files_dir" => $WORK_DIR_NAME,
  454.             "use_crc" => $arParams["USE_CRC"],
  455.             "preview" => $preview,
  456.             "detail" => $detail,
  457.             "use_offers" => $arParams["USE_OFFERS"],
  458.             "force_offers" => $arParams["FORCE_OFFERS"],
  459.             "use_iblock_type_id" => $arParams["USE_IBLOCK_TYPE_ID"],
  460.             "translit_on_add" => $arParams["TRANSLIT_ON_ADD"],
  461.             "translit_on_update" => $arParams["TRANSLIT_ON_UPDATE"],
  462.             "translit_params" => $arTranslitParams,
  463.             "skip_root_section" => $arParams["SKIP_ROOT_SECTION"],
  464.             "disable_change_price_name" => $arParams["DISABLE_CHANGE_PRICE_NAME"]
  465.         ));
  466.         $result = $obCatalog->ImportSections();
  467.         if ($result === true)
  468.         {
  469.             $strMessage = GetMessage("CC_BSC1_SECTIONS_IMPORTED");
  470.             $NS["STEP"] = 6;
  471.         }
  472.         else
  473.         {
  474.             $strError = GetMessage("CC_BSC1_METADATA_ERROR").$result;
  475.         }
  476.     }
  477.     elseif ($NS["STEP"] == 6)
  478.     {
  479.         $obCatalog = new CIBlockCMLImport;
  480.         $obCatalog->InitEx($NS, array(
  481.             "files_dir" => $WORK_DIR_NAME,
  482.             "use_crc" => $arParams["USE_CRC"],
  483.             "preview" => $preview,
  484.             "detail" => $detail,
  485.             "use_offers" => $arParams["USE_OFFERS"],
  486.             "force_offers" => $arParams["FORCE_OFFERS"],
  487.             "use_iblock_type_id" => $arParams["USE_IBLOCK_TYPE_ID"],
  488.             "translit_on_add" => $arParams["TRANSLIT_ON_ADD"],
  489.             "translit_on_update" => $arParams["TRANSLIT_ON_UPDATE"],
  490.             "translit_params" => $arTranslitParams,
  491.             "skip_root_section" => $arParams["SKIP_ROOT_SECTION"],
  492.             "disable_change_price_name" => $arParams["DISABLE_CHANGE_PRICE_NAME"]
  493.         ));
  494.         $obCatalog->DeactivateSections($arParams["SECTION_ACTION"]);
  495.         $obCatalog->SectionsResort();
  496.         $strMessage = GetMessage("CC_BSC1_SECTION_DEA_DONE");
  497.         $NS["STEP"] = 7;
  498.     }
  499.     elseif ($NS["STEP"] == 7)
  500.     {
  501.         if (($NS["DONE"]["ALL"] <= 0) && $NS["XML_ELEMENTS_PARENT"])
  502.         {
  503.             if (CIBlockXMLFile::IsExistTemporaryTable())
  504.             {
  505.                 $NS["DONE"]["ALL"] = CIBlockXMLFile::GetCountItemsWithParent($NS["XML_ELEMENTS_PARENT"]);
  506.             }
  507.             else
  508.             {
  509.                 $strError = GetMessage("CC_BCT1_TABLE_EXIST_ERROR");
  510.             }
  511.         }
  512.  
  513.         if ($strError == "")
  514.         {
  515.             $obCatalog = new CIBlockCMLImport;
  516.             $obCatalog->InitEx($NS, array(
  517.                 "files_dir" => $WORK_DIR_NAME,
  518.                 "use_crc" => $arParams["USE_CRC"],
  519.                 "preview" => $preview,
  520.                 "detail" => $detail,
  521.                 "use_offers" => $arParams["USE_OFFERS"],
  522.                 "force_offers" => $arParams["FORCE_OFFERS"],
  523.                 "use_iblock_type_id" => $arParams["USE_IBLOCK_TYPE_ID"],
  524.                 "translit_on_add" => $arParams["TRANSLIT_ON_ADD"],
  525.                 "translit_on_update" => $arParams["TRANSLIT_ON_UPDATE"],
  526.                 "translit_params" => $arTranslitParams,
  527.                 "skip_root_section" => $arParams["SKIP_ROOT_SECTION"],
  528.                 "disable_change_price_name" => $arParams["DISABLE_CHANGE_PRICE_NAME"]
  529.             ));
  530.             $obCatalog->ReadCatalogData($_SESSION["BX_CML2_IMPORT"]["SECTION_MAP"], $_SESSION["BX_CML2_IMPORT"]["PRICES_MAP"]);
  531.             $result = $obCatalog->ImportElements($start_time, $arParams["INTERVAL"]);
  532.  
  533.             $counter = 0;
  534.             foreach ($result as $key=>$value)
  535.             {
  536.                 $NS["DONE"][$key] += $value;
  537.                 $counter+=$value;
  538.             }
  539.  
  540.             if (!$counter)
  541.             {
  542.                 $strMessage = GetMessage("CC_BSC1_DONE");
  543.                 $NS["STEP"] = 8;
  544.             }
  545.             elseif (strlen($obCatalog->LAST_ERROR))
  546.             {
  547.                 $strError = $obCatalog->LAST_ERROR;
  548.             }
  549.             else
  550.             {
  551.                 $strMessage = GetMessage("CC_BSC1_PROGRESS", array("#TOTAL#"=>$NS["DONE"]["ALL"],"#DONE#"=>intval($NS["DONE"]["CRC"])));
  552.             }
  553.         }
  554.     }
  555.     elseif ($NS["STEP"] == 8)
  556.     {
  557.         $obCatalog = new CIBlockCMLImport;
  558.         $obCatalog->Init($NS);
  559.         $result = $obCatalog->DeactivateElement($arParams["ELEMENT_ACTION"], $start_time, $arParams["INTERVAL"]);
  560.  
  561.         $counter = 0;
  562.         foreach ($result as $key=>$value)
  563.         {
  564.             $NS["DONE"][$key] += $value;
  565.             $counter+=$value;
  566.         }
  567.  
  568.         if (!$counter)
  569.         {
  570.             $strMessage = GetMessage("CC_BSC1_DEA_DONE");
  571.             $NS["STEP"] = 9;
  572.         }
  573.         else
  574.         {
  575.             $strMessage = GetMessage("CC_BSC1_PROGRESS", array("#TOTAL#"=>$NS["DONE"]["ALL"],"#DONE#"=>$NS["DONE"]["NON"]));
  576.         }
  577.     }
  578.     else
  579.     {
  580.         $NS["STEP"]++;
  581.     }
  582.  
  583.     if ($strError)
  584.     {
  585.         echo "failure\n";
  586.         echo str_replace("<br>", "", $strError);
  587.     }
  588.     elseif ($NS["STEP"] < 10)
  589.     {
  590.         echo "progress\n",$strMessage;
  591.     }
  592.     else
  593.     {
  594.         foreach (GetModuleEvents("catalog", "OnSuccessCatalogImport1C", true) as $arEvent)
  595.         {
  596.             ExecuteModuleEventEx($arEvent, array($arParams, $ABS_FILE_NAME));
  597.         }
  598.  
  599.         echo "success\n",GetMessage("CC_BSC1_IMPORT_SUCCESS");
  600.         $_SESSION["BX_CML2_IMPORT"] = array(
  601.             "zip" => $_SESSION["BX_CML2_IMPORT"]["zip"], //save from prev load
  602.             "TEMP_DIR" => $_SESSION["BX_CML2_IMPORT"]["TEMP_DIR"], //save from prev load
  603.             "NS" => array(
  604.                 "STEP" => 0,
  605.             ),
  606.             "SECTION_MAP" => false,
  607.             "PRICES_MAP" => false,
  608.         );
  609.     }
  610. }
  611. //Final step
  612. elseif ($_GET["mode"]=="deactivate")
  613. {
  614.     if ($_GET["timestamp"] > 0)
  615.     {
  616.         $rsImportedIBlocks = \Bitrix\IBlock\IblockFieldTable::getList(array(
  617.             "select" => array("IBLOCK_ID", "DEFAULT_VALUE"),
  618.             "filter" => array(
  619.                 "=FIELD_ID" => "XML_IMPORT_START_TIME",
  620.                 ">=DEFAULT_VALUE" => date("Y-m-d H:i:s", $_GET["timestamp"]),
  621.             ),
  622.         ));
  623.         $timeStamp = ConvertTimeStamp($_GET["timestamp"], "FULL");
  624.  
  625.         while ($arField = $rsImportedIBlocks->fetch())
  626.         {
  627.             $element = new CIBlockElement;
  628.             $rsElements = CIBlockElement::GetList(array(), array(
  629.                 "IBLOCK_ID" => $arField["IBLOCK_ID"],
  630.                 "ACTIVE" => "Y",
  631.                 "<TIMESTAMP_X" =>  $timeStamp,
  632.             ), false, false, array("ID"));
  633.             while ($arElement = $rsElements->Fetch())
  634.             {
  635.                 $element->Update($arElement["ID"], array("ACTIVE" => "N"));
  636.             }
  637.  
  638.             $section = new CIBlockSection();
  639.             $rsSections = CIBlockSection::GetList(array(), array(
  640.                 "IBLOCK_ID" => $arField["IBLOCK_ID"],
  641.                 "ACTIVE" => "Y",
  642.                 "<TIMESTAMP_X" =>  $timeStamp,
  643.             ), false, array("ID"));
  644.             while ($arSection = $rsSections->Fetch())
  645.             {
  646.                 $section->Update($arSection["ID"], array("ACTIVE" => "N"));
  647.             }
  648.         }
  649.  
  650.         echo "success\n",GetMessage("CC_BSC1_DEACTIVATION_DONE");
  651.     }
  652.     else
  653.     {
  654.         echo "failure\n",GetMessage("CC_BSC1_DEACTIVATION_ERROR");
  655.     }
  656. }
  657. elseif ($_GET["mode"]=="complete")
  658. {
  659.     foreach (GetModuleEvents("catalog", "OnCompleteCatalogImport1C", true) as $arEvent)
  660.     {
  661.         ExecuteModuleEventEx($arEvent, array($arParams, $ABS_FILE_NAME));
  662.     }
  663.  
  664.     echo "success\n",GetMessage("CC_BSC1_IMPORT_COMPLETE");
  665. }
  666. else
  667. {
  668.     echo "failure\n",GetMessage("CC_BSC1_ERROR_UNKNOWN_COMMAND");
  669. }
  670.  
  671. $contents = ob_get_contents();
  672. ob_end_clean();
  673.  
  674. if ($DIR_NAME != "")
  675. {
  676.     $ht_name = $DIR_NAME.".htaccess";
  677.     CheckDirPath($ht_name);
  678.     file_put_contents($ht_name, "Deny from All");
  679.     @chmod($ht_name, BX_FILE_PERMISSIONS);
  680. }
  681.  
  682. if (!$bDesignMode)
  683. {
  684.     if (toUpper(LANG_CHARSET) != "WINDOWS-1251")
  685.         $contents = $APPLICATION->ConvertCharset($contents, LANG_CHARSET, "windows-1251");
  686.     header("Content-Type: text/html; charset=windows-1251");
  687.  
  688.     echo $contents;
  689.     //die();
  690. }
  691. else
  692. {
  693.     $this->IncludeComponentLang(".parameters.php");
  694.     $arAction = array(
  695.         "N" => GetMessage("CC_BCI1_NONE"),
  696.         "A" => GetMessage("CC_BCI1_DEACTIVATE"),
  697.         "D" => GetMessage("CC_BCI1_DELETE"),
  698.     );
  699.  
  700.     if (
  701.         (COption::GetOptionString("main", "use_session_id_ttl", "N") == "Y")
  702.         && (COption::GetOptionInt("main", "session_id_ttl", 0) > 0)
  703.         && !defined("BX_SESSION_ID_CHANGE")
  704.     )
  705.         ShowError(GetMessage("CC_BSC1_ERROR_SESSION_ID_CHANGE"));
  706.     ?><table class="data-table">
  707.     <tr><td><?echo GetMessage("CC_BCI1_IBLOCK_TYPE")?></td><td><?echo $arParams["IBLOCK_TYPE"]?></td></tr>
  708.     <tr><td><?echo GetMessage("CC_BCI1_SITE_LIST")?></td><td><?echo implode(", ", $arParams["SITE_LIST"])?></td></tr>
  709.     <tr><td><?echo GetMessage("CC_BCI1_INTERVAL")?></td><td><?echo $arParams["INTERVAL"]?></td></tr>
  710.     <tr><td><?echo GetMessage("CC_BCI1_ELEMENT_ACTION")?></td><td><?echo $arAction[$arParams["ELEMENT_ACTION"]]?></td></tr>
  711.     <tr><td><?echo GetMessage("CC_BCI1_SECTION_ACTION")?></td><td><?echo $arAction[$arParams["SECTION_ACTION"]]?></td></tr>
  712.     <tr><td><?echo GetMessage("CC_BCI1_FILE_SIZE_LIMIT")?></td><td><?echo $arParams["FILE_SIZE_LIMIT"]?></td></tr>
  713.     <tr><td><?echo GetMessage("CC_BCI1_USE_CRC")?></td><td><?echo $arParams["USE_CRC"]? GetMessage("MAIN_YES"): GetMessage("MAIN_NO")?></td></tr>
  714.     <tr><td><?echo GetMessage("CC_BCI1_USE_ZIP")?></td><td><?echo $arParams["USE_ZIP"]? GetMessage("MAIN_YES"): GetMessage("MAIN_NO")?></td></tr>
  715.     <tr><td><?echo GetMessage("CC_BCI1_USE_IBLOCK_PICTURE_SETTINGS")?></td><td><?echo $arParams["USE_IBLOCK_PICTURE_SETTINGS"]? GetMessage("MAIN_YES"): GetMessage("MAIN_NO")?></td></tr>
  716.     <?if (!$arParams["USE_IBLOCK_PICTURE_SETTINGS"]):?>
  717.         <tr><td><?echo GetMessage("CC_BCI1_GENERATE_PREVIEW")?></td><td><?echo $arParams["GENERATE_PREVIEW"]? GetMessage("MAIN_YES")." ".$arParams["PREVIEW_WIDTH"]."x".$arParams["PREVIEW_HEIGHT"]: GetMessage("MAIN_NO")?></td></tr>
  718.         <tr><td><?echo GetMessage("CC_BCI1_DETAIL_RESIZE")?></td><td><?echo $arParams["DETAIL_RESIZE"]? GetMessage("MAIN_YES")." ".$arParams["DETAIL_WIDTH"]."x".$arParams["DETAIL_HEIGHT"]: GetMessage("MAIN_NO")?></td></tr>
  719.     <?endif?>
  720.     <tr><td><?echo GetMessage("CC_BCI1_TRANSLIT_ON_ADD")?></td><td><?echo $arParams["TRANSLIT_ON_ADD"]? GetMessage("MAIN_YES"): GetMessage("MAIN_NO")?></td></tr>
  721.     <tr><td><?echo GetMessage("CC_BCI1_TRANSLIT_ON_UPDATE")?></td><td><?echo $arParams["TRANSLIT_ON_UPDATE"]? GetMessage("MAIN_YES"): GetMessage("MAIN_NO")?></td></tr>
  722.     <?if ($arParams["TRANSLIT_ON_ADD"] || $arParams["TRANSLIT_ON_UPDATE"]):?>
  723.         <tr><td><?echo GetMessage("CC_BCI1_TRANSLIT_MAX_LEN")?></td><td><?echo $arParams["TRANSLIT_MAX_LEN"]?></td></tr>
  724.         <tr><td><?echo GetMessage("CC_BCI1_TRANSLIT_CHANGE_CASE")?></td><td><?
  725.             if ($arParams["TRANSLIT_CHANGE_CASE"] == "L" || $arParams["TRANSLIT_CHANGE_CASE"] == "l")
  726.                 echo GetMessage("CC_BCI1_TRANSLIT_CHANGE_CASE_LOWER");
  727.             elseif ($arParams["TRANSLIT_CHANGE_CASE"] == "U" || $arParams["TRANSLIT_CHANGE_CASE"] == "u")
  728.                 echo GetMessage("CC_BCI1_TRANSLIT_CHANGE_CASE_UPPER");
  729.             else
  730.                 echo GetMessage("CC_BCI1_TRANSLIT_CHANGE_CASE_PRESERVE");
  731.         ?></td></tr>
  732.         <tr><td><?echo GetMessage("CC_BCI1_TRANSLIT_REPLACE_SPACE")?></td><td><?echo $arParams["TRANSLIT_REPLACE_SPACE"]?></td></tr>
  733.         <tr><td><?echo GetMessage("CC_BCI1_TRANSLIT_REPLACE_OTHER")?></td><td><?echo $arParams["TRANSLIT_REPLACE_OTHER"]?></td></tr>
  734.         <tr><td><?echo GetMessage("CC_BCI1_TRANSLIT_DELETE_REPEAT_REPLACE")?></td><td><?echo $arParams["TRANSLIT_DELETE_REPEAT_REPLACE"]? GetMessage("MAIN_YES"): GetMessage("MAIN_NO")?></td></tr>
  735.     <?endif?>
  736.     <tr><td><?echo GetMessage("CC_BCI1_USE_OFFERS")?></td><td><?echo $arParams["USE_OFFERS"]? GetMessage("MAIN_YES"): GetMessage("MAIN_NO")?></td></tr>
  737.     <tr><td><?echo GetMessage("CC_BCI1_FORCE_OFFERS")?></td><td><?echo $arParams["FORCE_OFFERS"]? GetMessage("MAIN_YES"): GetMessage("MAIN_NO")?></td></tr>
  738.     <tr><td><?echo GetMessage("CC_BCI1_DISABLE_CHANGE_PRICE_NAME")?></td><td><?echo $arParams["DISABLE_CHANGE_PRICE_NAME"]? GetMessage("MAIN_YES"): GetMessage("MAIN_NO")?></td></tr>
  739.     </table>
  740.     <?
  741. }
  742. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement