PageRenderTime 45ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/bitrix/modules/main/public/get_start_menu.php

https://gitlab.com/Rad1calDreamer/honey
PHP | 279 lines | 222 code | 50 blank | 7 comment | 48 complexity | 037f4805174a459983a534cc72025bd9 MD5 | raw file
  1. <?
  2. define("NO_KEEP_STATISTIC", true);
  3. define("NOT_CHECK_PERMISSIONS", true);
  4. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
  5. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php");
  6. if(!check_bitrix_sessid())
  7. die();
  8. IncludeModuleLangFile(__FILE__);
  9. $aUserOpt = CUserOptions::GetOption("global", "settings", array());
  10. $bSkipRecent = isset($_REQUEST['skip_recent']);
  11. function __GetSubmenu($menu)
  12. {
  13. global $aUserOpt, $bSkipRecent;
  14. $aPopup = array();
  15. if (is_array($menu))
  16. {
  17. foreach($menu as $item)
  18. {
  19. if(!is_array($item))
  20. continue;
  21. $aItem = array(
  22. "TEXT"=>$item["text"],
  23. "TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? $item["title"] : ''),
  24. "ICON"=>$item["icon"],
  25. );
  26. if($item["url"] <> "")
  27. {
  28. $link = htmlspecialcharsback($item["url"]);
  29. if(strpos($link, "/bitrix/admin/") !== 0)
  30. $link = "/bitrix/admin/".$link;
  31. if ($_REQUEST['back_url_pub'])
  32. $link .= (strpos($link, '?') > 0 ? '&' : '?')."back_url_pub=".urlencode($_REQUEST["back_url_pub"]);
  33. $aItem['LINK'] = $link;
  34. if (!$bSkipRecent)
  35. $aItem['ONCLICK'] = 'BX.admin.startMenuRecent('.CUtil::PhpToJsObject($aItem).')';
  36. }
  37. if(is_array($item["items"]) && count($item["items"])>0)
  38. {
  39. $aItem["MENU"] = __GetSubmenu($item["items"]);
  40. if($item["url"] <> "" && $aUserOpt['start_menu_title'] <> 'N')
  41. $aItem["TITLE"] .= ' '.GetMessage("get_start_menu_dbl");
  42. }
  43. elseif($item["dynamic"] == true)
  44. {
  45. $aItem["MENU_URL"] = '/bitrix/admin/get_start_menu.php?mode=dynamic&lang='.LANGUAGE_ID.'&admin_mnu_module_id='.urlencode($item['module_id']).'&admin_mnu_menu_id='.urlencode($item['items_id']).($bSkipRecent?'&skip_recent=Y':'').($_REQUEST["back_url_pub"]<>''? '&back_url_pub='.urlencode($_REQUEST["back_url_pub"]):'').'&'.bitrix_sessid_get();
  46. $aItem['MENU_PRELOAD'] = false;
  47. if($item["url"] <> "" && $aUserOpt['start_menu_title'] <> 'N')
  48. $aItem["TITLE"] .= ' '.GetMessage("get_start_menu_dbl");
  49. }
  50. $aPopup[] = $aItem;
  51. }
  52. }
  53. return $aPopup;
  54. }
  55. function __FindSubmenu($menu, $items_id)
  56. {
  57. foreach($menu as $item)
  58. {
  59. if(is_array($item["items"]) && count($item["items"])>0)
  60. {
  61. if($item["items_id"] == $items_id)
  62. return $item["items"];
  63. elseif(($m = __FindSubmenu($item["items"], $items_id)) !== false)
  64. return $m;
  65. }
  66. }
  67. return false;
  68. }
  69. if($_REQUEST["mode"] == "save_recent")
  70. {
  71. if($_REQUEST["url"] <> "")
  72. {
  73. $nLinks = 5;
  74. if($aUserOpt["start_menu_links"] <> "")
  75. $nLinks = intval($aUserOpt["start_menu_links"]);
  76. $aRecent = CUserOptions::GetOption("start_menu", "recent", array());
  77. CUtil::decodeURIComponent($_REQUEST["text"]);
  78. CUtil::decodeURIComponent($_REQUEST["title"]);
  79. $aLink = array("url"=>$_REQUEST["url"], "text"=>$_REQUEST["text"], "title"=>$_REQUEST["title"], "icon"=>$_REQUEST["icon"]);
  80. if(($pos = array_search($aLink, $aRecent)) !== false)
  81. unset($aRecent[$pos]);
  82. array_unshift($aRecent, $aLink);
  83. $aRecent = array_slice($aRecent, 0, $nLinks);
  84. CUserOptions::SetOption("start_menu", "recent", $aRecent);
  85. }
  86. echo "OK";
  87. }
  88. elseif($_REQUEST["mode"] == "dynamic")
  89. {
  90. //admin menu - dynamic sections
  91. $adminMenu->AddOpenedSections($_REQUEST["admin_mnu_menu_id"]);
  92. $adminMenu->Init(array($_REQUEST["admin_mnu_module_id"]));
  93. $aSubmenu = __FindSubmenu($adminMenu->aGlobalMenu, $_REQUEST["admin_mnu_menu_id"]);
  94. if(!is_array($aSubmenu) || empty($aSubmenu))
  95. $aSubmenu = array(array("text"=>GetMessage("get_start_menu_no_data")));
  96. //generate JavaScript array for popup menu
  97. echo CAdminPopup::PhpToJavaScript(__GetSubmenu($aSubmenu));
  98. }
  99. elseif($_REQUEST["mode"] == "chain")
  100. {
  101. $adminMenu->AddOpenedSections($_REQUEST["admin_mnu_menu_id"]);
  102. $adminPage->Init();
  103. $adminMenu->Init($adminPage->aModules);
  104. $aSubmenu = __FindSubmenu($adminMenu->aGlobalMenu, $_REQUEST["admin_mnu_menu_id"]);
  105. if(!is_array($aSubmenu) || empty($aSubmenu))
  106. $aSubmenu = array(array("text"=>GetMessage("get_start_menu_no_data")));
  107. $bSkipRecent = true;
  108. //generate JavaScript array for popup menu
  109. echo CAdminPopup::PhpToJavaScript(__GetSubmenu($aSubmenu));
  110. }
  111. else
  112. {
  113. //admin menu - all static sections
  114. $adminPage->Init();
  115. $adminMenu->Init($adminPage->aModules);
  116. $aPopup = array();
  117. foreach($adminMenu->aGlobalMenu as $menu)
  118. {
  119. $aPopup[] = array(
  120. "TEXT"=>$menu["text"],
  121. "TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? $menu["title"].' '.GetMessage("get_start_menu_dbl"):''),
  122. "GLOBAL_ICON"=>'adm-menu-'.$menu["menu_id"],
  123. "LINK"=>$menu['url'] ? '/bitrix/admin/'.$menu['url'] : '',
  124. "MENU"=>__GetSubmenu($menu["items"])
  125. );
  126. }
  127. //favorites
  128. if($USER->CanDoOperation('edit_own_profile') || $USER->CanDoOperation('edit_other_settings') || $USER->CanDoOperation('view_other_settings'))
  129. {
  130. $aFav = array(
  131. array(
  132. "TEXT"=>GetMessage("get_start_menu_add_fav"),
  133. "TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? GetMessage("get_start_menu_add_fav_title"):''),
  134. "ACTION"=>"BX.admin.startMenuFavAdd(".($_REQUEST["back_url_pub"]<>''? "'".CUtil::JSEscape($_REQUEST["back_url_pub"])."'":"").");"
  135. ),
  136. array(
  137. "TEXT"=>GetMessage("get_start_menu_org_fav"),
  138. "TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? GetMessage("get_start_menu_org_fav_title"):''),
  139. "LINK"=> BX_ROOT."/admin/favorite_list.php?lang=".LANGUAGE_ID."&back_url_pub=".urlencode($_REQUEST["back_url_pub"])
  140. ),
  141. );
  142. $aFav[1]["ONCLICK"] = 'BX.admin.startMenuRecent('.CUtil::PhpToJsObject($aFav[1]).')';
  143. $db_fav = CFavorites::GetList(array("COMMON"=>"ASC", "SORT"=>"ASC", "NAME"=>"ASC"), array("MENU_FOR_USER"=>$USER->GetID(), "LANGUAGE_ID"=>LANGUAGE_ID));
  144. $prevCommon = "";
  145. while($db_fav_arr = $db_fav->Fetch())
  146. {
  147. if($db_fav_arr["COMMON"] == "Y" && $db_fav_arr["MODULE_ID"] <> "" && $APPLICATION->GetGroupRight($db_fav_arr["MODULE_ID"]) < "R")
  148. continue;
  149. if($db_fav_arr["COMMON"] <> $prevCommon)
  150. {
  151. $aFav[] = array("SEPARATOR"=>true);
  152. $prevCommon = $db_fav_arr["COMMON"];
  153. }
  154. $sTitle = '';
  155. if($aUserOpt['start_menu_title'] <> 'N')
  156. {
  157. $sTitle = $db_fav_arr["COMMENTS"];
  158. $sTitle = (strlen($sTitle)>100? substr($sTitle, 0, 100)."..." : $sTitle);
  159. $sTitle = str_replace("\r\n", "\n", $sTitle);
  160. $sTitle = str_replace("\r", "\n", $sTitle);
  161. $sTitle = str_replace("\n", " ", $sTitle);
  162. }
  163. $aItem = array(
  164. "TEXT"=>htmlspecialcharsbx($db_fav_arr["NAME"]),
  165. "TITLE"=>htmlspecialcharsbx($sTitle),
  166. );
  167. if ($db_fav_arr["URL"])
  168. {
  169. $aItem["LINK"] = $db_fav_arr["URL"];
  170. if (!preg_match('/^(http:|https:|\/)/i', $aItem["LINK"]))
  171. {
  172. $aItem["LINK"] = '/bitrix/admin/'.$aItem["LINK"];
  173. }
  174. $aItem["ONCLICK"] = 'BX.admin.startMenuRecent('.CUtil::PhpToJsObject($aItem).')';
  175. }
  176. if ($db_fav_arr['MENU_ID'])
  177. {
  178. $aSubmenu = __FindSubmenu($adminMenu->aGlobalMenu, $db_fav_arr['MENU_ID']);
  179. if(!is_array($aSubmenu) || empty($aSubmenu))
  180. {
  181. $aItem["MENU_URL"] = '/bitrix/admin/get_start_menu.php?mode=dynamic&lang='.LANGUAGE_ID.'&admin_mnu_module_id='.urlencode($db_fav_arr['MODULE_ID']).'&admin_mnu_menu_id='.urlencode($db_fav_arr['MENU_ID']).($_REQUEST["back_url_pub"]<>''? '&back_url_pub='.urlencode($_REQUEST["back_url_pub"]):'').'&'.bitrix_sessid_get();
  182. $aItem['MENU_PRELOAD'] = false;
  183. }
  184. $aItem["MENU"] = __GetSubmenu($aSubmenu);
  185. }
  186. $aFav[] = $aItem;
  187. }
  188. $aPopup[] = array("SEPARATOR"=>true);
  189. $aPopup[] = array(
  190. "TEXT"=>GetMessage("get_start_menu_fav"),
  191. "TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? GetMessage("get_start_menu_fav_title"):''),
  192. "GLOBAL_ICON" => 'adm-menu-favorites',
  193. "MENU"=>$aFav,
  194. );
  195. }
  196. //recent urls
  197. if (!$bSkipRecent)
  198. {
  199. $aRecent = CUserOptions::GetOption("start_menu", "recent", array());
  200. if(!empty($aRecent))
  201. {
  202. $aPopup[] = array("SEPARATOR"=>true);
  203. $nLinks = 5;
  204. if($aUserOpt["start_menu_links"] <> "")
  205. $nLinks = intval($aUserOpt["start_menu_links"]);
  206. $i = 0;
  207. foreach($aRecent as $recent)
  208. {
  209. $i++;
  210. if($i > $nLinks)
  211. break;
  212. $aItem = array(
  213. "TEXT"=>htmlspecialcharsbx($recent["text"]),
  214. "TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? htmlspecialcharsbx($recent["title"]):''),
  215. "GLOBAL_ICON"=>htmlspecialcharsbx($recent["icon"]),
  216. "LINK"=>$recent["url"],
  217. );
  218. $aItem["ONCLICK"] = 'BX.admin.startMenuRecent('.CUtil::PhpToJsObject($aItem).')';
  219. $aPopup[] = $aItem;
  220. }
  221. }
  222. }
  223. if(empty($aPopup))
  224. $aPopup[] = array("TEXT"=>GetMessage("get_start_menu_no_data"));
  225. //generate JavaScript array for popup menu
  226. echo CAdminPopup::PhpToJavaScript($aPopup);
  227. } //$_REQUEST["mode"]
  228. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php");
  229. ?>