26 if (isset($_GET[
"back_url_pub"]) && !is_array($_GET[
"back_url_pub"]) && str_starts_with($_GET[
"back_url_pub"],
"/"))
28 $session[
"BACK_URL_PUB"] = $_GET[
"back_url_pub"];
39 if (defined(
"HELP_FILE") && str_starts_with(
HELP_FILE, $section))
44 if (
$USER->IsAuthorized())
46 $settingsButton = static::getSettingsButton();
47 if (!empty($settingsButton))
49 $arPanelButtons[] = $settingsButton;
53 $arPanelButtons[] = static::getLanguageButton();
55 if (
$USER->IsAuthorized())
67 $context = \Bitrix\Main\Context::getCurrent();
68 $modulesToUpdateCount = RuleRecordTable::getCount([], [
'ttl' => 60]);
71 $showWwallPopup =
false;
72 $wwallPopupLastView =
$context->getRequest()->getCookie(
'WWALL_POPUP_LAST_VIEW');
73 if (
$USER->isAdmin() && $modulesToUpdateCount && empty($wwallPopupLastView))
75 $showWwallPopup =
true;
77 'WWALL_POPUP_LAST_VIEW',
'1', time() + 3600 * 48
82 $vendorNotification = static::getVendorNotification();
85 if ($showWwallPopup || $vendorNotification)
97 BX.ready(
function () {
98 let popup =
new BX.Main.WwallPopup({
101 isPortal: <?= Json::encode($isPortal) ?>,
114 if (!$showWwallPopup && !empty($vendorNotification)):
116 BX.ready(
function () {
118 let popup =
new BX.Main.WwallPopup({
119 colorTheme:
'<?=CUtil::JSescape($vendorNotification['colorTheme
'])?>',
120 title:
'<?=CUtil::JSescape(Loc::getMessage('SEC_WWALL_POPUP_NOTIFICATION_TITLE
'))?>',
121 subtitle:
'<?=CUtil::JSescape($vendorNotification['title'])?>',
122 text:
'<?=CUtil::JSescape($vendorNotification['text
'])?>',
123 closeIcon: <?=!empty($vendorNotification[
'allowClose']) ?
'true' :
'false'?>,
126 text:
'<?=CUtil::JSescape(Loc::getMessage('SEC_WWALL_POPUP_ACTION_ACCEPT
'))?>',
131 BX.ajax.runAction(
'main.security.vendorNotification.sign', {
133 notificationId:
'<?=CUtil::JSescape($vendorNotification['vendorId
'])?>'
138 <?php
if (!empty($vendorNotification[
'allowClose'])): ?>
140 text:
'<?=CUtil::JSescape(Loc::getMessage('SEC_WWALL_POPUP_ACTION_CLOSE
'))?>',
152 popup.popup.subscribeOnce(
'onClose',
function () {
154 BX.message(
'COOKIE_PREFIX') +
'_SECURITY_POPUP_LAST_VIEW_<?=CUtil::JSescape($vendorNotification['vendorId
'])?>',
156 {expires: 3600 * 48, path:
'/'}
165 <div
id=
"bx-panel" class=
"adm-header">
166 <div
class=
"adm-header-left">
167 <div
class=
"adm-header-btn-wrap">
171 $session[
"BACK_URL_PUB"] <>
""
172 ?
htmlspecialcharsbx($session[
"BACK_URL_PUB"]) . (str_contains($session[
"BACK_URL_PUB"],
"?") ?
"&" :
"?")
177 $adminPanelSiteList = [];
179 if (Option::get(
"sale",
"~IS_SALE_CRM_SITE_MASTER_FINISH") ===
"Y" || Option::get(
'sale',
'~IS_SALE_BSM_SITE_MASTER_FINISH') ===
'Y')
181 $adminPanelSiteIdList = [];
182 $isAdminPanelDefaultSiteExists =
false;
185 'select' => [
'LID',
'NAME',
'DEF',
'SITE_NAME',
'SERVER_NAME',
'SORT'],
189 'cache' => [
'ttl' => 86400],
191 while ($adminPanelSiteData = $adminPanelSiteIterator->fetch())
193 $adminPanelSiteIdList[] = $adminPanelSiteData[
'LID'];
195 if (empty($adminPanelSiteData[
'SERVER_NAME']))
200 $adminPanelSiteList[] = [
201 'ID' => $adminPanelSiteData[
'LID'],
202 'NAME' => $adminPanelSiteData[
'SITE_NAME'] ?: $adminPanelSiteData[
'NAME'],
203 'SERVER_NAME' => $adminPanelSiteData[
'SERVER_NAME'],
204 'DEF' => $adminPanelSiteData[
'DEF'],
205 'SORT' => $adminPanelSiteData[
'SORT'],
208 if ($adminPanelSiteData[
'DEF'] ===
'Y')
210 $isAdminPanelDefaultSiteExists =
true;
213 unset($adminPanelSiteData, $adminPanelSiteIterator);
215 if ($adminPanelSiteIdList)
217 $adminPanelSiteDomainIterator = \Bitrix\Main\SiteDomainTable::getList([
221 'NAME' =>
'SITE.NAME',
222 'SITE_NAME' =>
'SITE.SITE_NAME',
224 'SORT' =>
'SITE.SORT',
227 '=LID' => $adminPanelSiteIdList,
229 'cache' => [
'ttl' => 86400],
231 while ($adminPanelSiteDomainData = $adminPanelSiteDomainIterator->fetch())
233 $isAdminDomainExists = (bool)array_filter($adminPanelSiteList,
static function (
$site) use ($adminPanelSiteDomainData) {
234 return $site[
'SERVER_NAME'] === $adminPanelSiteDomainData[
'DOMAIN'];
237 if (!$isAdminDomainExists)
239 $adminPanelSiteList[] = [
240 'ID' => $adminPanelSiteDomainData[
'LID'],
241 'NAME' => $adminPanelSiteDomainData[
'SITE_NAME'] ?: $adminPanelSiteDomainData[
'NAME'],
242 'SERVER_NAME' => $adminPanelSiteDomainData[
'DOMAIN'],
243 'DEF' => $adminPanelSiteDomainData[
'DEF'],
244 'SORT' => $adminPanelSiteDomainData[
'SORT'],
247 if ($adminPanelSiteDomainData[
'DEF'] ===
'Y')
249 $isAdminPanelDefaultSiteExists =
true;
253 unset($adminPanelSiteDomainData, $adminPanelSiteDomainIterator, $isAdminDomainExists);
255 unset($adminPanelSiteIdList);
257 if (!$isAdminPanelDefaultSiteExists)
259 $adminPanelDefaultServerName = Option::get(
"main",
"server_name");
260 $isAdminPanelDefaultSiteExists = (bool)array_filter($adminPanelSiteList,
static function ($adminPanelSite) use ($adminPanelDefaultServerName) {
261 return $adminPanelSite[
'SERVER_NAME'] === $adminPanelDefaultServerName;
263 if (!$isAdminPanelDefaultSiteExists)
268 'NAME' => Option::get(
"main",
"site_name"),
269 'SERVER_NAME' => $adminPanelDefaultServerName,
275 unset($adminPanelDefaultServerName);
277 unset($isAdminPanelDefaultSiteExists);
279 if (
count($adminPanelSiteList) > 1)
283 $adminPanelSiteMenu = [];
284 $adminPanelDefaultButtonTitle =
'';
285 $adminPanelDefaultButtonLink =
'';
286 $adminPanelProtocol =
$context->getRequest()->isHttps() ?
"https://" :
"http://";
287 foreach ($adminPanelSiteList as $adminPanelSite)
289 $adminPanelSiteId = $adminPanelSite[
'ID'] ??
null;
290 $adminPanelMenuItemTitle =
291 $adminPanelSite[
'NAME']
292 .
' (' . $adminPanelSite[
'SERVER_NAME'] .
')'
293 . ($adminPanelSiteId ?
' [' . $adminPanelSiteId .
']' :
'');
294 $adminPanelMenuItemLink = $adminPanelProtocol . $adminPanelSite[
'SERVER_NAME'];
296 $adminPanelSiteMenu[] = [
297 'TEXT' => $adminPanelMenuItemTitle,
298 'LINK' => $adminPanelMenuItemLink,
301 if ($adminPanelSite[
'DEF'] ===
'Y')
303 $adminPanelDefaultButtonTitle = $adminPanelMenuItemTitle;
304 $adminPanelDefaultButtonLink = $adminPanelMenuItemLink;
307 unset($adminPanelSite, $adminPanelSiteId, $adminPanelMenuItemTitle, $adminPanelMenuItemLink);
309 if (!$adminPanelDefaultButtonTitle || !$adminPanelDefaultButtonLink)
311 $adminPanelDefaultButtonTitle = current($adminPanelSiteMenu)[
'TEXT'];
312 $adminPanelDefaultButtonLink = current($adminPanelSiteMenu)[
'LINK'];
318 if (mb_strlen($adminPanelDefaultButtonTitle) > 30)
320 $adminPanelDefaultButtonTitle = mb_substr($adminPanelDefaultButtonTitle, 0, 30) .
'...';
323 <a
id=
"bx-panel-view-site-btn" class=
"adm-header-notif-block"
324 href=
"<?= $adminPanelDefaultButtonLink ?>" title=
"<?= $adminPanelDefaultButtonTitle ?>"
325 hidefocus=
"true" onfocus=
"this.blur();">
327 <span
id=
"bx-panel-view-tab-select"
328 class=
"adm-header-notif-counter"><?= $adminPanelDefaultButtonTitle ?></span>
332 BX.adminPanel.registerButton(
333 "bx-panel-view-site-btn",
335 MENU: <?= Json::encode($adminPanelSiteMenu) ?>,
342 $adminPanelDefaultButtonTitle,
343 $adminPanelDefaultButtonLink,
350 <a hidefocus=
"true" href=
"<?= $sPubUrl ?>" id=
"bx-panel-view-tab"
351 class=
"adm-header-btn adm-header-btn-site"
352 title=
"<?= GetMessage("adm_top_panel_view_title
") ?>"><?=
GetMessage(
"admin_panel_site") ?></a>
359 <a hidefocus=
"true" href=
"<?= $sPubUrl ?>" id=
"bx-panel-view-tab"
360 class=
"adm-header-btn adm-header-btn-site"
361 title=
"<?= GetMessage("adm_top_panel_view_title
") ?>"><?=
GetMessage(
"admin_panel_site") ?></a>
365 if (
count($adminPanelSiteList) > 1)
368 <a hidefocus=
"true" href=
"<?= BX_ROOT . "/admin/index.php?
lang=
" . LANGUAGE_ID ?>"
369 class=
"adm-header-notif-block"><span
370 class=
"adm-header-notif-counter"><?=
GetMessage(
"admin_panel_admin") ?></span></a>
376 <a hidefocus=
"true" href=
"<?= BX_ROOT . "/admin/index.php?
lang=
" . LANGUAGE_ID ?>"
377 class=
"adm-header-btn adm-header-btn-admin"><?=
GetMessage(
"admin_panel_admin") ?></a>
381 unset($adminPanelSiteList);
386 if (\
Bitrix\Main\Loader::includeModule(
'security')): ?>
388 if ($modulesToUpdateCount): ?>
389 <a href=
"/bitrix/admin/security_dashboard.php"><div
390 class=
"adm-header-btn adm-security-btn --warning"><?= Loc::getMessage(
'adm_top_panel_wwall_unsec') ?></div></a>
393 <a href=
"/bitrix/admin/security_dashboard.php"><div
class=
"adm-header-btn adm-security-btn"><?=
395 ? Loc::getMessage(
'adm_top_panel_wwall_sec_cp')
396 : Loc::getMessage(
'adm_top_panel_wwall_sec') ?></div></a>
404 if (
$USER->IsAuthorized() && $informerItemsCount > 0):
406 ?><span
class=
"adm-header-notif-block" id=
"adm-header-notif-block"
407 onclick=
"BX.adminInformer.Toggle(this);"
408 title=
"<?= GetMessage("admin_panel_notif_block_title
") ?>"><span
409 class=
"adm-header-notif-icon"></span><span
class=
"adm-header-notif-counter"
414 static::showTopPanelButtonsSection($arPanelButtons,
$hkInstance);
417 <div
class=
"adm-header-right"><?
421 <div
class=
"adm-header-search-block" id=
"bx-search-box"><input
class=
"adm-header-search"
423 onfocus=
"if (this.value=='<?= GetMessage("top_panel_search_def
") ?>') {this.value=''; BX.addClass(this.parentNode,'adm-header-search-block-active');}"
424 value=
"<?= GetMessage("top_panel_search_def
") ?>"
425 onblur=
"if (this.value==''){this.value='<?= GetMessage("top_panel_search_def
") ?>'; BX.removeClass(this.parentNode,'adm-header-search-block-active');}"
426 type=
"text" autocomplete=
"off"/><a
427 href=
"#" onclick=
"BX('bx-search-input').value=''; BX('bx-search-input').onblur();"
428 class=
"adm-header-search-block-btn"></a></div>
430 let jsControl =
new JCAdminTitleSearch({
431 'AJAX_PAGE':
'/bitrix/admin/get_search.php?lang=<?=LANGUAGE_ID?>',
432 'CONTAINER_ID':
'bx-search-box',
433 'INPUT_ID':
'bx-search-input',
443 <div
class=
"adm-header-right-block"><?
445 if (
$USER->IsAuthorized()):
446 $ssoSwitcher =
$adminPage->getSSOSwitcherButton();
447 $bShowSSO = is_array($ssoSwitcher) && !empty($ssoSwitcher);
452 $userName =
'<span class="adm-header-separate-left">' .
$userName .
'</span><span class="adm-header-separate-right" id="bx-panel-sso"></span>';
455 if (
$USER->CanDoOperation(
'view_own_profile') ||
$USER->CanDoOperation(
'edit_own_profile')):
457 ?><a hidefocus=
"true"
458 href=
"/bitrix/admin/user_edit.php?lang=<?= LANGUAGE_ID ?>&ID=<?= $USER->GetID() ?>"
459 class=
"adm-header-user-block<?= $bShowSSO ? ' adm-header-separate' : '' ?>"
460 onfocus=
"this.blur()"><?=
$userName; ?></a><?
464 ?><span
class=
"adm-header-user-block<?= $bShowSSO ? ' adm-header-separate' : '' ?>"
465 id=
"bx-panel-user"><?=
$userName ?></span><?
472 <script>BX.adminPanel.registerButton(
'bx-panel-sso', {MENU: <?= Json::encode($ssoSwitcher) ?>});</script>
476 ?><a hidefocus=
"true"
477 href=
"<?= htmlspecialcharsbx((defined('BX_ADMIN_SECTION_404') && BX_ADMIN_SECTION_404 == 'Y' ? '/bitrix/admin/' : $APPLICATION->GetCurPage()) . '?' . CUser::getLogoutParams()) ?>"
478 class=
"adm-header-exit" id=
"bx-panel-logout"
479 title=
"<?= GetMessage('admin_panel_logout_title') ?>"><?=
GetMessage(
"admin_panel_logout") ?></a><?
486 static::showTopPanelButtonsSection($arPanelButtons,
$hkInstance, 1);
488 if (
$USER->IsAuthorized()):
491 ?><a hidefocus=
"true" id=
"bx-panel-hotkeys" href=
"javascript:void(0)"
492 onclick=
"BXHotKeys.ShowSettings();" class=
"header-keyboard"
493 title=
"<?= GetMessage('admin_panel_hotkeys_title') ?>"></a><?
497 $aUserOpt = CUserOptions::GetOption(
"admin_panel",
"settings");
499 ?><a hidefocus=
"true" href=
"javascript:void(0)" id=
"bx-panel-pin" class=
"adm-header-pin"
500 onclick=
"BX.adminPanel.Fix(this)"
501 title=
"<?= GetMessage('top_panel_pin_' . (isset($aUserOpt['fix']) && $aUserOpt['fix'] == 'on' ? 'off' : 'on')) ?>"></a><?
503 if (LANGUAGE_ID ==
"ru")
506 $helpUrl = (
new Uri(
'https://helpdesk.bitrix24.ru/widget2/dev/'))->addParams([
508 "user_id" =>
$USER->GetID(),
509 "is_admin" =>
$USER->IsAdmin() ? 1 : 0,
510 "help_url" =>
"https://dev.1c-bitrix.ru/user_help/" . $section . (defined(
"HELP_FILE") && str_contains(
HELP_FILE,
'/') ?
HELP_FILE : $module .
"/" .
$page),
513 $frameOpenUrl = (clone $helpUrl)->addParams([
517 <span
class=
"adm-header-help-btn" id=
"bx_top_panel_button_helper"
518 <?
if (!isset($helperHeroOption[
"show"])): ?>onclick=
"BX.userOptions.save('main', 'helper_hero_admin', 'show', 'Y');"<?
endif ?>>
519 <span
class=
"adm-header-help-btn-icon"></span>
520 <span
class=
"adm-header-help-btn-text"><?=
GetMessage(
"top_panel_help") ?></span>
524 frameOpenUrl:
'<?=$frameOpenUrl?>',
525 helpBtn: BX(
'bx_top_panel_button_helper'),
526 langId:
'<?=LANGUAGE_ID?>',
527 needCheckNotify:
'N',
535 $helpLink =
"https://www.bitrixsoft.com/help/index.html?page=" . urlencode(
"source/" . $module .
"/help/en/" .
$page .
".html");
537 <span onclick=
"document.location.href = '<?= $helpLink ?>';" class=
"adm-header-help-btn"
538 id=
"bx_top_panel_button_helper">
539 <span
class=
"adm-header-help-btn-icon"></span>
540 <span
class=
"adm-header-help-btn-text"><?=
GetMessage(
"top_panel_help") ?></span>
551 <div
class=
"adm-header-bottom"></div><?
553 if (
$USER->IsAdmin())