PageRenderTime 53ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/bitrix/modules/iblock/admin/iblock_admin.php

https://gitlab.com/Rad1calDreamer/honey
PHP | 484 lines | 436 code | 48 blank | 0 comment | 56 complexity | 65c6adb7f1f185e0212dfb3fcfc8ceed MD5 | raw file
  1. <?
  2. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
  3. CModule::IncludeModule("iblock");
  4. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/prolog.php");
  5. IncludeModuleLangFile(__FILE__);
  6. $arIBTYPE = CIBlockType::GetByIDLang($type, LANGUAGE_ID);
  7. if($arIBTYPE===false)
  8. LocalRedirect("/bitrix/admin/iblock_type_admin.php?lang=".LANGUAGE_ID);
  9. $bBizproc = CModule::IncludeModule("bizproc");
  10. $bWorkflow = CModule::IncludeModule("workflow");
  11. if($_REQUEST["admin"] == "Y")
  12. $sTableID = "tbl_iblock_admin_".md5($type);
  13. else
  14. $sTableID = "tbl_iblock_".md5($type);
  15. $oSort = new CAdminSorting($sTableID, "TIMESTAMP_X", "desc");
  16. $arOrder = (strtoupper($by) === "ID"? array($by => $order): array($by => $order, "ID" => "ASC"));
  17. $lAdmin = new CAdminList($sTableID, $oSort);
  18. $arFilterFields = Array(
  19. "find_id",
  20. "find_name",
  21. "find_lang",
  22. "find_active",
  23. "find_code",
  24. );
  25. $lAdmin->InitFilter($arFilterFields);
  26. $arFilter = array(
  27. "ID" => $find_id,
  28. "ACTIVE" => $find_active,
  29. "LID" => $find_lang,
  30. "?CODE" => $find_code,
  31. "?NAME" => $find_name,
  32. "TYPE" => $type,
  33. "MIN_PERMISSION" => "U",
  34. "CNT_ALL" => "Y",
  35. );
  36. if($lAdmin->EditAction())
  37. {
  38. foreach($FIELDS as $ID => $postFields)
  39. {
  40. $DB->StartTransaction();
  41. $ID = IntVal($ID);
  42. if(!$lAdmin->IsUpdated($ID))
  43. continue;
  44. if(!CIBlockRights::UserHasRightTo($ID, $ID, "iblock_edit"))
  45. continue;
  46. $allowedFields = array(
  47. "NAME",
  48. "SORT",
  49. "ACTIVE",
  50. "LIST_PAGE_URL",
  51. "DETAIL_PAGE_URL",
  52. "CANONICAL_PAGE_URL",
  53. "CODE",
  54. "INDEX_ELEMENT",
  55. "WORKFLOW",
  56. );
  57. $arFields = array();
  58. foreach ($allowedFields as $fieldId)
  59. {
  60. if (array_key_exists($fieldId, $postFields))
  61. $arFields[$fieldId] = $postFields[$fieldId];
  62. }
  63. $ib = new CIBlock;
  64. if(!$ib->Update($ID, $arFields))
  65. {
  66. $lAdmin->AddUpdateError(GetMessage("IBLOCK_ADM_SAVE_ERROR", array("#ID#"=>$ID, "#ERROR_TEXT#"=>$ib->LAST_ERROR)), $ID);
  67. $DB->Rollback();
  68. }
  69. $DB->Commit();
  70. }
  71. }
  72. if($arID = $lAdmin->GroupAction())
  73. {
  74. if($_REQUEST['action_target']=='selected')
  75. {
  76. $rsIBlocks = CIBlock::GetList($arOrder, $arFilter);
  77. while($arRes = $rsIBlocks->Fetch())
  78. $arID[] = $arRes['ID'];
  79. }
  80. foreach($arID as $ID)
  81. {
  82. if(strlen($ID)<=0)
  83. continue;
  84. switch($_REQUEST['action'])
  85. {
  86. case "delete":
  87. if(!CIBlockRights::UserHasRightTo($ID, $ID, "iblock_delete"))
  88. break;
  89. @set_time_limit(0);
  90. $DB->StartTransaction();
  91. $rsIBlock = CIBlock::GetByID($ID);
  92. $arIBlock = $rsIBlock->GetNext();
  93. if(!CIBlock::Delete($ID))
  94. {
  95. $DB->Rollback();
  96. $lAdmin->AddGroupError(GetMessage("IBLOCK_ADM_DELETE_ERROR"), $ID);
  97. }
  98. else
  99. {
  100. if(COption::GetOptionString("iblock", "event_log_iblock", "N") === "Y")
  101. {
  102. $res_log["NAME"] = $arIBlock["NAME"];
  103. CEventLog::Log(
  104. "IBLOCK",
  105. "IBLOCK_DELETE",
  106. "iblock",
  107. $ID,
  108. serialize($res_log)
  109. );
  110. }
  111. }
  112. $DB->Commit();
  113. break;
  114. case "activate":
  115. case "deactivate":
  116. if(!CIBlockRights::UserHasRightTo($ID, $ID, "iblock_delete"))
  117. break;
  118. $ob = new CIBlock();
  119. $arFields = Array("ACTIVE"=>($_REQUEST['action']=="activate"?"Y":"N"));
  120. if(!$ob->Update($ID, $arFields))
  121. $lAdmin->AddGroupError(GetMessage("IBLOCK_ADM_UPD_ERROR").$ob->LAST_ERROR, $ID);
  122. break;
  123. }
  124. }
  125. }
  126. $arHeader = array(
  127. array(
  128. "id"=>"NAME",
  129. "content"=>GetMessage("IBLOCK_ADM_NAME"),
  130. "sort"=>"name",
  131. "default"=>true,
  132. ),
  133. array(
  134. "id"=>"SORT",
  135. "content"=>GetMessage("IBLOCK_ADM_SORT"),
  136. "sort"=>"sort",
  137. "default"=>true,
  138. "align"=>"right",
  139. ),
  140. array(
  141. "id"=>"ACTIVE",
  142. "content"=>GetMessage("IBLOCK_ADM_ACTIVE"),
  143. "sort"=>"active",
  144. "default"=>true,
  145. "align"=>"center",
  146. ),
  147. array(
  148. "id"=>"CODE",
  149. "content"=>GetMessage("IBLOCK_FIELD_CODE"),
  150. "sort"=>"code",
  151. ),
  152. array(
  153. "id"=>"LIST_PAGE_URL",
  154. "content"=>GetMessage("IBLOCK_ADM_HEADER_LIST_URL"),
  155. ),
  156. array(
  157. "id"=>"DETAIL_PAGE_URL",
  158. "content"=>GetMessage("IBLOCK_ADM_HEADER_DETAIL_URL"),
  159. ),
  160. array(
  161. "id"=>"CANONICAL_PAGE_URL",
  162. "content"=>GetMessage("IBLOCK_ADM_HEADER_CANONICAL_PAGE_URL"),
  163. ),
  164. array(
  165. "id"=>"ELEMENT_CNT",
  166. "content"=>GetMessage("IBLOCK_ADM_HEADER_EL"),
  167. "default"=>true,
  168. "align"=>"right",
  169. ),
  170. );
  171. if($arIBTYPE["SECTIONS"]=="Y")
  172. $arHeader[] = array(
  173. "id"=>"SECTION_CNT",
  174. "content"=>GetMessage("IBLOCK_ADM_HEADER_SECT"),
  175. "default"=>true,
  176. "align"=>"right",
  177. );
  178. $arHeader[] = array(
  179. "id"=>"LID",
  180. "content"=>GetMessage("IBLOCK_ADM_LANG"),
  181. "sort"=>"lid",
  182. "default"=>true,
  183. "align"=>"left",
  184. );
  185. $arHeader[] = array(
  186. "id"=>"INDEX_ELEMENT",
  187. "content"=>GetMessage("IBLOCK_ADM_HEADER_TOINDEX"),
  188. );
  189. if($bWorkflow)
  190. $arHeader[] = array(
  191. "id"=>"WORKFLOW",
  192. "content"=>GetMessage("IBLOCK_ADM_HEADER_WORKFLOW"),
  193. );
  194. $arHeader[] = array(
  195. "id"=>"TIMESTAMP_X",
  196. "content"=>GetMessage("IBLOCK_ADM_TIMESTAMP"),
  197. "sort"=>"timestamp_x",
  198. "default"=>true,
  199. );
  200. $arHeader[] = array(
  201. "id"=>"ID",
  202. "content"=>"ID",
  203. "sort"=>"id",
  204. "default"=>true,
  205. "align"=>"right",
  206. );
  207. if($bBizproc && IsModuleInstalled("bizprocdesigner"))
  208. $arHeader[] = array(
  209. "id"=>"WORKFLOW_TEMPLATES",
  210. "content"=>GetMessage("IBLOCK_ADM_HEADER_BIZPROC"),
  211. "default"=>true,
  212. "align"=>"right",
  213. );
  214. $lAdmin->AddHeaders($arHeader);
  215. $rsIBlocks = CIBlock::GetList($arOrder, $arFilter, false);
  216. $rsIBlocks = new CAdminResult($rsIBlocks, $sTableID);
  217. $rsIBlocks->NavStart();
  218. $lAdmin->NavText($rsIBlocks->GetNavPrint($arIBTYPE["NAME"]));
  219. while($dbrs = $rsIBlocks->NavNext(true, "f_"))
  220. {
  221. if(
  222. $_REQUEST["admin"] == "Y"
  223. && CIBlockRights::UserHasRightTo($f_ID, $f_ID, "iblock_edit")
  224. )
  225. {
  226. $row =& $lAdmin->AddRow($f_ID, $dbrs, 'iblock_edit.php?ID='.$f_ID.'&type='.htmlspecialcharsbx($type).'&lang='.LANGUAGE_ID.'&admin='.($_REQUEST["admin"]=="Y"? "Y": "N"), GetMessage("IBLOCK_ADM_TO_EDIT"));
  227. }
  228. else
  229. {
  230. if($arIBTYPE["SECTIONS"]=="Y")
  231. $row =& $lAdmin->AddRow($f_ID, $dbrs, CIBlock::GetAdminSectionListLink($f_ID, array('find_section_section'=>0)), GetMessage("IBLOCK_ADM_TO_EL_LIST"));
  232. else
  233. $row =& $lAdmin->AddRow($f_ID, $dbrs, CIBlock::GetAdminElementListLink($f_ID, array('find_section_section'=>-1)), GetMessage("IBLOCK_ADM_TO_EL_LIST"));
  234. }
  235. if(!strlen($f_SECTIONS_NAME))
  236. $f_SECTIONS_NAME = $arIBTYPE["SECTION_NAME"]? htmlspecialcharsbx($arIBTYPE["SECTION_NAME"]): GetMessage("IBLOCK_ADM_SECTIONS");
  237. if(!$f_ELEMENTS_NAME)
  238. $f_ELEMENTS_NAME = $arIBTYPE["ELEMENT_NAME"]? htmlspecialcharsbx($arIBTYPE["ELEMENT_NAME"]): GetMessage("IBLOCK_ADM_ELEMENTS");
  239. $f_LID = '';
  240. $db_LID = CIBlock::GetSite($f_ID);
  241. while($ar_LID = $db_LID->Fetch())
  242. $f_LID .= ($f_LID!=""?" / ":"").htmlspecialcharsbx($ar_LID["LID"]);
  243. $row->AddViewField("LID", $f_LID);
  244. if(
  245. $_REQUEST["admin"] == "Y"
  246. && CIBlockRights::UserHasRightTo($f_ID, $f_ID, "iblock_edit")
  247. )
  248. {
  249. $row->AddViewField("ID", $f_ID);
  250. $row->AddInputField("NAME", array("size"=>"35"));
  251. $row->AddViewField("NAME", '<a href="iblock_edit.php?ID='.$f_ID.'&type='.htmlspecialcharsbx($type).'&lang='.LANGUAGE_ID.'&admin='.($_REQUEST["admin"]=="Y"? "Y": "N").'" title="'.GetMessage("IBLOCK_ADM_TO_EDIT").'">'.$f_NAME.'</a>');
  252. $row->AddInputField("SORT", array("size"=>"3"));
  253. $row->AddCheckField("ACTIVE");
  254. $row->AddInputField("CODE");
  255. $row->AddInputField("LIST_PAGE_URL");
  256. $row->AddInputField("DETAIL_PAGE_URL");
  257. $row->AddInputField("CANONICAL_PAGE_URL");
  258. $row->AddCheckField("INDEX_ELEMENT");
  259. if($bWorkflow)
  260. $row->AddCheckField("WORKFLOW");
  261. }
  262. else
  263. {
  264. if($arIBTYPE["SECTIONS"]=="Y")
  265. $row->AddViewField("NAME", '<a href="'.htmlspecialcharsbx(CIBlock::GetAdminSectionListLink($f_ID , array('find_section_section'=>0))).'" title="'.GetMessage("IBLOCK_ADM_TO_SECTLIST").'">'.$f_NAME.'</a>');
  266. else
  267. $row->AddViewField("NAME", '<a href="'.htmlspecialcharsbx(CIBlock::GetAdminElementListLink($f_ID , array('find_section_section'=>-1))).'" title="'.GetMessage("IBLOCK_ADM_TO_EL_LIST").'">'.$f_NAME.'</a>');
  268. $row->AddCheckField("ACTIVE", false);
  269. $row->AddCheckField("INDEX_ELEMENT", false);
  270. if($bWorkflow)
  271. $row->AddCheckField("WORKFLOW", false);
  272. }
  273. if(in_array("ELEMENT_CNT", $lAdmin->GetVisibleHeaderColumns()))
  274. {
  275. $f_ELEMENT_CNT = CIBlock::GetElementCount($f_ID);
  276. $row->AddViewField("ELEMENT_CNT", '<a href="'.htmlspecialcharsbx(CIBlock::GetAdminElementListLink($f_ID, array('find_section_section'=>-1))).'" title="'.GetMessage("IBLOCK_ADM_TO_ELLIST").'">'.$f_ELEMENT_CNT.'</a>');
  277. }
  278. if($arIBTYPE["SECTIONS"]=="Y" && in_array("SECTION_CNT", $lAdmin->GetVisibleHeaderColumns()))
  279. $row->AddViewField("SECTION_CNT", '<a href="'.htmlspecialcharsbx(CIBlock::GetAdminSectionListLink($f_ID, array())).'" title="'.GetMessage("IBLOCK_ADM_TO_SECTLIST").'">'.IntVal(CIBlockSection::GetCount(array("IBLOCK_ID"=>$f_ID))).'</a>');
  280. if(
  281. $bBizproc
  282. && $dbrs["BIZPROC"] == "Y"
  283. && in_array("WORKFLOW_TEMPLATES", $lAdmin->GetVisibleHeaderColumns())
  284. && IsModuleInstalled("bizprocdesigner")
  285. )
  286. {
  287. $cnt = CBPDocument::GetNumberOfWorkflowTemplatesForDocumentType(
  288. array("iblock", "CIBlockDocument", "iblock_".$f_ID)
  289. );
  290. $row->AddViewField("WORKFLOW_TEMPLATES", '<a href="/bitrix/admin/iblock_bizproc_workflow_admin.php?document_type=iblock_'.$f_ID.'&lang='.LANGUAGE_ID.'&back_url_list='.urlencode($APPLICATION->GetCurPageParam("", array())).'">'.$cnt.'</a>');
  291. }
  292. $arActions = array();
  293. if(
  294. $_REQUEST["admin"] == "Y"
  295. && CIBlockRights::UserHasRightTo($f_ID, $f_ID, "iblock_edit")
  296. )
  297. {
  298. $arActions[] = array(
  299. "ICON" => "edit",
  300. "TEXT" => GetMessage("MAIN_ADMIN_MENU_EDIT"),
  301. "DEFAULT" => $_REQUEST["admin"]=="Y",
  302. "ACTION" => $lAdmin->ActionRedirect("iblock_edit.php?ID=".$f_ID."&type=".urlencode($type)."&lang=".LANGUAGE_ID."&admin=".($_REQUEST["admin"]=="Y"? "Y": "N")),
  303. );
  304. $arActions[] = array(
  305. "ICON" => "list",
  306. "TEXT" => GetMessage("IBLOCK_ADM_MENU_PROPERTIES"),
  307. "ACTION" => $lAdmin->ActionRedirect("iblock_property_admin.php?IBLOCK_ID=".$f_ID."&lang=".LANGUAGE_ID.($_REQUEST["admin"]=="Y"? "&admin=Y": "&admin=N")),
  308. );
  309. }
  310. if(
  311. $bBizproc
  312. && $dbrs["BIZPROC"] == "Y"
  313. && CIBlockRights::UserHasRightTo($f_ID, $f_ID, "iblock_edit")
  314. && IsModuleInstalled("bizprocdesigner")
  315. )
  316. {
  317. $arActions[] = array(
  318. "ICON"=>"",
  319. "TEXT"=>GetMessage("IBLOCK_ADM_MENU_BIZPROC"),
  320. "ACTION"=>"window.location='/bitrix/admin/iblock_bizproc_workflow_admin.php?document_type=iblock_".$f_ID."&lang=".LANGUAGE_ID."';"
  321. );
  322. }
  323. if(
  324. $_REQUEST["admin"] == "Y"
  325. && CIBlockRights::UserHasRightTo($f_ID, $f_ID, "iblock_delete")
  326. )
  327. {
  328. $arActions[] = array(
  329. "ICON"=>"delete",
  330. "TEXT"=>GetMessage("MAIN_ADMIN_MENU_DELETE"),
  331. "ACTION"=>"if(confirm('".GetMessageJS("IBLOCK_ADM_CONFIRM_DEL_MESSAGE")."')) ".$lAdmin->ActionDoGroup($f_ID, "delete", "&type=".htmlspecialcharsbx($type)."&lang=".LANGUAGE_ID."&admin=".($_REQUEST["admin"]=="Y"? "Y": "N")),
  332. );
  333. }
  334. if(count($arActions))
  335. $row->AddActions($arActions);
  336. }
  337. $lAdmin->AddFooter(
  338. array(
  339. array("title"=>GetMessage("MAIN_ADMIN_LIST_SELECTED"), "value"=>$rsIBlocks->SelectedRowsCount()),
  340. array("counter"=>true, "title"=>GetMessage("MAIN_ADMIN_LIST_CHECKED"), "value"=>"0"),
  341. )
  342. );
  343. if($USER->IsAdmin() && ($_REQUEST["admin"] == "Y"))
  344. {
  345. $aContext = array(
  346. array(
  347. "ICON"=>"btn_new",
  348. "TEXT"=>GetMessage("IBLOCK_ADM_TO_ADDIBLOCK"),
  349. "LINK"=>"iblock_edit.php?lang=".LANGUAGE_ID."&admin=Y&type=".urlencode($type),
  350. "TITLE"=>GetMessage("IBLOCK_ADM_TO_ADDIBLOCK_TITLE")
  351. ),
  352. );
  353. $lAdmin->AddAdminContextMenu($aContext);
  354. $lAdmin->AddGroupActionTable(Array(
  355. "delete"=>GetMessage("MAIN_ADMIN_LIST_DELETE"),
  356. "activate"=>GetMessage("MAIN_ADMIN_LIST_ACTIVATE"),
  357. "deactivate"=>GetMessage("MAIN_ADMIN_LIST_DEACTIVATE"),
  358. ));
  359. }
  360. else
  361. {
  362. $lAdmin->AddAdminContextMenu(array());
  363. }
  364. $lAdmin->CheckListMode();
  365. $APPLICATION->SetTitle(GetMessage("IBLOCK_ADM_TITLE", array("#IBLOCK_TYPE#" => $arIBTYPE["~NAME"])));
  366. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
  367. ?>
  368. <form method="GET" action="iblock_admin.php?type=<?=urlencode($type)?>" name="find_form">
  369. <input type="hidden" name="admin" value="<?echo ($_REQUEST["admin"]=="Y"? "Y": "N")?>">
  370. <input type="hidden" name="lang" value="<?echo LANGUAGE_ID?>">
  371. <input type="hidden" name="filter" value="Y">
  372. <input type="hidden" name="type" value="<?echo htmlspecialcharsbx($type)?>">
  373. <?
  374. $oFilter = new CAdminFilter(
  375. $sTableID."_filter",
  376. array(
  377. GetMessage("IBLOCK_ADM_FILT_SITE"),
  378. GetMessage("IBLOCK_ADM_FILT_ACT"),
  379. "ID",
  380. GetMessage("IBLOCK_FIELD_CODE")
  381. )
  382. );
  383. $oFilter->Begin();
  384. ?>
  385. <tr>
  386. <td><b><?echo GetMessage("IBLOCK_ADM_FILT_NAME")?></b></td>
  387. <td><input type="text" name="find_name" value="<?echo htmlspecialcharsbx($find_name)?>" size="40">&nbsp;<?=ShowFilterLogicHelp()?></td>
  388. </tr>
  389. <tr>
  390. <td><?echo GetMessage("IBLOCK_ADM_FILT_SITE");?>:</td>
  391. <td>
  392. <select name="find_lang">
  393. <option value=""><?echo GetMessage("IBLOCK_ALL")?></option>
  394. <?
  395. $l = CLang::GetList($b="sort", $o="asc", Array("VISIBLE"=>"Y"));
  396. while($ar = $l->GetNext()):
  397. ?><option value="<?echo $ar["LID"]?>"<?if($find_lang==$ar["LID"])echo " selected"?>><?echo $ar["NAME"]?></option><?
  398. endwhile;
  399. ?>
  400. </select>
  401. </td>
  402. </tr>
  403. <tr>
  404. <td><?echo GetMessage("IBLOCK_ADM_FILT_ACT")?>:</td>
  405. <td>
  406. <?
  407. $arr = array("reference"=>array(GetMessage("IBLOCK_YES"), GetMessage("IBLOCK_NO")), "reference_id"=>array("Y","N"));
  408. echo SelectBoxFromArray("find_active", $arr, htmlspecialcharsex($find_active), GetMessage('IBLOCK_ALL'));
  409. ?>
  410. </td>
  411. </tr>
  412. <tr>
  413. <td>ID:</td>
  414. <td><input type="text" name="find_id" value="<?echo htmlspecialcharsbx($find_id)?>" size="15"></td>
  415. </tr>
  416. <tr>
  417. <td><?echo GetMessage("IBLOCK_FIELD_CODE")?>:</td>
  418. <td><input type="text" name="find_code" value="<?echo htmlspecialcharsbx($find_code)?>" size="15">&nbsp;<?=ShowFilterLogicHelp()?></td>
  419. </tr>
  420. <?
  421. $oFilter->Buttons(array("table_id"=>$sTableID, "url"=>$APPLICATION->GetCurPageParam().'?type='.urlencode($type), "form"=>"find_form"));
  422. $oFilter->End();
  423. ?>
  424. </form>
  425. <?
  426. $lAdmin->DisplayList();
  427. if($_REQUEST["admin"]!="Y"):
  428. echo BeginNote(),
  429. GetMessage("IBLOCK_ADM_MANAGE_HINT"),
  430. ' <a href="iblock_admin.php?type='.htmlspecialcharsbx($type).'&amp;lang='.LANGUAGE_ID.'&amp;admin=Y">',
  431. GetMessage("IBLOCK_ADM_MANAGE_HINT_HREF"),
  432. '</a>.',
  433. EndNote();
  434. endif;
  435. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
  436. ?>