• Модуль: extranet
  • Путь к файлу: ~/bitrix/modules/extranet/classes/general/extranet.php
  • Класс: CExtranet
  • Вызов: CExtranet::ExtranetRedirect
static function ExtranetRedirect()
{
	global $USER, $APPLICATION;

	$curPage = $APPLICATION->GetCurPageParam();

	if(
		(!defined("ADMIN_SECTION") || ADMIN_SECTION !== true)
		&& (!defined("EXTRANET_NO_REDIRECT") || EXTRANET_NO_REDIRECT !== true)
		&& (mb_strpos($curPage, "/bitrix/") !== 0)
		&& (mb_strpos($curPage, "/upload/") !== 0)
		&& (mb_strpos($curPage, "/oauth/") !== 0)
		&& (mb_strpos($curPage, "/desktop_app/") !== 0)
		&& (mb_strpos($curPage, "/docs/pub/") !== 0)
		&& (mb_strpos($curPage, "/extranet/confirm/") !== 0)
		&& (mb_strpos($curPage, "/mobile/ajax.php") !== 0)
		&& (mb_strpos($curPage, "/mobile/mobile_component/") !== 0)
		&& (mb_strpos($curPage, "/mobile/web_mobile_component/") !== 0)
		&& (mb_strpos($curPage, "/mobileapp/") !== 0)
		&& (mb_strpos($curPage, "/pub/") !== 0)
		&& (mb_strpos($curPage, "/rest/") !== 0)
		&& !preg_match("/^\/online\/([\.\-0-9a-zA-Z]+)(\/?)([^\/]*)$/i", $curPage)
		&& (!self::IsExtranetSite())
		&& self::GetExtranetSiteID() <> ''
		&& $USER->IsAuthorized()
		&& !$USER->IsAdmin()
		&& !self::IsIntranetUser()
		&& !$USER->CanDoFileOperation(
			'fm_view_file',
			[
				SITE_ID,
				BitrixMainApplication::getInstance()->getContext()->getRequest()->getScriptFile()
			]
		)
	)
	{
		$rsSites = CSite::GetByID(self::GetExtranetSiteID());
		if (
			($arExtranetSite = $rsSites->Fetch())
			&& ($arExtranetSite["ACTIVE"] !== "N")
		)
		{
			$URLToRedirect = false;

			$userSEFFolder = COption::GetOptionString("socialnetwork", "user_page", false, SITE_ID);
			$workgroupSEFFolder = COption::GetOptionString("socialnetwork", "workgroups_page", false, SITE_ID);
			if (mb_strpos($curPage, $userSEFFolder) === 0)
			{
				$userSEFFolderExtranet = COption::GetOptionString("socialnetwork", "user_page", false, $arExtranetSite['LID']);
				if ($userSEFFolderExtranet)
				{
					$URLToRedirect = $userSEFFolderExtranet.mb_substr($curPage, mb_strlen($userSEFFolder));
				}
			}
			elseif (mb_strpos($curPage, $workgroupSEFFolder) === 0)
			{
				$workgroupSEFFolderExtranet = COption::GetOptionString("socialnetwork", "workgroups_page", false, $arExtranetSite['LID']);
				if ($workgroupSEFFolderExtranet)
				{
					$URLToRedirect = $workgroupSEFFolderExtranet.mb_substr($curPage, mb_strlen($workgroupSEFFolder));
				}
			}

			if (!$URLToRedirect)
			{
				$URLToRedirect = ($arExtranetSite["SERVER_NAME"] <> '' ? (CMain::IsHTTPS() ? "https" : "http") . "://" . $arExtranetSite["SERVER_NAME"] : "") . $arExtranetSite["DIR"];
			}

			$urlParams = array();

			if (
				($urlParts = parse_url($curPage))
				&& !empty($urlParts['query'])
			)
			{
				$keyWhiteList = [ 'IM_SETTINGS' ];

				$pairsList = explode('&', $urlParts['query']);
				foreach ($pairsList as $pair)
				{
					[ $key, $value ] = explode('=', $pair);
					if (in_array($key, $keyWhiteList, true))
					{
						$urlParams[$key] = $value;
					}
				}
			}

			if (!empty($urlParams))
			{
				$URLToRedirect = CHTTP::urlAddParams($URLToRedirect, $urlParams);
			}

			LocalRedirect($URLToRedirect, true);
		}
	}
}