PageRenderTime 430ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 1ms

/bitrix/modules/catalog/load/yandex_setup.php

https://gitlab.com/Rad1calDreamer/honey
PHP | 463 lines | 416 code | 46 blank | 1 comment | 76 complexity | 309cd09144c14edcf4b28c070660cd3b MD5 | raw file
  1. <?
  2. //<title>Yandex</title>
  3. IncludeModuleLangFile($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/catalog/export_setup_templ.php');
  4. global $APPLICATION, $USER;
  5. $arSetupErrors = array();
  6. $strAllowExportPath = COption::GetOptionString("catalog", "export_default_path", "/bitrix/catalog_export/");
  7. if (($ACTION == 'EXPORT_EDIT' || $ACTION == 'EXPORT_COPY') && $STEP == 1)
  8. {
  9. if (array_key_exists('IBLOCK_ID', $arOldSetupVars))
  10. $IBLOCK_ID = $arOldSetupVars['IBLOCK_ID'];
  11. if (array_key_exists('SETUP_FILE_NAME', $arOldSetupVars))
  12. $SETUP_FILE_NAME = str_replace($strAllowExportPath,'',$arOldSetupVars['SETUP_FILE_NAME']);
  13. if (array_key_exists('SETUP_PROFILE_NAME', $arOldSetupVars))
  14. $SETUP_PROFILE_NAME = $arOldSetupVars['SETUP_PROFILE_NAME'];
  15. if (array_key_exists('V', $arOldSetupVars))
  16. $V = $arOldSetupVars['V'];
  17. if (array_key_exists('XML_DATA', $arOldSetupVars))
  18. {
  19. if (get_magic_quotes_gpc())
  20. {
  21. $XML_DATA = base64_encode(stripslashes($arOldSetupVars['XML_DATA']));
  22. }
  23. else
  24. {
  25. $XML_DATA = base64_encode($arOldSetupVars['XML_DATA']);
  26. }
  27. }
  28. if (array_key_exists('SETUP_SERVER_NAME', $arOldSetupVars))
  29. $SETUP_SERVER_NAME = $arOldSetupVars['SETUP_SERVER_NAME'];
  30. }
  31. if ($STEP>1)
  32. {
  33. $IBLOCK_ID = intval($IBLOCK_ID);
  34. $rsIBlocks = CIBlock::GetByID($IBLOCK_ID);
  35. if ($IBLOCK_ID<=0 || !($arIBlock = $rsIBlocks->Fetch()))
  36. {
  37. $arSetupErrors[] = GetMessage("CET_ERROR_NO_IBLOCK1")." #".$IBLOCK_ID." ".GetMessage("CET_ERROR_NO_IBLOCK2");
  38. }
  39. else
  40. {
  41. $bRightBlock = !CIBlockRights::UserHasRightTo($IBLOCK_ID, $IBLOCK_ID, "iblock_admin_display");
  42. if ($bRightBlock)
  43. {
  44. $arSetupErrors[] = str_replace('#IBLOCK_ID#',$IBLOCK_ID,GetMessage("CET_ERROR_IBLOCK_PERM"));
  45. }
  46. }
  47. if (strlen($SETUP_FILE_NAME)<=0)
  48. {
  49. $arSetupErrors[] = GetMessage("CET_ERROR_NO_FILENAME");
  50. }
  51. elseif (preg_match(BX_CATALOG_FILENAME_REG, $strAllowExportPath.$SETUP_FILE_NAME))
  52. {
  53. $arSetupErrors[] = GetMessage("CES_ERROR_BAD_EXPORT_FILENAME");
  54. }
  55. elseif ($APPLICATION->GetFileAccessPermission($strAllowExportPath.$SETUP_FILE_NAME) < "W")
  56. {
  57. $arSetupErrors[] = str_replace("#FILE#", $strAllowExportPath.$SETUP_FILE_NAME, GetMessage('CET_YAND_RUN_ERR_SETUP_FILE_ACCESS_DENIED'));
  58. }
  59. $SETUP_SERVER_NAME = trim($SETUP_SERVER_NAME);
  60. if (empty($arSetupErrors))
  61. {
  62. $bAllSections = false;
  63. $arSections = array();
  64. if (!empty($V) && is_array($V))
  65. {
  66. foreach ($V as $key => $value)
  67. {
  68. if (trim($value)=="0")
  69. {
  70. $bAllSections = true;
  71. break;
  72. }
  73. $value = intval($value);
  74. if ($value>0)
  75. {
  76. $arSections[] = $value;
  77. }
  78. }
  79. }
  80. if (!$bAllSections && !empty($arSections))
  81. {
  82. $arCheckSections = array();
  83. $rsSections = CIBlockSection::GetList(array(), array('IBLOCK_ID' => $IBLOCK_ID, 'ID' => $arSections), false, array('ID'));
  84. while ($arOneSection = $rsSections->Fetch())
  85. {
  86. $arCheckSections[] = $arOneSection['ID'];
  87. }
  88. $arSections = $arCheckSections;
  89. }
  90. if (!$bAllSections && empty($arSections))
  91. {
  92. $arSetupErrors[] = GetMessage("CET_ERROR_NO_GROUPS");
  93. $V = array();
  94. }
  95. }
  96. if (is_array($V))
  97. {
  98. $V = array_unique(array_values($V));
  99. $_REQUEST['V'] = $V;
  100. }
  101. $arCatalog = CCatalogSKU::GetInfoByIBlock($IBLOCK_ID);
  102. if (CCatalogSKU::TYPE_PRODUCT == $arCatalog['CATALOG_TYPE'] || CCatalogSKU::TYPE_FULL == $arCatalog['CATALOG_TYPE'])
  103. {
  104. if (strlen($XML_DATA) <= 0)
  105. {
  106. $arSetupErrors[] = GetMessage('YANDEX_ERR_SKU_SETTINGS_ABSENT');
  107. }
  108. }
  109. if (($ACTION=="EXPORT_SETUP" || $ACTION=="EXPORT_EDIT" || $ACTION=="EXPORT_COPY") && strlen($SETUP_PROFILE_NAME)<=0)
  110. $arSetupErrors[] = GetMessage("CET_ERROR_NO_PROFILE_NAME");
  111. if (!empty($arSetupErrors))
  112. {
  113. $STEP = 1;
  114. }
  115. }
  116. $aMenu = array(
  117. array(
  118. "TEXT"=>GetMessage("CATI_ADM_RETURN_TO_LIST"),
  119. "TITLE"=>GetMessage("CATI_ADM_RETURN_TO_LIST_TITLE"),
  120. "LINK"=>"/bitrix/admin/cat_export_setup.php?lang=".LANGUAGE_ID,
  121. "ICON"=>"btn_list",
  122. )
  123. );
  124. $context = new CAdminContextMenu($aMenu);
  125. $context->Show();
  126. if (!empty($arSetupErrors))
  127. ShowError(implode('<br />', $arSetupErrors));
  128. ?>
  129. <form method="post" action="<?echo $APPLICATION->GetCurPage() ?>" name="yandex_setup_form" id="yandex_setup_form">
  130. <?
  131. $aTabs = array(
  132. array("DIV" => "yand_edit1", "TAB" => GetMessage("CAT_ADM_MISC_EXP_TAB1"), "ICON" => "store", "TITLE" => GetMessage("CAT_ADM_MISC_EXP_TAB1_TITLE")),
  133. array("DIV" => "yand_edit2", "TAB" => GetMessage("CAT_ADM_MISC_EXP_TAB2"), "ICON" => "store", "TITLE" => GetMessage("CAT_ADM_MISC_EXP_TAB2_TITLE")),
  134. );
  135. $tabControl = new CAdminTabControl("tabYandex", $aTabs, false, true);
  136. $tabControl->Begin();
  137. $tabControl->BeginNextTab();
  138. if ($STEP==1)
  139. {
  140. ?><tr>
  141. <td width="40%"><? echo GetMessage('CET_SELECT_IBLOCK_EXT'); ?></td>
  142. <td width="60%"><?
  143. $arIBlockIDs = array();
  144. $rsCatalogs = CCatalog::GetList(
  145. array(),
  146. array('!PRODUCT_IBLOCK_ID' => 0),
  147. false,
  148. false,
  149. array('PRODUCT_IBLOCK_ID')
  150. );
  151. while ($arCatalog = $rsCatalogs->Fetch())
  152. {
  153. $arCatalog['PRODUCT_IBLOCK_ID'] = intval($arCatalog['PRODUCT_IBLOCK_ID']);
  154. if (0 < $arCatalog['PRODUCT_IBLOCK_ID'])
  155. $arIBlockIDs[$arCatalog['PRODUCT_IBLOCK_ID']] = true;
  156. }
  157. $rsCatalogs = CCatalog::GetList(
  158. array(),
  159. array('PRODUCT_IBLOCK_ID' => 0),
  160. false,
  161. false,
  162. array('IBLOCK_ID')
  163. );
  164. while ($arCatalog = $rsCatalogs->Fetch())
  165. {
  166. $arCatalog['IBLOCK_ID'] = intval($arCatalog['IBLOCK_ID']);
  167. if (0 < $arCatalog['IBLOCK_ID'])
  168. $arIBlockIDs[$arCatalog['IBLOCK_ID']] = true;
  169. }
  170. if (empty($arIBlockIDs))
  171. $arIBlockIDs[-1] = true;
  172. echo GetIBlockDropDownListEx(
  173. $IBLOCK_ID, 'IBLOCK_TYPE_ID', 'IBLOCK_ID',
  174. array(
  175. 'ID' => array_keys($arIBlockIDs), 'ACTIVE' => 'Y',
  176. 'CHECK_PERMISSIONS' => 'Y','MIN_PERMISSION' => 'W'
  177. ),
  178. "ClearSelected(); BX('id_ifr').src='/bitrix/tools/catalog_export/yandex_util.php?IBLOCK_ID=0&'+'".bitrix_sessid_get()."';",
  179. "ClearSelected(); BX('id_ifr').src='/bitrix/tools/catalog_export/yandex_util.php?IBLOCK_ID='+this[this.selectedIndex].value+'&'+'".bitrix_sessid_get()."';",
  180. 'class="adm-detail-iblock-types"',
  181. 'class="adm-detail-iblock-list"'
  182. );
  183. ?>
  184. <script type="text/javascript">
  185. var TreeSelected = new Array();
  186. <?
  187. $intCountSelected = 0;
  188. if (isset($V) && !empty($V) && is_array($V))
  189. {
  190. foreach ($V as $oneKey)
  191. {
  192. ?>TreeSelected[<? echo $intCountSelected ?>] = <? echo intval($oneKey); ?>;
  193. <?
  194. $intCountSelected++;
  195. }
  196. }
  197. ?>
  198. function ClearSelected()
  199. {
  200. BX.showWait();
  201. TreeSelected = new Array();
  202. }
  203. </script>
  204. </td>
  205. </tr>
  206. <tr>
  207. <td width="40%" valign="top"><?echo GetMessage("CET_SELECT_GROUP");?></td>
  208. <td width="60%"><?
  209. if ($intCountSelected)
  210. {
  211. foreach ($V as &$oneKey)
  212. {
  213. ?><input type="hidden" value="<? echo intval($oneKey); ?>" name="V[]" id="oldV<? echo intval($oneKey); ?>"><?
  214. }
  215. }
  216. ?><div id="tree"></div>
  217. <script type="text/javascript">
  218. BX.showWait();
  219. clevel = 0;
  220. function delOldV(obj)
  221. {
  222. if (!!obj)
  223. {
  224. var intSelKey = BX.util.array_search(obj.value, TreeSelected);
  225. if (obj.checked == false)
  226. {
  227. if (-1 < intSelKey)
  228. {
  229. TreeSelected = BX.util.deleteFromArray(TreeSelected, intSelKey);
  230. }
  231. var objOldVal = BX('oldV'+obj.value);
  232. if (!!objOldVal)
  233. {
  234. objOldVal.parentNode.removeChild(objOldVal);
  235. objOldVal = null;
  236. }
  237. }
  238. else
  239. {
  240. if (-1 == intSelKey)
  241. {
  242. TreeSelected[TreeSelected.length] = obj.value;
  243. }
  244. }
  245. }
  246. }
  247. function buildNoMenu()
  248. {
  249. var buffer;
  250. buffer = '<?echo GetMessageJS("CET_FIRST_SELECT_IBLOCK");?>';
  251. BX('tree', true).innerHTML = buffer;
  252. BX.closeWait();
  253. }
  254. function buildMenu()
  255. {
  256. var i;
  257. var buffer;
  258. var imgSpace;
  259. buffer = '<table border="0" cellspacing="0" cellpadding="0">';
  260. buffer += '<tr>';
  261. buffer += '<td colspan="2" valign="top" align="left"><input type="checkbox" name="V[]" value="0" id="v0"'+(BX.util.in_array(0,TreeSelected) ? ' checked' : '')+' onclick="delOldV(this);"><label for="v0"><font class="text"><b><?echo CUtil::JSEscape(GetMessage("CET_ALL_GROUPS"));?></b></font></label></td>';
  262. buffer += '</tr>';
  263. for (i in Tree[0])
  264. {
  265. if (!Tree[i])
  266. {
  267. space = '<input type="checkbox" name="V[]" value="'+i+'" id="V'+i+'"'+(BX.util.in_array(i,TreeSelected) ? ' checked' : '')+' onclick="delOldV(this);"><label for="V'+i+'"><font class="text">' + Tree[0][i][0] + '</font></label>';
  268. imgSpace = '';
  269. }
  270. else
  271. {
  272. space = '<input type="checkbox" name="V[]" value="'+i+'"'+(BX.util.in_array(i,TreeSelected) ? ' checked' : '')+' onclick="delOldV(this);"><a href="javascript: collapse(' + i + ')"><font class="text"><b>' + Tree[0][i][0] + '</b></font></a>';
  273. imgSpace = '<img src="/bitrix/images/catalog/load/plus.gif" width="13" height="13" id="img_' + i + '" OnClick="collapse(' + i + ')">';
  274. }
  275. buffer += '<tr>';
  276. buffer += '<td width="20" valign="top" align="center">' + imgSpace + '</td>';
  277. buffer += '<td id="node_' + i + '">' + space + '</td>';
  278. buffer += '</tr>';
  279. }
  280. buffer += '</table>';
  281. BX('tree', true).innerHTML = buffer;
  282. BX.adminPanel.modifyFormElements('yandex_setup_form');
  283. BX.closeWait();
  284. }
  285. function collapse(node)
  286. {
  287. if (!BX('table_' + node))
  288. {
  289. var i;
  290. var buffer;
  291. var imgSpace;
  292. buffer = '<table border="0" id="table_' + node + '" cellspacing="0" cellpadding="0">';
  293. for (i in Tree[node])
  294. {
  295. if (!Tree[i])
  296. {
  297. space = '<input type="checkbox" name="V[]" value="'+i+'" id="V'+i+'"'+(BX.util.in_array(i,TreeSelected) ? ' checked' : '')+' onclick="delOldV(this);"><label for="V'+i+'"><font class="text">' + Tree[node][i][0] + '</font></label>';
  298. imgSpace = '';
  299. }
  300. else
  301. {
  302. space = '<input type="checkbox" name="V[]" value="'+i+'"'+(BX.util.in_array(i,TreeSelected) ? ' checked' : '')+' onclick="delOldV(this);"><a href="javascript: collapse(' + i + ')"><font class="text"><b>' + Tree[node][i][0] + '</b></font></a>';
  303. imgSpace = '<img src="/bitrix/images/catalog/load/plus.gif" width="13" height="13" id="img_' + i + '" OnClick="collapse(' + i + ')">';
  304. }
  305. buffer += '<tr>';
  306. buffer += '<td width="20" align="center" valign="top">' + imgSpace + '</td>';
  307. buffer += '<td id="node_' + i + '">' + space + '</td>';
  308. buffer += '</tr>';
  309. }
  310. buffer += '</table>';
  311. BX('node_' + node).innerHTML += buffer;
  312. BX('img_' + node).src = '/bitrix/images/catalog/load/minus.gif';
  313. }
  314. else
  315. {
  316. var tbl = BX('table_' + node);
  317. tbl.parentNode.removeChild(tbl);
  318. BX('img_' + node).src = '/bitrix/images/catalog/load/plus.gif';
  319. }
  320. BX.adminPanel.modifyFormElements('yandex_setup_form');
  321. }
  322. </script>
  323. <iframe src="/bitrix/tools/catalog_export/yandex_util.php?IBLOCK_ID=<?=intval($IBLOCK_ID)?>&<? echo bitrix_sessid_get(); ?>" id="id_ifr" name="ifr" style="display:none"></iframe>
  324. </td>
  325. </tr>
  326. <tr>
  327. <td width="40%"><?=GetMessage('CAT_DETAIL_PROPS')?>:</td>
  328. <td width="60%">
  329. <script type="text/javascript">
  330. function showDetailPopup()
  331. {
  332. if (!obDetailWindow)
  333. {
  334. var s = BX('IBLOCK_ID');
  335. var dat = BX('XML_DATA');
  336. var obDetailWindow = new BX.CAdminDialog({
  337. 'content_url': '/bitrix/tools/catalog_export/yandex_detail.php?lang=<?=LANGUAGE_ID?>&bxpublic=Y&IBLOCK_ID=' + s[s.selectedIndex].value,
  338. 'content_post': 'XML_DATA='+BX.util.urlencode(dat.value)+'&'+'<?echo bitrix_sessid_get(); ?>',
  339. 'width': 900, 'height': 550,
  340. 'resizable': true
  341. });
  342. obDetailWindow.Show();
  343. }
  344. }
  345. function setDetailData(data)
  346. {
  347. BX('XML_DATA').value = data;
  348. }
  349. </script>
  350. <input type="button" onclick="showDetailPopup(); return false;" value="<? echo GetMessage('CAT_DETAIL_PROPS_RUN'); ?>">
  351. <input type="hidden" id="XML_DATA" name="XML_DATA" value="<? echo (strlen($XML_DATA) > 0 ? $XML_DATA : ''); ?>" />
  352. </td>
  353. </tr>
  354. <tr>
  355. <td width="40%"><?echo GetMessage("CET_SERVER_NAME");?></td>
  356. <td width="60%">
  357. <input type="text" name="SETUP_SERVER_NAME" value="<?echo (strlen($SETUP_SERVER_NAME)>0) ? htmlspecialcharsbx($SETUP_SERVER_NAME) : '' ?>" size="50" /> <input type="button" onclick="this.form['SETUP_SERVER_NAME'].value = window.location.host;" value="<?echo htmlspecialcharsbx(GetMessage('CET_SERVER_NAME_SET_CURRENT'))?>" />
  358. </td>
  359. </tr>
  360. <tr>
  361. <td width="40%"><?echo GetMessage("CET_SAVE_FILENAME");?></td>
  362. <td width="60%">
  363. <b><? echo htmlspecialcharsbx(COption::GetOptionString("catalog", "export_default_path", "/bitrix/catalog_export/"));?></b><input type="text" name="SETUP_FILE_NAME" value="<?echo (strlen($SETUP_FILE_NAME)>0) ? htmlspecialcharsbx($SETUP_FILE_NAME) : "yandex_".mt_rand(0, 999999).".php" ?>" size="50" />
  364. </td>
  365. </tr>
  366. <?
  367. if ($ACTION=="EXPORT_SETUP" || $ACTION == 'EXPORT_EDIT' || $ACTION == 'EXPORT_COPY')
  368. {
  369. ?><tr>
  370. <td width="40%"><?echo GetMessage("CET_PROFILE_NAME");?></td>
  371. <td width="60%">
  372. <input type="text" name="SETUP_PROFILE_NAME" value="<?echo htmlspecialcharsbx($SETUP_PROFILE_NAME) ?>" size="30">
  373. </td>
  374. </tr><?
  375. }
  376. }
  377. $tabControl->EndTab();
  378. $tabControl->BeginNextTab();
  379. if ($STEP==2)
  380. {
  381. $SETUP_FILE_NAME = $strAllowExportPath.$SETUP_FILE_NAME;
  382. if (strlen($XML_DATA) > 0)
  383. {
  384. $XML_DATA = base64_decode($XML_DATA);
  385. }
  386. $SETUP_SERVER_NAME = htmlspecialcharsbx($SETUP_SERVER_NAME);
  387. $_POST['SETUP_SERVER_NAME'] = htmlspecialcharsbx($_POST['SETUP_SERVER_NAME']);
  388. $_REQUEST['SETUP_SERVER_NAME'] = htmlspecialcharsbx($_REQUEST['SETUP_SERVER_NAME']);
  389. $FINITE = true;
  390. }
  391. $tabControl->EndTab();
  392. $tabControl->Buttons();
  393. ?><? echo bitrix_sessid_post();?><?
  394. if ($ACTION == 'EXPORT_EDIT' || $ACTION == 'EXPORT_COPY')
  395. {
  396. ?><input type="hidden" name="PROFILE_ID" value="<? echo intval($PROFILE_ID); ?>"><?
  397. }
  398. if (2 > $STEP)
  399. {
  400. ?><input type="hidden" name="lang" value="<?echo LANGUAGE_ID ?>">
  401. <input type="hidden" name="ACT_FILE" value="<?echo htmlspecialcharsbx($_REQUEST["ACT_FILE"]) ?>">
  402. <input type="hidden" name="ACTION" value="<?echo htmlspecialcharsbx($ACTION) ?>">
  403. <input type="hidden" name="STEP" value="<?echo intval($STEP) + 1 ?>">
  404. <input type="hidden" name="SETUP_FIELDS_LIST" value="V,IBLOCK_ID,SETUP_SERVER_NAME,SETUP_FILE_NAME,XML_DATA">
  405. <input type="submit" value="<?echo ($ACTION=="EXPORT")?GetMessage("CET_EXPORT"):GetMessage("CET_SAVE")?>"><?
  406. }
  407. $tabControl->End();
  408. ?></form>
  409. <script type="text/javascript">
  410. <?if ($STEP < 2):?>
  411. tabYandex.SelectTab("yand_edit1");
  412. tabYandex.DisableTab("yand_edit2");
  413. <?elseif ($STEP == 2):?>
  414. tabYandex.SelectTab("yand_edit2");
  415. tabYandex.DisableTab("yand_edit1");
  416. <?endif;?>
  417. </script>