• Модуль: mobileapp
  • Путь к файлу: ~/bitrix/modules/mobileapp/lib/mobile.php
  • Класс: BitrixMobileAppMobile
  • Вызов: Mobile::__construct
private function __construct()
{
	global $APPLICATION;

	$this->setDeviceWidth($_COOKIE["MOBILE_RESOLUTION_WIDTH"] ?? null);
	$this->setDeviceHeight($_COOKIE["MOBILE_RESOLUTION_HEIGHT"] ?? null);
	$this->setPixelratio($_COOKIE["MOBILE_SCALE"] ?? null);
	$this->screenCategory = $_COOKIE["MOBILE_SCREEN_CATEGORY"] ?? null;

	if (!empty($_COOKIE["PG_VERSION"]))
	{
		self::$pgVersion = $_COOKIE["PG_VERSION"];
	}

	self::$isDev = (isset($_COOKIE["MOBILE_DEV"]) && $_COOKIE["MOBILE_DEV"] == "Y");
	$this->device = $_COOKIE["MOBILE_DEVICE"] ?? null;
	if (!empty($_COOKIE["IS_WEBRTC_SUPPORTED"]) && $_COOKIE["IS_WEBRTC_SUPPORTED"] == "Y")
	{
		$this->setWebRtcSupport(true);
	}
	if (!empty($_COOKIE["IS_BXSCRIPT_SUPPORTED"]) && $_COOKIE["IS_BXSCRIPT_SUPPORTED"] == "Y")
	{
		$this->setBXScriptSupported(true);
	}

	if ($this->getDevice() == "iPad")
	{
		$this->setScreenCategory("LARGE");
		if (intval($this->getPixelRatio()) == 2) //retina hack
		{
			$this->setDeviceWidth($_COOKIE["MOBILE_RESOLUTION_WIDTH"] / 2);
			$this->setDeviceHeight($_COOKIE["MOBILE_RESOLUTION_HEIGHT"] / 2);
		}
	}

	//detecting OS
	if (array_key_exists("MOBILE_DEVICE", $_COOKIE))
	{
		$deviceDetectSource = $_COOKIE["MOBILE_DEVICE"];
	}
	else
	{
		$deviceDetectSource = mb_strtolower(Context::getCurrent()->getServer()->get("HTTP_USER_AGENT"));
	}

	if (mb_strrpos(ToUpper($deviceDetectSource), "IPHONE") > 0 || mb_strrpos(ToUpper($deviceDetectSource), "IPAD") > 0)
	{
		self::$platform = "ios";
	}
	elseif (mb_strrpos(ToUpper($deviceDetectSource), "ANDROID") > 0 || mb_strrpos(ToUpper($deviceDetectSource), "ANDROID") === 0)
	{
		self::$platform = "android";
	}

	$userAgent = BitrixMainContext::getCurrent()->getServer()->get("HTTP_USER_AGENT");
	if (!empty($_COOKIE["MOBILE_SYSTEM_VERSION"]))
	{
		self::$systemVersion = $_COOKIE["MOBILE_SYSTEM_VERSION"];
	}
	else
	{
		//iOS
		preg_match("/iOSs(d+.d+)/i",$userAgent, $pregMatch);
		if(count($pregMatch) == 2)
			self::$systemVersion = floatval($pregMatch[1]);
	}

	if (array_key_exists("emulate_platform", $_REQUEST))
	{
		self::$platform = $_REQUEST["emulate_platform"];
	}

	if ($mobileTZ = $APPLICATION->get_cookie("TZ", "MOBILE")) {
		$tz = $APPLICATION->get_cookie("TZ");
		if ($tz != $mobileTZ) {
			$cookie = new BitrixMainWebCookie("TZ", $mobileTZ, time() + 60 * 60 * 24 * 30 * 12);
			BitrixMainContext::getCurrent()->getResponse()->addCookie($cookie);
		}

	}

	if (array_key_exists("MOBILE_API_VERSION", $_COOKIE))
	{
		self::$apiVersion = $_COOKIE["MOBILE_API_VERSION"];
	}
	elseif ($APPLICATION->get_cookie("MOBILE_APP_VERSION"))
	{
		self::$apiVersion = $APPLICATION->get_cookie("MOBILE_APP_VERSION");
	}
	elseif (array_key_exists("api_version", $_REQUEST))
	{
		self::$apiVersion = $_REQUEST["api_version"];
	}
	else
	{
		preg_match("/(?<=BitrixMobile/Version=).*d/i",$userAgent, $pregMatch);

		if(count($pregMatch) == 1)
		{
			self::$apiVersion = $pregMatch[0];
		}
	}

	self::$apiVersion = intval(self::$apiVersion);
}