1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
get_start_menu.php
См. документацию.
1<?php
2
4
5define("NO_KEEP_STATISTIC", true);
6define("NOT_CHECK_PERMISSIONS", true);
7require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
8require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php");
9
10header('Content-Type: application/x-javascript; charset='.LANG_CHARSET);
11
13 die();
14
21
22IncludeModuleLangFile(__FILE__);
23
24$aUserOpt = CUserOptions::GetOption("global", "settings", array());
25$bSkipRecent = isset($_REQUEST['skip_recent']);
26
27function __GetSubmenu($menu)
28{
29 global $aUserOpt, $bSkipRecent;
30
31 $aPopup = array();
32 if (is_array($menu))
33 {
34 foreach($menu as $item)
35 {
36 if(!is_array($item))
37 continue;
38
39 $aItem = array(
40 "TEXT"=>$item["text"],
41 "TITLE"=>(($aUserOpt['start_menu_title'] ?? null) <> 'N'? ($item["title"] ?? '') : ''),
42 "ICON"=>$item["icon"] ?? '',
43 );
44 if (isset($item["url"]) && $item["url"] <> "")
45 {
46 $link = htmlspecialcharsback($item["url"]);
47 if(!str_starts_with($link, "/bitrix/admin/"))
48 $link = "/bitrix/admin/".$link;
49
50 if (!empty($_REQUEST['back_url_pub']))
51 $link .= (str_contains($link, '?') ? '&' : '?')."back_url_pub=".urlencode($_REQUEST["back_url_pub"]);
52
53 $aItem['LINK'] = $link;
54
55 if (!$bSkipRecent)
56 $aItem['ONCLICK'] = 'BX.admin.startMenuRecent(' . Json::encode($aItem) . ')';
57 }
58
59 if (isset($item["items"]) && is_array($item["items"]) && !empty($item["items"]))
60 {
61 $aItem["MENU"] = __GetSubmenu($item["items"]);
62 if (!empty($item["url"]) && ($aUserOpt['start_menu_title'] ?? null) <> 'N')
63 $aItem["TITLE"] .= ' '.GetMessage("get_start_menu_dbl");
64 }
65 elseif (isset($item["dynamic"]) && $item["dynamic"] == true)
66 {
67 $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':'').(!empty($_REQUEST["back_url_pub"]) ? '&back_url_pub='.urlencode($_REQUEST["back_url_pub"]):'').'&'.bitrix_sessid_get();
68 $aItem['MENU_PRELOAD'] = false;
69
70 if(!empty($item["url"]) && ($aUserOpt['start_menu_title'] ?? null) <> 'N')
71 $aItem["TITLE"] .= ' '.GetMessage("get_start_menu_dbl");
72 }
73
74 $aPopup[] = $aItem;
75 }
76 }
77
78 return $aPopup;
79}
80
81function __FindSubmenu($menu, $items_id)
82{
83 foreach($menu as $item)
84 {
85 if(isset($item["items"]) && is_array($item["items"]) && !empty($item["items"]))
86 {
87 if($item["items_id"] == $items_id)
88 return $item["items"];
89 elseif(($m = __FindSubmenu($item["items"], $items_id)) !== false)
90 return $m;
91 }
92 }
93 return false;
94}
95
96if(isset($_REQUEST["mode"]) && $_REQUEST["mode"] == "save_recent")
97{
98 if(!empty($_REQUEST["url"]))
99 {
100 $nLinks = 5;
101 if(!empty($aUserOpt["start_menu_links"]))
102 $nLinks = intval($aUserOpt["start_menu_links"]);
103
104 $aRecent = CUserOptions::GetOption("start_menu", "recent", array());
105
106 $aLink = array("url"=>$_REQUEST["url"], "text"=>$_REQUEST["text"], "title"=>$_REQUEST["title"], "icon"=>$_REQUEST["icon"]);
107
108 if(($pos = array_search($aLink, $aRecent)) !== false)
109 unset($aRecent[$pos]);
110 array_unshift($aRecent, $aLink);
111 $aRecent = array_slice($aRecent, 0, $nLinks);
112
113 CUserOptions::SetOption("start_menu", "recent", $aRecent);
114 }
115 echo "OK";
116}
117elseif(isset($_REQUEST["mode"]) && $_REQUEST["mode"] == "dynamic")
118{
119 //admin menu - dynamic sections
120 $adminMenu->AddOpenedSections($_REQUEST["admin_mnu_menu_id"] ?? '');
121 $adminMenu->Init(array($_REQUEST["admin_mnu_module_id"] ?? ''));
122
123 $aSubmenu = __FindSubmenu($adminMenu->aGlobalMenu, $_REQUEST["admin_mnu_menu_id"] ?? '');
124
125 if(!is_array($aSubmenu) || empty($aSubmenu))
126 $aSubmenu = array(array("text"=>GetMessage("get_start_menu_no_data")));
127
128 //generate JavaScript array for popup menu
130}
131elseif(isset($_REQUEST["mode"]) && $_REQUEST["mode"] == "chain")
132{
133 $adminMenu->AddOpenedSections($_REQUEST["admin_mnu_menu_id"] ?? '');
134 $adminPage->Init();
135 $adminMenu->Init($adminPage->aModules);
136
137 $aSubmenu = __FindSubmenu($adminMenu->aGlobalMenu, $_REQUEST["admin_mnu_menu_id"] ?? '');
138
139 if(!is_array($aSubmenu) || empty($aSubmenu))
140 $aSubmenu = array(array("text"=>GetMessage("get_start_menu_no_data")));
141
142 $bSkipRecent = true;
143
144 //generate JavaScript array for popup menu
146}
147else
148{
149 //admin menu - all static sections
150 $adminPage->Init();
151 $adminMenu->Init($adminPage->aModules);
152
154 foreach($adminMenu->aGlobalMenu as $menu)
155 {
156 $aPopup[] = array(
157 "TEXT"=>$menu["text"],
158 "TITLE"=>(($aUserOpt['start_menu_title'] ?? null) <> 'N'? ($menu["title"] ?? '').' '.GetMessage("get_start_menu_dbl") : ''),
159 "GLOBAL_ICON"=>'adm-menu-'.$menu["menu_id"],
160 "LINK"=> isset($menu['url']) && $menu['url'] ? '/bitrix/admin/'.$menu['url'] : '',
161 "MENU"=>__GetSubmenu($menu["items"])
162 );
163 }
164
165 //favorites
166 if($USER->CanDoOperation('edit_own_profile') || $USER->CanDoOperation('edit_other_settings') || $USER->CanDoOperation('view_other_settings'))
167 {
168 $aFav = array(
169 array(
170 "TEXT"=>GetMessage("get_start_menu_add_fav"),
171 "TITLE"=>(($aUserOpt['start_menu_title'] ?? null) <> 'N'? GetMessage("get_start_menu_add_fav_title"):''),
172 "ACTION"=>"BX.admin.startMenuFavAdd(".(!empty($_REQUEST["back_url_pub"]) ? "'".CUtil::JSEscape($_REQUEST["back_url_pub"])."'":"").");"
173 ),
174 array(
175 "TEXT"=>GetMessage("get_start_menu_org_fav"),
176 "TITLE"=>(($aUserOpt['start_menu_title'] ?? null) <> 'N'? GetMessage("get_start_menu_org_fav_title"):''),
177 "LINK"=> BX_ROOT."/admin/favorite_list.php?lang=".LANGUAGE_ID."&back_url_pub=".urlencode($_REQUEST["back_url_pub"] ?? '')
178 ),
179 );
180
181 $aFav[1]["ONCLICK"] = 'BX.admin.startMenuRecent(' . Json::encode($aFav[1]) . ')';
182
183 $db_fav = CFavorites::GetList(array("COMMON"=>"ASC", "SORT"=>"ASC", "NAME"=>"ASC"), array("MENU_FOR_USER"=>$USER->GetID(), "LANGUAGE_ID"=>LANGUAGE_ID));
184 $prevCommon = "";
185 while($db_fav_arr = $db_fav->Fetch())
186 {
187 if($db_fav_arr["COMMON"] == "Y" && $db_fav_arr["MODULE_ID"] <> "" && $APPLICATION->GetGroupRight($db_fav_arr["MODULE_ID"]) < "R")
188 continue;
189
190 if($db_fav_arr["COMMON"] <> $prevCommon)
191 {
192 $aFav[] = array("SEPARATOR"=>true);
193 $prevCommon = $db_fav_arr["COMMON"];
194 }
195
196 $sTitle = '';
197 if(!isset($aUserOpt['start_menu_title']) || $aUserOpt['start_menu_title'] <> 'N')
198 {
199 $sTitle = $db_fav_arr["COMMENTS"];
200 $sTitle = (mb_strlen($sTitle) > 100? mb_substr($sTitle, 0, 100)."..." : $sTitle);
201 $sTitle = str_replace("\r\n", "\n", $sTitle);
202 $sTitle = str_replace("\r", "\n", $sTitle);
203 $sTitle = str_replace("\n", " ", $sTitle);
204 }
205
206 $aItem = array(
207 "TEXT"=>htmlspecialcharsbx($db_fav_arr["NAME"]),
208 "TITLE"=>htmlspecialcharsbx($sTitle),
209 );
210
211 if ($db_fav_arr["URL"])
212 {
213 $aItem["LINK"] = $db_fav_arr["URL"];
214
215 if (!preg_match('/^(http:|https:|\/)/i', $aItem["LINK"]))
216 {
217 $aItem["LINK"] = '/bitrix/admin/'.$aItem["LINK"];
218 }
219
220 $aItem["ONCLICK"] = 'BX.admin.startMenuRecent(' . Json::encode($aItem) . ')';
221 }
222
223 if ($db_fav_arr['MENU_ID'])
224 {
225 $aSubmenu = __FindSubmenu($adminMenu->aGlobalMenu, $db_fav_arr['MENU_ID']);
226
227 if(!is_array($aSubmenu) || empty($aSubmenu))
228 {
229 $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();
230 $aItem['MENU_PRELOAD'] = false;
231 }
232
233 $aItem["MENU"] = __GetSubmenu($aSubmenu);
234 }
235
236 $aFav[] = $aItem;
237 }
238
239 $aPopup[] = array("SEPARATOR"=>true);
240 $aPopup[] = array(
241 "TEXT"=>GetMessage("get_start_menu_fav"),
242 "TITLE"=>(($aUserOpt['start_menu_title'] ?? null) <> 'N'? GetMessage("get_start_menu_fav_title"):''),
243 "GLOBAL_ICON" => 'adm-menu-favorites',
244 "MENU"=>$aFav,
245 );
246 }
247
248 //recent urls
249 if (!$bSkipRecent)
250 {
251 $aRecent = CUserOptions::GetOption("start_menu", "recent", array());
252 if(!empty($aRecent))
253 {
254 $aPopup[] = array("SEPARATOR"=>true);
255
256 $nLinks = 5;
257 if(!empty($aUserOpt["start_menu_links"]))
258 $nLinks = intval($aUserOpt["start_menu_links"]);
259
260 $i = 0;
261 foreach($aRecent as $recent)
262 {
263 $i++;
264 if($i > $nLinks)
265 break;
266
267 $aItem = array(
268 "TEXT"=>htmlspecialcharsbx($recent["text"]),
269 "TITLE"=>(($aUserOpt['start_menu_title'] ?? null) <> 'N'? htmlspecialcharsbx($recent["title"]):''),
270 "GLOBAL_ICON"=>htmlspecialcharsbx($recent["icon"]),
271 "LINK"=>$recent["url"],
272 );
273
274 $aItem["ONCLICK"] = 'BX.admin.startMenuRecent(' . Json::encode($aItem) . ')';
275
276 $aPopup[] = $aItem;
277 }
278 }
279 }
280
281 if(empty($aPopup))
282 $aPopup[] = array("TEXT"=>GetMessage("get_start_menu_no_data"));
283
284 //generate JavaScript array for popup menu
286
287}
288
289require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php");
const BX_ROOT
Определения bx_root.php:3
global $APPLICATION
Определения include.php:80
Определения json.php:9
static PhpToJavaScript($items)
Определения admin_lib.php:1448
static GetList($aSort=[], $arFilter=[])
Определения favorites.php:249
static GetOption($category, $name, $default_value=false, $user_id=false)
Определения user_options.php:97
static SetOption($category, $name, $value, $bCommon=false, $user_id=false)
Определения user_options.php:163
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
__GetSubmenu($menu)
Определения get_start_menu.php:27
$bSkipRecent
Определения get_start_menu.php:25
$aPopup
Определения get_start_menu.php:153
__FindSubmenu($menu, $items_id)
Определения get_start_menu.php:81
global $adminMenu
Определения init_admin.php:7
global $adminPage
Определения init_admin.php:7
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $USER
Определения csv_new_run.php:40
const LANG_CHARSET
Определения include.php:65
check_bitrix_sessid($varname='sessid')
Определения tools.php:4686
htmlspecialcharsback($str)
Определения tools.php:2693
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
bitrix_sessid_get($varname='sessid')
Определения tools.php:4695
$aUserOpt
Определения prolog_auth_admin.php:23
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
die
Определения quickway.php:367
$i
Определения factura.php:643