mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-05 17:51:40 +09:00
Add OS version and device model detection to UA::getBrowserInfo()
This commit is contained in:
parent
5a90f97f89
commit
3abaee5e2b
2 changed files with 52 additions and 0 deletions
|
|
@ -14,6 +14,18 @@ class UA
|
|||
protected static $_tablet_cache = array();
|
||||
protected static $_robot_cache = array();
|
||||
|
||||
/**
|
||||
* Windows version lookup table.
|
||||
*/
|
||||
protected static $_windows_versions = array(
|
||||
'5.1' => 'XP',
|
||||
'5.2' => 'XP',
|
||||
'6.0' => 'Vista',
|
||||
'6.1' => '7',
|
||||
'6.2' => '8',
|
||||
'6.3' => '8.1',
|
||||
);
|
||||
|
||||
/**
|
||||
* Check whether the current visitor is using a mobile device.
|
||||
*
|
||||
|
|
@ -181,6 +193,8 @@ class UA
|
|||
'browser' => null,
|
||||
'version' => null,
|
||||
'os' => null,
|
||||
'os_version' => null,
|
||||
'device' => null,
|
||||
'is_mobile' => null,
|
||||
'is_tablet' => null,
|
||||
'is_webview' => null,
|
||||
|
|
@ -197,18 +211,36 @@ class UA
|
|||
if ($matches[1] === 'Linux' && strpos($ua, 'Android') !== false)
|
||||
{
|
||||
$result->os = 'Android';
|
||||
if (preg_match('#Android ([0-9\.]+);(?: ([^;]+) Build/)?#', $ua, $matches))
|
||||
{
|
||||
$result->os_version = $matches[1];
|
||||
$result->device = $matches[2] ?: null;
|
||||
}
|
||||
}
|
||||
elseif ($matches[1] === 'iPhone' || $matches[1] === 'iPad' || $matches[1] === 'iPod')
|
||||
{
|
||||
$result->os = 'iOS';
|
||||
if (preg_match('#(i(?:Phone|P[ao]d)); (?:.+?) OS ([0-9_\.]+)#s', $ua, $matches))
|
||||
{
|
||||
$result->os_version = str_replace('_', '.', $matches[2]);
|
||||
$result->device = $matches[1];
|
||||
}
|
||||
}
|
||||
elseif ($matches[1] === 'Macintosh' || $matches[1] === 'OS X')
|
||||
{
|
||||
$result->os = 'macOS';
|
||||
if (preg_match('#OS X ([0-9_\.]+)#', $ua, $matches))
|
||||
{
|
||||
$result->os_version = str_replace('_', '.', $matches[1]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$result->os = $matches[1];
|
||||
if (preg_match('#Windows NT ([0-9\.]+)#', $ua, $matches))
|
||||
{
|
||||
$result->os_version = isset(self::$_windows_versions[$matches[1]]) ? self::$_windows_versions[$matches[1]] : $matches[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('Android', $browser->browser);
|
||||
$this->assertEquals('4.0', $browser->version);
|
||||
$this->assertEquals('Android', $browser->os);
|
||||
$this->assertEquals('4.0.3', $browser->os_version);
|
||||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertTrue($browser->is_tablet);
|
||||
$this->assertFalse($browser->is_webview);
|
||||
|
|
@ -63,6 +64,8 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 4.4.4; One Build/KTU84L.H4) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36');
|
||||
$this->assertEquals('Android', $browser->browser);
|
||||
$this->assertEquals('4.4', $browser->version);
|
||||
$this->assertEquals('4.4.4', $browser->os_version);
|
||||
$this->assertEquals('One', $browser->device);
|
||||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertFalse($browser->is_tablet);
|
||||
$this->assertFalse($browser->is_webview);
|
||||
|
|
@ -72,6 +75,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36');
|
||||
$this->assertEquals('Android', $browser->browser);
|
||||
$this->assertEquals('5.1', $browser->version);
|
||||
$this->assertEquals('Nexus 5', $browser->device);
|
||||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertFalse($browser->is_tablet);
|
||||
$this->assertTrue($browser->is_webview);
|
||||
|
|
@ -91,6 +95,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('Chrome', $browser->browser);
|
||||
$this->assertEquals('51.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertEquals('10.0', $browser->os_version);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
// Linux Chrome
|
||||
|
|
@ -125,27 +130,36 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('IE', $browser->browser);
|
||||
$this->assertEquals('11.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertEquals('10.0', $browser->os_version);
|
||||
|
||||
// IE 10 in compatibility mode
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0)');
|
||||
$this->assertEquals('IE', $browser->browser);
|
||||
$this->assertEquals('10.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertEquals('XP', $browser->os_version);
|
||||
|
||||
// IE 9
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)');
|
||||
$this->assertEquals('IE', $browser->browser);
|
||||
$this->assertEquals('9.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertEquals('7', $browser->os_version);
|
||||
|
||||
// IE 8 in compatibility mode
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)');
|
||||
$this->assertEquals('IE', $browser->browser);
|
||||
$this->assertEquals('8.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertEquals('Vista', $browser->os_version);
|
||||
|
||||
// iOS Safari
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3');
|
||||
$this->assertEquals('Safari', $browser->browser);
|
||||
$this->assertEquals('5.1', $browser->version);
|
||||
$this->assertEquals('iOS', $browser->os);
|
||||
$this->assertEquals('5.1', $browser->os_version);
|
||||
$this->assertEquals('iPad', $browser->device);
|
||||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertTrue($browser->is_tablet);
|
||||
|
||||
|
|
@ -154,6 +168,8 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('Chrome', $browser->browser);
|
||||
$this->assertEquals('19.0', $browser->version);
|
||||
$this->assertEquals('iOS', $browser->os);
|
||||
$this->assertEquals('5.1.1', $browser->os_version);
|
||||
$this->assertEquals('iPhone', $browser->device);
|
||||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertFalse($browser->is_tablet);
|
||||
|
||||
|
|
@ -162,6 +178,8 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('Firefox', $browser->browser);
|
||||
$this->assertEquals('1.0', $browser->version);
|
||||
$this->assertEquals('iOS', $browser->os);
|
||||
$this->assertEquals('8.3', $browser->os_version);
|
||||
$this->assertEquals('iPad', $browser->device);
|
||||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertTrue($browser->is_tablet);
|
||||
|
||||
|
|
@ -170,6 +188,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('Safari', $browser->browser);
|
||||
$this->assertEquals('8.0', $browser->version);
|
||||
$this->assertEquals('macOS', $browser->os);
|
||||
$this->assertEquals('10.10.2', $browser->os_version);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
// macOS (OS X) Chrome
|
||||
|
|
@ -177,6 +196,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('Chrome', $browser->browser);
|
||||
$this->assertEquals('41.0', $browser->version);
|
||||
$this->assertEquals('macOS', $browser->os);
|
||||
$this->assertEquals('10.10.1', $browser->os_version);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
// macOS (OS X) Firefox
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue