PageRenderTime 50ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/bitrix/components/bitrix/catalog.export.1c/component.php

https://gitlab.com/Rad1calDreamer/honey
PHP | 319 lines | 295 code | 24 blank | 0 comment | 43 complexity | aab909218f0a73a81d8faf8d4df6f6ab MD5 | raw file
  1. <?
  2. if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
  3. $arParams["IBLOCK_ID"] = intval($arParams["IBLOCK_ID"]);
  4. $arParams["INTERVAL"] = intval($arParams["INTERVAL"]);
  5. $arParams["ELEMENTS_PER_STEP"] = intval($arParams["ELEMENTS_PER_STEP"]);
  6. if($arParams["ELEMENTS_PER_STEP"] < 0)
  7. $arParams["ELEMENTS_PER_STEP"] = 0;
  8. if(!is_array($arParams["GROUP_PERMISSIONS"]))
  9. $arParams["GROUP_PERMISSIONS"] = array(1);
  10. $arParams["USE_ZIP"] = $arParams["USE_ZIP"]!="N";
  11. if($arParams["INTERVAL"] <= 0)
  12. @set_time_limit(0);
  13. $start_time = time();
  14. $bUSER_HAVE_ACCESS = false;
  15. if(isset($GLOBALS["USER"]) && is_object($GLOBALS["USER"]))
  16. {
  17. $bUSER_HAVE_ACCESS = $GLOBALS["USER"]->IsAdmin();
  18. if(!$bUSER_HAVE_ACCESS)
  19. {
  20. $arUserGroupArray = $GLOBALS["USER"]->GetUserGroupArray();
  21. foreach($arParams["GROUP_PERMISSIONS"] as $PERM)
  22. {
  23. if(in_array($PERM, $arUserGroupArray))
  24. {
  25. $bUSER_HAVE_ACCESS = true;
  26. break;
  27. }
  28. }
  29. }
  30. }
  31. $bDesignMode = $GLOBALS["APPLICATION"]->GetShowIncludeAreas()
  32. && !isset($_GET["mode"])
  33. && is_object($GLOBALS["USER"])
  34. && $GLOBALS["USER"]->IsAdmin()
  35. ;
  36. if(!$bDesignMode)
  37. {
  38. if(!isset($_GET["mode"]))
  39. return;
  40. if(isset($_SERVER["HTTP_REFERER"]))
  41. return;
  42. $APPLICATION->RestartBuffer();
  43. header("Pragma: no-cache");
  44. }
  45. $DIR_NAME = "";
  46. ob_start();
  47. if($_GET["mode"] == "checkauth" && $USER->IsAuthorized())
  48. {
  49. if(
  50. (COption::GetOptionString("main", "use_session_id_ttl", "N") == "Y")
  51. && (COption::GetOptionInt("main", "session_id_ttl", 0) > 0)
  52. && !defined("BX_SESSION_ID_CHANGE")
  53. )
  54. {
  55. echo "failure\n",GetMessage("CC_BCE1_ERROR_SESSION_ID_CHANGE");
  56. }
  57. else
  58. {
  59. echo "success\n";
  60. echo session_name()."\n";
  61. echo session_id() ."\n";
  62. }
  63. }
  64. elseif(!$USER->IsAuthorized())
  65. {
  66. echo "failure\n",GetMessage("CC_BCE1_ERROR_AUTHORIZE");
  67. }
  68. elseif(!$bUSER_HAVE_ACCESS)
  69. {
  70. echo "failure\n",GetMessage("CC_BCE1_PERMISSION_DENIED");
  71. }
  72. elseif(!CModule::IncludeModule('iblock'))
  73. {
  74. echo "failure\n",GetMessage("CC_BCE1_ERROR_IBLOCK_MODULE");
  75. }
  76. elseif(!CModule::IncludeModule('catalog'))
  77. {
  78. echo "failure\n",GetMessage("CC_BCE1_ERROR_CATALOG_MODULE");
  79. }
  80. else
  81. {
  82. if($_GET["mode"]=="init")
  83. {
  84. $_SESSION["BX_CML2_EXPORT"] = array(
  85. "zip" => $arParams["USE_ZIP"] && function_exists("zip_open"),
  86. "step" => 1,
  87. "next_step" => array(),
  88. "SECTION_MAP" => array(),
  89. "PROPERTY_MAP" => false,
  90. "PRICES_MAP" => false,
  91. );
  92. echo "zip=".($_SESSION["BX_CML2_EXPORT"]["zip"]? "yes": "no")."\n";
  93. }
  94. elseif($_GET["mode"] == "query")
  95. {
  96. $start_time = time();
  97. if($fp = fopen("php://output", "ab"))
  98. {
  99. $obExport = new CIBlockCMLExport;
  100. if($_SESSION["BX_CML2_EXPORT"]["step"] === 1)
  101. {
  102. if($obExport->Init(
  103. $fp,
  104. $arParams["IBLOCK_ID"],
  105. $_SESSION["BX_CML2_EXPORT"]["next_step"],
  106. false,
  107. $work_dir = false,
  108. $file_dir = false,
  109. $bCheckPermissions = false
  110. ))
  111. {
  112. $_SESSION["BX_CML2_EXPORT"]["total"] = CIBlockElement::GetList(array(), array("IBLOCK_ID"=> $arParams["IBLOCK_ID"], "ACTIVE" => "Y"), array());
  113. $_SESSION["BX_CML2_EXPORT"]["current"] = 0;
  114. echo GetMessage("CC_BCE1_PROGRESS_PRODUCT", array("#TOTAL#" => $_SESSION["BX_CML2_EXPORT"]["total"], "#COUNT#" => 0));
  115. $obExport->NotCatalog();
  116. $obExport->ExportFileAsURL();
  117. $obExport->StartExport();
  118. $obExport->StartExportMetadata();
  119. $obExport->ExportProperties($_SESSION["BX_CML2_EXPORT"]["PROPERTY_MAP"]);
  120. $obExport->ExportSections(
  121. $_SESSION["BX_CML2_EXPORT"]["SECTION_MAP"],
  122. 0,
  123. 0
  124. );
  125. $obExport->EndExportMetadata();
  126. $obExport->EndExport();
  127. $_SESSION["BX_CML2_EXPORT"]["next_step"] = $obExport->next_step;
  128. $_SESSION["BX_CML2_EXPORT"]["step"] = 2;
  129. }
  130. else
  131. {
  132. echo "failure\n",GetMessage("CC_BCE1_ERROR_INIT");
  133. }
  134. }
  135. elseif($_SESSION["BX_CML2_EXPORT"]["step"] === 2)
  136. {
  137. if($obExport->Init(
  138. $fp,
  139. $arParams["IBLOCK_ID"],
  140. $_SESSION["BX_CML2_EXPORT"]["next_step"],
  141. false,
  142. $work_dir = false,
  143. $file_dir = false,
  144. $bCheckPermissions = false
  145. ))
  146. {
  147. $obExport->NotCatalog();
  148. $obExport->ExportFileAsURL();
  149. ob_start();
  150. $obExport->StartExport();
  151. $obExport->StartExportCatalog();
  152. $result = $obExport->ExportElements(
  153. $_SESSION["BX_CML2_EXPORT"]["PROPERTY_MAP"],
  154. $_SESSION["BX_CML2_EXPORT"]["SECTION_MAP"],
  155. $start_time,
  156. $arParams["INTERVAL"],
  157. $arParams["ELEMENTS_PER_STEP"]
  158. );
  159. if($result)
  160. {
  161. $_SESSION["BX_CML2_EXPORT"]["current"] += $result;
  162. $obExport->EndExportCatalog();
  163. $obExport->EndExport();
  164. $c = ob_get_contents();
  165. ob_end_clean();
  166. echo GetMessage("CC_BCE1_PROGRESS_PRODUCT", array(
  167. "#TOTAL#" => $_SESSION["BX_CML2_EXPORT"]["total"],
  168. "#COUNT#" => $_SESSION["BX_CML2_EXPORT"]["current"],
  169. ));
  170. echo $c;
  171. $_SESSION["BX_CML2_EXPORT"]["next_step"] = $obExport->next_step;
  172. }
  173. else
  174. {
  175. ob_end_clean();
  176. $_SESSION["BX_CML2_EXPORT"] = array(
  177. "zip" => $arParams["USE_ZIP"] && function_exists("zip_open"),
  178. "step" => 3,
  179. "next_step" => array(),
  180. "SECTION_MAP" => array(),
  181. "PROPERTY_MAP" => false,
  182. "PRICES_MAP" => false,
  183. );
  184. }
  185. }
  186. }
  187. $arCatalog = false;
  188. if($_SESSION["BX_CML2_EXPORT"]["step"] === 3)
  189. $arCatalog = CCatalog::GetSkuInfoByProductID($arParams["IBLOCK_ID"]);
  190. $obExport = new CIBlockCMLExport;
  191. if(
  192. $_SESSION["BX_CML2_EXPORT"]["step"] === 3
  193. && $obExport->Init(
  194. $fp,
  195. is_array($arCatalog)? $arCatalog["IBLOCK_ID"]: $arParams["IBLOCK_ID"],
  196. $_SESSION["BX_CML2_EXPORT"]["next_step"],
  197. false,
  198. $work_dir = false,
  199. $file_dir = false,
  200. $bCheckPermissions = false,
  201. is_array($arCatalog)? $arCatalog["PRODUCT_IBLOCK_ID"]: false
  202. )
  203. )
  204. {
  205. if(!array_key_exists("total", $_SESSION["BX_CML2_EXPORT"]))
  206. {
  207. $_SESSION["BX_CML2_EXPORT"]["total"] = CIBlockElement::GetList(array(), array("IBLOCK_ID"=> is_array($arCatalog)? $arCatalog["IBLOCK_ID"]: $arParams["IBLOCK_ID"], "ACTIVE" => "Y"), array());
  208. $_SESSION["BX_CML2_EXPORT"]["current"] = 0;
  209. }
  210. ob_start();
  211. $obExport->StartExport();
  212. ob_start();
  213. $obExport->StartExportMetadata();
  214. $obExport->ExportProperties($_SESSION["BX_CML2_EXPORT"]["PROPERTY_MAP"]);
  215. $obExport->ExportSections(
  216. $_SESSION["BX_CML2_EXPORT"]["SECTION_MAP"],
  217. 0,
  218. 0
  219. );
  220. $obExport->EndExportMetadata();
  221. ob_end_clean();
  222. $obExport->StartExportCatalog();
  223. $result = $obExport->ExportElements(
  224. $_SESSION["BX_CML2_EXPORT"]["PROPERTY_MAP"],
  225. $_SESSION["BX_CML2_EXPORT"]["SECTION_MAP"],
  226. $start_time,
  227. $arParams["INTERVAL"],
  228. $arParams["ELEMENTS_PER_STEP"]
  229. );
  230. if($result)
  231. {
  232. $_SESSION["BX_CML2_EXPORT"]["current"] += $result;
  233. $obExport->EndExportCatalog();
  234. $obExport->EndExport();
  235. $c = ob_get_contents();
  236. ob_end_clean();
  237. echo GetMessage("CC_BCE1_PROGRESS_OFFERS", array(
  238. "#TOTAL#" => $_SESSION["BX_CML2_EXPORT"]["total"],
  239. "#COUNT#" => $_SESSION["BX_CML2_EXPORT"]["current"],
  240. ));
  241. echo $c;
  242. $_SESSION["BX_CML2_EXPORT"]["next_step"] = $obExport->next_step;
  243. }
  244. else
  245. {
  246. ob_end_clean();
  247. $_SESSION["BX_CML2_EXPORT"] = array(
  248. "zip" => $arParams["USE_ZIP"] && function_exists("zip_open"),
  249. "step" => 4,
  250. "next_step" => array(),
  251. "SECTION_MAP" => array(),
  252. "PROPERTY_MAP" => false,
  253. "PRICES_MAP" => false,
  254. );
  255. }
  256. }
  257. if(
  258. $_SESSION["BX_CML2_EXPORT"]["step"] === 4
  259. )
  260. {
  261. echo "finished=yes\n";
  262. }
  263. }
  264. }
  265. else
  266. {
  267. echo "failure\n",GetMessage("CC_BCE1_ERROR_UNKNOWN_COMMAND");
  268. }
  269. }
  270. $contents = ob_get_contents();
  271. ob_end_clean();
  272. if(!$bDesignMode)
  273. {
  274. header("Content-Type: text/html; charset=".LANG_CHARSET);
  275. echo $contents;
  276. die();
  277. }
  278. else
  279. {
  280. $this->IncludeComponentLang(".parameters.php");
  281. if(
  282. (COption::GetOptionString("main", "use_session_id_ttl", "N") == "Y")
  283. && (COption::GetOptionInt("main", "session_id_ttl", 0) > 0)
  284. && !defined("BX_SESSION_ID_CHANGE")
  285. )
  286. ShowError(GetMessage("CC_BCE1_ERROR_SESSION_ID_CHANGE"));
  287. ?><table class="data-table">
  288. <tr><td><?echo GetMessage("CC_BCE1_IBLOCK_ID")?></td><td><?echo $arParams["IBLOCK_ID"]?></td></tr>
  289. <tr><td><?echo GetMessage("CC_BCE1_INTERVAL")?></td><td><?echo $arParams["INTERVAL"]?></td></tr>
  290. <tr><td><?echo GetMessage("CC_BCE1_ELEMENTS_PER_STEP")?></td><td><?echo $arParams["ELEMENTS_PER_STEP"]?></td></tr>
  291. <tr><td><?echo GetMessage("CC_BCE1_USE_ZIP")?></td><td><?echo $arParams["USE_ZIP"]? GetMessage("MAIN_YES"): GetMessage("MAIN_NO")?></td></tr>
  292. </table>
  293. <?
  294. }
  295. ?>