add isReallyFromMobilePhone

This commit is contained in:
Lastorder 2024-07-01 18:46:23 +09:00 committed by GitHub
parent afa0388ae2
commit e051ae079a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -13,6 +13,12 @@ class Mobile
*/ */
protected static $_ismobile = null; protected static $_ismobile = null;
/**
* Whether mobile or not mobile mode
* @var bool
*/
protected static $_ismobilereally = null;
/** /**
* Get instance of Mobile class * Get instance of Mobile class
* *
@ -78,6 +84,55 @@ class Mobile
return self::$_ismobile; return self::$_ismobile;
} }
/**
* Get current mobile mode
*
* @return bool
*/
public static function isReallyFromMobilePhone()
{
// Return cached result.
if (self::$_ismobilereally !== null)
{
return self::$_ismobilereally;
}
// Try to detect from URL arguments and cookies, and finally fall back to user-agent detection.
$m = Context::get('m');
$cookie = isset($_COOKIE['rx_uatype']) ? $_COOKIE['rx_uatype'] : null;
$uahash = base64_encode_urlsafe(md5($_SERVER['HTTP_USER_AGENT'] ?? '', true));
if (strncmp($cookie ?? '', $uahash . ':', strlen($uahash) + 1) !== 0)
{
$cookie = null;
}
elseif ($m === null)
{
$m = substr($cookie, -1);
}
if ($m === '1')
{
self::$_ismobilereally = TRUE;
}
elseif ($m === '0')
{
self::$_ismobilereally = FALSE;
}
else
{
self::$_ismobilereally = Rhymix\Framework\UA::isMobile() && (config('mobile.tablets') || !Rhymix\Framework\UA::isTablet());
}
// Set cookie to prevent recalculation.
$uatype = $uahash . ':' . (self::$_ismobilereally ? '1' : '0');
if ($cookie !== $uatype)
{
Rhymix\Framework\Cookie::set('rx_uatype', $uatype, ['expires' => 0, 'path' => \RX_BASEURL]);
}
return self::$_ismobilereally;
}
/** /**
* Get current mobile mode * Get current mobile mode
* *