Your IP : 18.216.172.133


Current Path : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/main/public/
Upload File :
Current File : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/main/public/get_start_menu.php

<?php
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php");

header('Content-Type: application/x-javascript; charset='.LANG_CHARSET);

if(!check_bitrix_sessid())
	die();

/**
 * @global CUser $USER
 * @global CMain $APPLICATION
 * @global CAdminPage $adminPage
 * @global CAdminMenu $adminMenu
 */

IncludeModuleLangFile(__FILE__);

$aUserOpt = CUserOptions::GetOption("global", "settings", array());
$bSkipRecent = isset($_REQUEST['skip_recent']);

function __GetSubmenu($menu)
{
	global $aUserOpt, $bSkipRecent;

	$aPopup = array();
	if (is_array($menu))
	{
		foreach($menu as $item)
		{
			if(!is_array($item))
				continue;

			$aItem = array(
				"TEXT"=>$item["text"],
				"TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? $item["title"] : ''),
				"ICON"=>$item["icon"] ?? '',
			);
			if (isset($item["url"]) && $item["url"] <> "")
			{
				$link = htmlspecialcharsback($item["url"]);
				if(mb_strpos($link, "/bitrix/admin/") !== 0)
					$link = "/bitrix/admin/".$link;

				if (!empty($_REQUEST['back_url_pub']))
					$link .= (mb_strpos($link, '?') > 0 ? '&' : '?')."back_url_pub=".urlencode($_REQUEST["back_url_pub"]);

				$aItem['LINK'] = $link;

				if (!$bSkipRecent)
					$aItem['ONCLICK'] = 'BX.admin.startMenuRecent('.CUtil::PhpToJsObject($aItem).')';
			}

			if (isset($item["items"]) && is_array($item["items"]) && !empty($item["items"]))
			{
				$aItem["MENU"] = __GetSubmenu($item["items"]);
				if (isset($item["url"]) && $item["url"] <> "" && $aUserOpt['start_menu_title'] <> 'N')
					$aItem["TITLE"] .= ' '.GetMessage("get_start_menu_dbl");
			}
			elseif (isset($item["dynamic"]) && $item["dynamic"] == true)
			{
				$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();
				$aItem['MENU_PRELOAD'] = false;

				if(isset($item["url"]) && $item["url"] <> "" && $aUserOpt['start_menu_title'] <> 'N')
					$aItem["TITLE"] .= ' '.GetMessage("get_start_menu_dbl");
			}

			$aPopup[] = $aItem;
		}
	}

	return $aPopup;
}

function __FindSubmenu($menu, $items_id)
{
	foreach($menu as $item)
	{
		if(isset($item["items"]) && is_array($item["items"]) && !empty($item["items"]))
		{
			if($item["items_id"] == $items_id)
				return $item["items"];
			elseif(($m = __FindSubmenu($item["items"], $items_id)) !== false)
				return $m;
		}
	}
	return false;
}

if(isset($_REQUEST["mode"]) && $_REQUEST["mode"] == "save_recent")
{
	if(!empty($_REQUEST["url"]))
	{
		$nLinks = 5;
		if(!empty($aUserOpt["start_menu_links"]))
			$nLinks = intval($aUserOpt["start_menu_links"]);

		$aRecent = CUserOptions::GetOption("start_menu", "recent", array());

		CUtil::decodeURIComponent($_REQUEST["text"]);
		CUtil::decodeURIComponent($_REQUEST["title"]);
		$aLink = array("url"=>$_REQUEST["url"], "text"=>$_REQUEST["text"], "title"=>$_REQUEST["title"], "icon"=>$_REQUEST["icon"]);

		if(($pos = array_search($aLink, $aRecent)) !== false)
			unset($aRecent[$pos]);
		array_unshift($aRecent, $aLink);
		$aRecent = array_slice($aRecent, 0, $nLinks);

		CUserOptions::SetOption("start_menu", "recent", $aRecent);
	}
	echo "OK";
}
elseif(isset($_REQUEST["mode"]) && $_REQUEST["mode"] == "dynamic")
{
	//admin menu - dynamic sections
	$adminMenu->AddOpenedSections($_REQUEST["admin_mnu_menu_id"] ?? '');
	$adminMenu->Init(array($_REQUEST["admin_mnu_module_id"] ?? ''));

	$aSubmenu = __FindSubmenu($adminMenu->aGlobalMenu, $_REQUEST["admin_mnu_menu_id"] ?? '');

	if(!is_array($aSubmenu) || empty($aSubmenu))
		$aSubmenu = array(array("text"=>GetMessage("get_start_menu_no_data")));

	//generate JavaScript array for popup menu
	echo CAdminPopup::PhpToJavaScript(__GetSubmenu($aSubmenu));
}
elseif(isset($_REQUEST["mode"]) && $_REQUEST["mode"] == "chain")
{
	$adminMenu->AddOpenedSections($_REQUEST["admin_mnu_menu_id"] ?? '');
	$adminPage->Init();
	$adminMenu->Init($adminPage->aModules);

	$aSubmenu = __FindSubmenu($adminMenu->aGlobalMenu, $_REQUEST["admin_mnu_menu_id"] ?? '');

	if(!is_array($aSubmenu) || empty($aSubmenu))
		$aSubmenu = array(array("text"=>GetMessage("get_start_menu_no_data")));

	$bSkipRecent = true;

	//generate JavaScript array for popup menu
	echo CAdminPopup::PhpToJavaScript(__GetSubmenu($aSubmenu));
}
else
{
	//admin menu - all static sections
	$adminPage->Init();
	$adminMenu->Init($adminPage->aModules);

	$aPopup = array();
	foreach($adminMenu->aGlobalMenu as $menu)
	{
		$aPopup[] = array(
			"TEXT"=>$menu["text"],
			"TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? $menu["title"].' '.GetMessage("get_start_menu_dbl"):''),
			"GLOBAL_ICON"=>'adm-menu-'.$menu["menu_id"],
			"LINK"=> isset($menu['url']) && $menu['url'] ? '/bitrix/admin/'.$menu['url'] : '',
			"MENU"=>__GetSubmenu($menu["items"])
		);
	}

	//favorites
	if($USER->CanDoOperation('edit_own_profile') || $USER->CanDoOperation('edit_other_settings') || $USER->CanDoOperation('view_other_settings'))
	{
		$aFav = array(
			array(
				"TEXT"=>GetMessage("get_start_menu_add_fav"),
				"TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? GetMessage("get_start_menu_add_fav_title"):''),
				"ACTION"=>"BX.admin.startMenuFavAdd(".(!empty($_REQUEST["back_url_pub"]) ? "'".CUtil::JSEscape($_REQUEST["back_url_pub"])."'":"").");"
			),
			array(
				"TEXT"=>GetMessage("get_start_menu_org_fav"),
				"TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? GetMessage("get_start_menu_org_fav_title"):''),
				"LINK"=> BX_ROOT."/admin/favorite_list.php?lang=".LANGUAGE_ID."&back_url_pub=".urlencode($_REQUEST["back_url_pub"] ?? '')
			),
		);

		$aFav[1]["ONCLICK"] = 'BX.admin.startMenuRecent('.CUtil::PhpToJsObject($aFav[1]).')';

		$db_fav = CFavorites::GetList(array("COMMON"=>"ASC", "SORT"=>"ASC", "NAME"=>"ASC"), array("MENU_FOR_USER"=>$USER->GetID(), "LANGUAGE_ID"=>LANGUAGE_ID));
		$prevCommon = "";
		while($db_fav_arr = $db_fav->Fetch())
		{
			if($db_fav_arr["COMMON"] == "Y" && $db_fav_arr["MODULE_ID"] <> "" && $APPLICATION->GetGroupRight($db_fav_arr["MODULE_ID"]) < "R")
				continue;

			if($db_fav_arr["COMMON"] <> $prevCommon)
			{
				$aFav[] = array("SEPARATOR"=>true);
				$prevCommon = $db_fav_arr["COMMON"];
			}

			$sTitle = '';
			if($aUserOpt['start_menu_title'] <> 'N')
			{
				$sTitle = $db_fav_arr["COMMENTS"];
				$sTitle = (mb_strlen($sTitle) > 100? mb_substr($sTitle, 0, 100)."..." : $sTitle);
				$sTitle = str_replace("\r\n", "\n", $sTitle);
				$sTitle = str_replace("\r", "\n", $sTitle);
				$sTitle = str_replace("\n", " ", $sTitle);
			}

			$aItem = array(
				"TEXT"=>htmlspecialcharsbx($db_fav_arr["NAME"]),
				"TITLE"=>htmlspecialcharsbx($sTitle),
			);

			if ($db_fav_arr["URL"])
			{
				$aItem["LINK"] = $db_fav_arr["URL"];

				if (!preg_match('/^(http:|https:|\/)/i', $aItem["LINK"]))
				{
					$aItem["LINK"] = '/bitrix/admin/'.$aItem["LINK"];
				}

				$aItem["ONCLICK"] = 'BX.admin.startMenuRecent('.CUtil::PhpToJsObject($aItem).')';
			}

			if ($db_fav_arr['MENU_ID'])
			{
				$aSubmenu = __FindSubmenu($adminMenu->aGlobalMenu, $db_fav_arr['MENU_ID']);

				if(!is_array($aSubmenu) || empty($aSubmenu))
				{
					$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();
					$aItem['MENU_PRELOAD'] = false;
				}

				$aItem["MENU"] = __GetSubmenu($aSubmenu);
			}

			$aFav[] = $aItem;
		}

		$aPopup[] = array("SEPARATOR"=>true);
		$aPopup[] = array(
			"TEXT"=>GetMessage("get_start_menu_fav"),
			"TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? GetMessage("get_start_menu_fav_title"):''),
			"GLOBAL_ICON" => 'adm-menu-favorites',
			"MENU"=>$aFav,
		);
	}

	//recent urls
	if (!$bSkipRecent)
	{
		$aRecent = CUserOptions::GetOption("start_menu", "recent", array());
		if(!empty($aRecent))
		{
			$aPopup[] = array("SEPARATOR"=>true);

			$nLinks = 5;
			if($aUserOpt["start_menu_links"] <> "")
				$nLinks = intval($aUserOpt["start_menu_links"]);

			$i = 0;
			foreach($aRecent as $recent)
			{
				$i++;
				if($i > $nLinks)
					break;

				$aItem = array(
					"TEXT"=>htmlspecialcharsbx($recent["text"]),
					"TITLE"=>($aUserOpt['start_menu_title'] <> 'N'? htmlspecialcharsbx($recent["title"]):''),
					"GLOBAL_ICON"=>htmlspecialcharsbx($recent["icon"]),
					"LINK"=>$recent["url"],
				);

				$aItem["ONCLICK"] = 'BX.admin.startMenuRecent('.CUtil::PhpToJsObject($aItem).')';

				$aPopup[] = $aItem;
			}
		}
	}

	if(empty($aPopup))
		$aPopup[] = array("TEXT"=>GetMessage("get_start_menu_no_data"));

	//generate JavaScript array for popup menu
	echo CAdminPopup::PhpToJavaScript($aPopup);

}

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php");