aboutsummaryrefslogtreecommitdiffstats
path: root/include/mdetect.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--include/mdetect.php656
1 files changed, 387 insertions, 269 deletions
diff --git a/include/mdetect.php b/include/mdetect.php
index 36e575454..c2a06d75d 100644
--- a/include/mdetect.php
+++ b/include/mdetect.php
@@ -1,39 +1,31 @@
<?php
/* *******************************************
-// Copyright 2010-2012, Anthony Hand
+// Copyright 2010-2013, Anthony Hand
//
-// File version date: April 23, 2012
-// Update:
-// - Updated DetectAmazonSilk(): Fixed an issue in the detection logic.
+// File version 2013.10.27 (October 27, 2013)
+// Updates:
+// - Made minor update to the InitDeviceScan. Should check Tablet Tier first, then iPhone Tier, then Quick Mobile.
//
-// File version date: April 22, 2012 - Second update
-// Update: To address additional Kindle issues...
-// - Updated DetectRichCSS(): Excluded e-Ink Kindle devices.
-// - Created DetectAmazonSilk(): Created to detect Kindle Fire devices in Silk mode.
-// - Updated DetectMobileQuick(): Updated to include e-Ink Kindle devices and the Kindle Fire in Silk mode.
+// File version 2013.08.01 (August 1, 2013)
+// Updates:
+// - Updated DetectMobileQuick(). Moved the 'Exclude Tablets' logic to the top of the method to fix a logic bug.
//
-// File version date: April 11, 2012
-// Update:
-// - Added a new variable for the new BlackBerry Curve Touch (9380): deviceBBCurveTouch.
-// - Updated DetectBlackBerryTouch() to support the new BlackBerry Curve Touch (9380).
-// - Updated DetectKindle(): Added the missing 'this' class identifier for the DetectAndroid() call.
-//
-// File version date: January 21, 2012
-// Update:
-// - Added the constructor method per new features in PHP 5.0: __construct().
-// - Moved Windows Phone 7 to the iPhone Tier. WP7.5's IE 9-based browser is good enough now.
-// - Added a new variable for 2 versions of the new BlackBerry Bold Touch (9900 and 9930): deviceBBBoldTouch.
-// - Updated DetectBlackBerryTouch() to support the 2 versions of the new BlackBerry Bold Touch (9900 and 9930).
-// - Updated DetectKindle() to focus on eInk devices only. The Kindle Fire should be detected as a regular Android device.
-//
-// File version date: August 22, 2011
-// Update:
-// - Updated DetectAndroidTablet() to fix a bug introduced in the last fix! The true/false returns were mixed up.
-//
-// File version date: August 16, 2011
-// Update:
-// - Updated DetectAndroidTablet() to exclude Opera Mini, which was falsely reporting as running on a tablet device when on a phone.
+// File version 2013.07.13 (July 13, 2013)
+// Updates:
+// - Added support for Tizen: variable and DetectTizen().
+// - Added support for Meego: variable and DetectMeego().
+// - Added support for Windows Phone 8: variable and DetectWindowsPhone8().
+// - Added a generic Windows Phone method: DetectWindowsPhone().
+// - Added support for BlackBerry 10 OS: variable and DetectBlackBerry10Phone().
+// - Added support for PlayStation Vita handheld: variable and DetectGamingHandheld().
+// - Updated DetectTierIphone(). Added Tizen; updated the Windows Phone, BB10, and PS Vita support.
+// - Updated DetectWindowsMobile(). Uses generic DetectWindowsPhone() method rather than WP7.
+// - Updated DetectSmartphone(). Uses the IsTierIphone variable.
+// - Updated DetectSonyMylo() with more efficient code.
+// - Removed DetectGarminNuvifone() from DetectTierIphone(). How many are left in market in 2013? It is detected as a RichCSS Tier device.
+// - Removed the deviceXoom variable. It was unused.
+// - Added detection support for the Obigo mobile browser to DetectMobileQuick().
//
//
// LICENSE INFORMATION
@@ -80,16 +72,21 @@ class uagent_info
var $true = 1;
var $false = 0;
- //Let's store values for quickly accessing the same info multiple times.
- var $isIphone = 0; //Stores whether the device is an iPhone or iPod Touch.
- var $isAndroidPhone = 0; //Stores whether the device is a (small-ish) Android phone or media player.
- var $isTierTablet = 0; //Stores whether is the Tablet (HTML5-capable, larger screen) tier of devices.
- var $isTierIphone = 0; //Stores whether is the iPhone tier of devices.
- var $isTierRichCss = 0; //Stores whether the device can probably support Rich CSS, but JavaScript support is not assumed. (e.g., newer BlackBerry, Windows Mobile)
- var $isTierGenericMobile = 0; //Stores whether it is another mobile device, which cannot be assumed to support CSS or JS (eg, older BlackBerry, RAZR)
+ //Let's store values for quickly accessing the same info multiple times. InitCompleted
+ var $initCompleted = 0; //Stores whether we're currently initializing the most popular functions.
+ var $isWebkit = 0; //Stores the result of DetectWebkit()
+ var $isMobilePhone = 0; //Stores the result of DetectMobileQuick()
+ var $isIphone = 0; //Stores the result of DetectIphone()
+ var $isAndroid = 0; //Stores the result of DetectAndroid()
+ var $isAndroidPhone = 0; //Stores the result of DetectAndroidPhone()
+ var $isTierTablet = 0; //Stores the result of DetectTierTablet()
+ var $isTierIphone = 0; //Stores the result of DetectTierIphone()
+ var $isTierRichCss = 0; //Stores the result of DetectTierRichCss()
+ var $isTierGenericMobile = 0; //Stores the result of DetectTierOtherPhones()
//Initialize some initial smartphone string variables.
var $engineWebKit = 'webkit';
+
var $deviceIphone = 'iphone';
var $deviceIpod = 'ipod';
var $deviceIpad = 'ipad';
@@ -97,18 +94,10 @@ class uagent_info
var $deviceAndroid = 'android';
var $deviceGoogleTV = 'googletv';
- var $deviceXoom = 'xoom'; //Motorola Xoom
var $deviceHtcFlyer = 'htc_flyer'; //HTC Flyer
- var $deviceNuvifone = 'nuvifone'; //Garmin Nuvifone
-
- var $deviceSymbian = 'symbian';
- var $deviceS60 = 'series60';
- var $deviceS70 = 'series70';
- var $deviceS80 = 'series80';
- var $deviceS90 = 'series90';
-
var $deviceWinPhone7 = 'windows phone os 7';
+ var $deviceWinPhone8 = 'windows phone 8';
var $deviceWinMob = 'windows ce';
var $deviceWindows = 'windows';
var $deviceIeMob = 'iemobile';
@@ -116,6 +105,7 @@ class uagent_info
var $enginePie = 'wm5 pie'; //An old Windows Mobile
var $deviceBB = 'blackberry';
+ var $deviceBB10 = 'bb10'; //For the new BB 10 OS
var $vndRIM = 'vnd.rim'; //Detectable when BB devices emulate IE or Firefox
var $deviceBBStorm = 'blackberry95'; //Storm 1 and 2
var $deviceBBBold = 'blackberry97'; //Bold 97x0 (non-touch)
@@ -126,15 +116,25 @@ class uagent_info
var $deviceBBTorch = 'blackberry 98'; //Torch
var $deviceBBPlaybook = 'playbook'; //PlayBook tablet
+ var $deviceSymbian = 'symbian';
+ var $deviceS60 = 'series60';
+ var $deviceS70 = 'series70';
+ var $deviceS80 = 'series80';
+ var $deviceS90 = 'series90';
+
var $devicePalm = 'palm';
var $deviceWebOS = 'webos'; //For Palm's line of WebOS devices
var $deviceWebOShp = 'hpwos'; //For HP's line of WebOS devices
-
var $engineBlazer = 'blazer'; //Old Palm browser
var $engineXiino = 'xiino'; //Another old Palm
+ var $deviceNuvifone = 'nuvifone'; //Garmin Nuvifone
+ var $deviceBada = 'bada'; //Samsung's Bada OS
+ var $deviceTizen = 'tizen'; //Tizen OS
+ var $deviceMeego = 'meego'; //Meego OS
+
var $deviceKindle = 'kindle'; //Amazon Kindle, eInk one
- var $engineSilk = 'silk'; //Amazon's accelerated Silk browser for Kindle Fire
+ var $engineSilk = 'silk-accelerated'; //Amazon's accelerated Silk browser for Kindle Fire
//Initialize variables for mobile-specific content.
var $vndwap = 'vnd.wap';
@@ -146,6 +146,7 @@ class uagent_info
var $deviceDanger = 'danger';
var $deviceHiptop = 'hiptop';
var $devicePlaystation = 'playstation';
+ var $devicePlaystationVita = 'vita';
var $deviceNintendoDs = 'nitro';
var $deviceNintendo = 'nintendo';
var $deviceWii = 'wii';
@@ -159,6 +160,7 @@ class uagent_info
var $deviceMidp = 'midp'; //a mobile Java technology
var $uplink = 'up.link';
var $engineTelecaQ = 'teleca q'; //a modern feature phone browser
+ var $engineObigo = 'obigo'; //W 10 is a modern feature phone browser
var $devicePda = 'pda'; //some devices report themselves as PDAs
var $mini = 'mini'; //Some mobile browsers put 'mini' in their names.
@@ -176,7 +178,7 @@ class uagent_info
var $manuericsson = "ericsson";
var $manuSamsung1 = "sec-sgh";
var $manuSony = "sony";
- var $manuHtc = "htc"; //Popular Android and WinMo manufacturer
+ var $manuHtc = "htc";
//In some UserAgents, the only clue is the operator.
var $svcDocomo = "docomo";
@@ -191,7 +193,7 @@ class uagent_info
//The constructor. Allows the latest PHP (5.0+) to locate a constructor object and initialize the object.
function __construct()
{
- $this->uagent_info();
+ $this->uagent_info();
}
@@ -199,29 +201,36 @@ class uagent_info
//The object initializer. Initializes several default variables.
function uagent_info()
{
- $this->useragent = isset($_SERVER['HTTP_USER_AGENT'])?strtolower($_SERVER['HTTP_USER_AGENT']):'';
- $this->httpaccept = isset($_SERVER['HTTP_ACCEPT'])?strtolower($_SERVER['HTTP_ACCEPT']):'';
-
- //Let's initialize some values to save cycles later.
- $this->InitDeviceScan();
+ $this->useragent = isset($_SERVER['HTTP_USER_AGENT'])?strtolower($_SERVER['HTTP_USER_AGENT']):'';
+ $this->httpaccept = isset($_SERVER['HTTP_ACCEPT'])?strtolower($_SERVER['HTTP_ACCEPT']):'';
+
+ //Let's initialize some values to save cycles later.
+ $this->InitDeviceScan();
}
//**************************
// Initialize Key Stored Values.
function InitDeviceScan()
{
- global $isIphone, $isAndroidPhone, $isTierTablet, $isTierIphone;
-
- //We'll use these 4 variables to speed other processing. They're super common.
- $this->isIphone = $this->DetectIphoneOrIpod();
+ //Save these properties to speed processing
+ global $isWebkit, $isIphone, $isAndroid, $isAndroidPhone;
+ $this->isWebkit = $this->DetectWebkit();
+ $this->isIphone = $this->DetectIphone();
+ $this->isAndroid = $this->DetectAndroid();
$this->isAndroidPhone = $this->DetectAndroidPhone();
- $this->isTierIphone = $this->DetectTierIphone();
- $this->isTierTablet = $this->DetectTierTablet();
- //Optional: Comment these out if you don't need them.
+ //These tiers are the most useful for web development
+ global $isMobilePhone, $isTierTablet, $isTierIphone;
+ $this->isTierTablet = $this->DetectTierTablet(); //Do first
+ $this->isTierIphone = $this->DetectTierIphone(); //Do second
+ $this->isMobilePhone = $this->DetectMobileQuick(); //Do third
+
+ //Optional: Comment these out if you NEVER use them.
global $isTierRichCss, $isTierGenericMobile;
$this->isTierRichCss = $this->DetectTierRichCss();
$this->isTierGenericMobile = $this->DetectTierOtherPhones();
+
+ $this->initCompleted = $this->true;
}
//**************************
@@ -243,6 +252,10 @@ class uagent_info
// Detects if the current device is an iPhone.
function DetectIphone()
{
+ if ($this->initCompleted == $this->true ||
+ $this->isIphone == $this->true)
+ return $this->isIphone;
+
if (stripos($this->useragent, $this->deviceIphone) > -1)
{
//The iPad and iPod Touch say they're an iPhone. So let's disambiguate.
@@ -283,8 +296,8 @@ class uagent_info
function DetectIphoneOrIpod()
{
//We repeat the searches here because some iPods may report themselves as an iPhone, which would be okay.
- if (stripos($this->useragent, $this->deviceIphone) > -1 ||
- stripos($this->useragent, $this->deviceIpod) > -1)
+ if ($this->DetectIphone() == $this->true ||
+ $this->DetectIpod() == $this->true)
return $this->true;
else
return $this->false;
@@ -307,8 +320,12 @@ class uagent_info
// Also detects Google TV.
function DetectAndroid()
{
- if ((stripos($this->useragent, $this->deviceAndroid) > -1) ||
- ($this->DetectGoogleTV() == $this->true))
+ if ($this->initCompleted == $this->true ||
+ $this->isAndroid == $this->true)
+ return $this->isAndroid;
+
+ if ((stripos($this->useragent, $this->deviceAndroid) > -1)
+ || ($this->DetectGoogleTV() == $this->true))
return $this->true;
//Special check for the HTC Flyer 7" tablet
if ((stripos($this->useragent, $this->deviceHtcFlyer) > -1))
@@ -324,15 +341,21 @@ class uagent_info
// Ignores tablets (Honeycomb and later).
function DetectAndroidPhone()
{
+ if ($this->initCompleted == $this->true ||
+ $this->isAndroidPhone == $this->true)
+ return $this->isAndroidPhone;
+
if (($this->DetectAndroid() == $this->true) &&
- (stripos($this->useragent, $this->mobile) > -1))
- return $this->true;
+ (stripos($this->useragent, $this->mobile) > -1))
+ return $this->true;
+
//Special check for Android phones with Opera Mobile. They should report here.
if (($this->DetectOperaAndroidPhone() == $this->true))
return $this->true;
//Special check for the HTC Flyer 7" tablet. It should report here.
if ((stripos($this->useragent, $this->deviceHtcFlyer) > -1))
- return $this->true;
+ return $this->true;
+
else
return $this->false;
}
@@ -366,7 +389,7 @@ class uagent_info
function DetectAndroidWebKit()
{
if (($this->DetectAndroid() == $this->true) &&
- ($this->DetectWebkit() == $this->true))
+ ($this->DetectWebkit() == $this->true))
return $this->true;
else
return $this->false;
@@ -386,6 +409,10 @@ class uagent_info
// Detects if the current browser is based on WebKit.
function DetectWebkit()
{
+ if ($this->initCompleted == $this->true ||
+ $this->isWebkit == $this->true)
+ return $this->isWebkit;
+
if (stripos($this->useragent, $this->engineWebKit) > -1)
return $this->true;
else
@@ -394,46 +421,32 @@ class uagent_info
//**************************
- // Detects if the current browser is the Nokia S60 Open Source Browser.
- function DetectS60OssBrowser()
+ // Detects if the current browser is EITHER a
+ // Windows Phone 7.x OR 8 device.
+ function DetectWindowsPhone()
{
- //First, test for WebKit, then make sure it's either Symbian or S60.
- if ($this->DetectWebkit() == $this->true)
- {
- if (stripos($this->useragent, $this->deviceSymbian) > -1 ||
- stripos($this->useragent, $this->deviceS60) > -1)
- {
- return $this->true;
- }
- else
- return $this->false;
- }
+ if (($this->DetectWindowsPhone8() == $this->true)
+ || ($this->DetectWindowsPhone7() == $this->true))
+ return $this->true;
else
return $this->false;
}
//**************************
- // Detects if the current device is any Symbian OS-based device,
- // including older S60, Series 70, Series 80, Series 90, and UIQ,
- // or other browsers running on these devices.
- function DetectSymbianOS()
+ // Detects a Windows Phone 7.x device (in mobile browsing mode).
+ function DetectWindowsPhone7()
{
- if (stripos($this->useragent, $this->deviceSymbian) > -1 ||
- stripos($this->useragent, $this->deviceS60) > -1 ||
- stripos($this->useragent, $this->deviceS70) > -1 ||
- stripos($this->useragent, $this->deviceS80) > -1 ||
- stripos($this->useragent, $this->deviceS90) > -1)
+ if (stripos($this->useragent, $this->deviceWinPhone7) > -1)
return $this->true;
else
return $this->false;
}
-
+
//**************************
- // Detects if the current browser is a
- // Windows Phone 7 device.
- function DetectWindowsPhone7()
+ // Detects a Windows Phone 8 device (in mobile browsing mode).
+ function DetectWindowsPhone8()
{
- if (stripos($this->useragent, $this->deviceWinPhone7) > -1)
+ if (stripos($this->useragent, $this->deviceWinPhone8) > -1)
return $this->true;
else
return $this->false;
@@ -441,12 +454,13 @@ class uagent_info
//**************************
// Detects if the current browser is a Windows Mobile device.
- // Excludes Windows Phone 7 devices.
+ // Excludes Windows Phone 7 and later devices.
// Focuses on Windows Mobile 6.xx and earlier.
function DetectWindowsMobile()
{
- if ($this->DetectWindowsPhone7() == $this->true)
- return $this->false;
+ if ($this->DetectWindowsPhone() == $this->true)
+ return $this->false;
+
//Most devices use 'Windows CE', but some report 'iemobile'
// and some older ones report as 'PIE' for Pocket IE.
if (stripos($this->useragent, $this->deviceWinMob) > -1 ||
@@ -454,8 +468,8 @@ class uagent_info
stripos($this->useragent, $this->enginePie) > -1)
return $this->true;
//Test for Windows Mobile PPC but not old Macintosh PowerPC.
- if (stripos($this->useragent, $this->devicePpc) > -1
- && !(stripos($this->useragent, $this->deviceMacPpc) > 1))
+ if (stripos($this->useragent, $this->devicePpc) > -1
+ && !(stripos($this->useragent, $this->deviceMacPpc) > 1))
return $this->true;
//Test for certain Windwos Mobile-based HTC devices.
if (stripos($this->useragent, $this->manuHtc) > -1 &&
@@ -470,11 +484,25 @@ class uagent_info
//**************************
// Detects if the current browser is any BlackBerry device.
- // Includes the PlayBook.
+ // Includes BB10 OS, but excludes the PlayBook.
function DetectBlackBerry()
{
if ((stripos($this->useragent, $this->deviceBB) > -1) ||
(stripos($this->httpaccept, $this->vndRIM) > -1))
+ return $this->true;
+ if ($this->DetectBlackBerry10Phone() == $this->true)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is a BlackBerry 10 OS phone.
+ // Excludes tablets.
+ function DetectBlackBerry10Phone()
+ {
+ if ((stripos($this->useragent, $this->deviceBB10) > -1) &&
+ (stripos($this->useragent, $this->mobile) > -1))
return $this->true;
else
return $this->false;
@@ -498,7 +526,7 @@ class uagent_info
function DetectBlackBerryWebKit()
{
if (($this->DetectBlackBerry() == $this->true) &&
- ($this->DetectWebkit() == $this->true))
+ ($this->DetectWebkit() == $this->true))
return $this->true;
else
return $this->false;
@@ -510,9 +538,9 @@ class uagent_info
function DetectBlackBerryTouch()
{
if ((stripos($this->useragent, $this->deviceBBStorm) > -1) ||
- (stripos($this->useragent, $this->deviceBBTorch) > -1) ||
- (stripos($this->useragent, $this->deviceBBBoldTouch) > -1) ||
- (stripos($this->useragent, $this->deviceBBCurveTouch) > -1))
+ (stripos($this->useragent, $this->deviceBBTorch) > -1) ||
+ (stripos($this->useragent, $this->deviceBBBoldTouch) > -1) ||
+ (stripos($this->useragent, $this->deviceBBCurveTouch) > -1))
return $this->true;
else
return $this->false;
@@ -554,7 +582,7 @@ class uagent_info
{
//Assume that if it's not in the High tier, then it's Low.
if (($this->DetectBlackBerryHigh() == $this->true) ||
- ($this->DetectBlackBerryWebKit() == $this->true))
+ ($this->DetectBlackBerryWebKit() == $this->true))
return $this->false;
else
return $this->true;
@@ -563,105 +591,85 @@ class uagent_info
return $this->false;
}
+
//**************************
- // Detects if the current browser is on a PalmOS device.
- function DetectPalmOS()
+ // Detects if the current browser is the Nokia S60 Open Source Browser.
+ function DetectS60OssBrowser()
{
- //Most devices nowadays report as 'Palm', but some older ones reported as Blazer or Xiino.
- if (stripos($this->useragent, $this->devicePalm) > -1 ||
- stripos($this->useragent, $this->engineBlazer) > -1 ||
- stripos($this->useragent, $this->engineXiino) > -1)
+ //First, test for WebKit, then make sure it's either Symbian or S60.
+ if ($this->DetectWebkit() == $this->true)
{
- //Make sure it's not WebOS first
- if ($this->DetectPalmWebOS() == $this->true)
- return $this->false;
- else
- return $this->true;
+ if (stripos($this->useragent, $this->deviceSymbian) > -1 ||
+ stripos($this->useragent, $this->deviceS60) > -1)
+ {
+ return $this->true;
+ }
+ else
+ return $this->false;
}
else
return $this->false;
}
-
-
+
//**************************
- // Detects if the current browser is on a Palm device
- // running the new WebOS.
- function DetectPalmWebOS()
+ // Detects if the current device is any Symbian OS-based device,
+ // including older S60, Series 70, Series 80, Series 90, and UIQ,
+ // or other browsers running on these devices.
+ function DetectSymbianOS()
{
- if (stripos($this->useragent, $this->deviceWebOS) > -1)
+ if (stripos($this->useragent, $this->deviceSymbian) > -1 ||
+ stripos($this->useragent, $this->deviceS60) > -1 ||
+ stripos($this->useragent, $this->deviceS70) > -1 ||
+ stripos($this->useragent, $this->deviceS80) > -1 ||
+ stripos($this->useragent, $this->deviceS90) > -1)
return $this->true;
else
return $this->false;
}
- //**************************
- // Detects if the current browser is on an HP tablet running WebOS.
- function DetectWebOSTablet()
- {
- if ((stripos($this->useragent, $this->deviceWebOShp) > -1)
- && (stripos($this->useragent, $this->deviceTablet) > -1))
- return $this->true;
- else
- return $this->false;
- }
//**************************
- // Detects if the current browser is a
- // Garmin Nuvifone.
- function DetectGarminNuvifone()
+ // Detects if the current browser is on a PalmOS device.
+ function DetectPalmOS()
{
- if (stripos($this->useragent, $this->deviceNuvifone) > -1)
- return $this->true;
- else
- return $this->false;
- }
+ //Make sure it's not WebOS first
+ if ($this->DetectPalmWebOS() == $this->true)
+ return $this->false;
-
- //**************************
- // Check to see whether the device is any device
- // in the 'smartphone' category.
- function DetectSmartphone()
- {
- global $isIphone, $isAndroidPhone, $isTierIphone;
-
- if (($this->isIphone == $this->true)
- || ($this->isAndroidPhone == $this->true)
- || ($this->isTierIphone == $this->true)
- || ($this->DetectS60OssBrowser() == $this->true)
- || ($this->DetectSymbianOS() == $this->true)
- || ($this->DetectWindowsMobile() == $this->true)
- || ($this->DetectWindowsPhone7() == $this->true)
- || ($this->DetectBlackBerry() == $this->true)
- || ($this->DetectPalmWebOS() == $this->true)
- || ($this->DetectPalmOS() == $this->true)
- || ($this->DetectGarminNuvifone() == $this->true))
- return $this->true;
+ //Most devices nowadays report as 'Palm', but some older ones reported as Blazer or Xiino.
+ if (stripos($this->useragent, $this->devicePalm) > -1 ||
+ stripos($this->useragent, $this->engineBlazer) > -1 ||
+ stripos($this->useragent, $this->engineXiino) > -1)
+ return $this->true;
else
return $this->false;
}
//**************************
- // Detects whether the device is a Brew-powered device.
- function DetectBrewDevice()
+ // Detects if the current browser is on a Palm device
+ // running the new WebOS.
+ function DetectPalmWebOS()
{
- if (stripos($this->useragent, $this->deviceBrew) > -1)
+ if (stripos($this->useragent, $this->deviceWebOS) > -1)
return $this->true;
else
return $this->false;
}
//**************************
- // Detects the Danger Hiptop device.
- function DetectDangerHiptop()
+ // Detects if the current browser is on an HP tablet running WebOS.
+ function DetectWebOSTablet()
{
- if (stripos($this->useragent, $this->deviceDanger) > -1 ||
- stripos($this->useragent, $this->deviceHiptop) > -1)
+ if ((stripos($this->useragent, $this->deviceWebOShp) > -1)
+ && (stripos($this->useragent, $this->deviceTablet) > -1))
return $this->true;
else
return $this->false;
}
+
+
//**************************
// Detects if the current browser is Opera Mobile or Mini.
function DetectOperaMobile()
@@ -685,7 +693,7 @@ class uagent_info
{
if ((stripos($this->useragent, $this->engineOpera) > -1) &&
(stripos($this->useragent, $this->deviceAndroid) > -1) &&
- (stripos($this->useragent, $this->mobi) > -1))
+ (stripos($this->useragent, $this->mobi) > -1))
return $this->true;
else
return $this->false;
@@ -698,24 +706,13 @@ class uagent_info
{
if ((stripos($this->useragent, $this->engineOpera) > -1) &&
(stripos($this->useragent, $this->deviceAndroid) > -1) &&
- (stripos($this->useragent, $this->deviceTablet) > -1))
+ (stripos($this->useragent, $this->deviceTablet) > -1))
return $this->true;
else
return $this->false;
}
//**************************
- // Detects whether the device supports WAP or WML.
- function DetectWapWml()
- {
- if (stripos($this->httpaccept, $this->vndwap) > -1 ||
- stripos($this->httpaccept, $this->wml) > -1)
- return $this->true;
- else
- return $this->false;
- }
-
- //**************************
// Detects if the current device is an Amazon Kindle (eInk devices only).
// Note: For the Kindle Fire, use the normal Android methods.
function DetectKindle()
@@ -728,7 +725,7 @@ class uagent_info
}
//**************************
- // Detects if the current Amazon device is using the Silk Browser.
+ // Detects if the current Amazon device has turned on the Silk accelerated browsing feature.
// Note: Typically used by the the Kindle Fire.
function DetectAmazonSilk()
{
@@ -737,49 +734,105 @@ class uagent_info
else
return $this->false;
}
-
+
+ //**************************
+ // Detects if a Garmin Nuvifone device.
+ function DetectGarminNuvifone()
+ {
+ if (stripos($this->useragent, $this->deviceNuvifone) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
//**************************
- // The quick way to detect for a mobile device.
- // Will probably detect most recent/current mid-tier Feature Phones
- // as well as smartphone-class devices. Excludes Apple iPads and other modern tablets.
- function DetectMobileQuick()
+ // Detects a device running the Bada smartphone OS from Samsung.
+ function DetectBada()
{
- //Let's exclude tablets
- if ($this->isTierTablet == $this->true)
- return $this->false;
-
- //Most mobile browsing is done on smartphones
- if ($this->DetectSmartphone() == $this->true)
- return $this->true;
+ if (stripos($this->useragent, $this->deviceBada) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
- if (($this->DetectWapWml() == $this->true)
- || ($this->DetectBrewDevice() == $this->true)
- || ($this->DetectOperaMobile() == $this->true))
- return $this->true;
-
- if ((stripos($this->useragent, $this->engineNetfront) > -1)
- || (stripos($this->useragent, $this->engineUpBrowser) > -1)
- || (stripos($this->useragent, $this->engineOpenWeb) > -1))
+ //**************************
+ // Detects a device running the Tizen smartphone OS.
+ function DetectTizen()
+ {
+ if (stripos($this->useragent, $this->deviceTizen) > -1)
return $this->true;
-
- if (($this->DetectDangerHiptop() == $this->true)
- || ($this->DetectMidpCapable() == $this->true)
- || ($this->DetectMaemoTablet() == $this->true)
- || ($this->DetectArchos() == $this->true))
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects a device running the Meego OS.
+ function DetectMeego()
+ {
+ if (stripos($this->useragent, $this->deviceMeego) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects the Danger Hiptop device.
+ function DetectDangerHiptop()
+ {
+ if (stripos($this->useragent, $this->deviceDanger) > -1 ||
+ stripos($this->useragent, $this->deviceHiptop) > -1)
return $this->true;
+ else
+ return $this->false;
+ }
- if ((stripos($this->useragent, $this->devicePda) > -1) &&
- !(stripos($this->useragent, $this->disUpdate) > -1))
+ //**************************
+ // Detects if the current browser is a Sony Mylo device.
+ function DetectSonyMylo()
+ {
+ if ((stripos($this->useragent, $this->manuSony) > -1) &&
+ ((stripos($this->useragent, $this->qtembedded) > -1) ||
+ (stripos($this->useragent, $this->mylocom2) > -1)))
return $this->true;
- if (stripos($this->useragent, $this->mobile) > -1)
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is on one of the Maemo-based Nokia Internet Tablets.
+ function DetectMaemoTablet()
+ {
+ if (stripos($this->useragent, $this->maemo) > -1)
return $this->true;
+ //For Nokia N810, must be Linux + Tablet, or else it could be something else.
+ if ((stripos($this->useragent, $this->linux) > -1)
+ && (stripos($this->useragent, $this->deviceTablet) > -1)
+ && ($this->DetectWebOSTablet() == $this->false)
+ && ($this->DetectAndroid() == $this->false))
+ return $this->true;
+ else
+ return $this->false;
+ }
- //We also look for Kindle devices
- if ($this->DetectKindle() == $this->true ||
- $this->DetectAmazonSilk() == $this->true)
- return $this->true;
+ //**************************
+ // Detects if the current device is an Archos media player/Internet tablet.
+ function DetectArchos()
+ {
+ if (stripos($this->useragent, $this->deviceArchos) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+ //**************************
+ // Detects if the current device is an Internet-capable game console.
+ // Includes many handheld consoles.
+ function DetectGameConsole()
+ {
+ if (($this->DetectSonyPlaystation() == $this->true) ||
+ ($this->DetectNintendo() == $this->true) ||
+ ($this->DetectXbox() == $this->true))
+ return $this->true;
else
return $this->false;
}
@@ -795,6 +848,18 @@ class uagent_info
}
//**************************
+ // Detects if the current device is a handheld gaming device with
+ // a touchscreen and modern iPhone-class browser. Includes the Playstation Vita.
+ function DetectGamingHandheld()
+ {
+ if ((stripos($this->useragent, $this->devicePlaystation) > -1) &&
+ (stripos($this->useragent, $this->devicePlaystationVita) > -1))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
// Detects if the current device is a Nintendo game device.
function DetectNintendo()
{
@@ -815,76 +880,112 @@ class uagent_info
else
return $this->false;
}
-
+
//**************************
- // Detects if the current device is an Internet-capable game console.
- function DetectGameConsole()
+ // Detects whether the device is a Brew-powered device.
+ function DetectBrewDevice()
{
- if ($this->DetectSonyPlaystation() == $this->true)
- return $this->true;
- else if ($this->DetectNintendo() == $this->true)
- return $this->true;
- else if ($this->DetectXbox() == $this->true)
+ if (stripos($this->useragent, $this->deviceBrew) > -1)
return $this->true;
else
return $this->false;
}
//**************************
- // Detects if the current device supports MIDP, a mobile Java technology.
- function DetectMidpCapable()
+ // Detects whether the device supports WAP or WML.
+ function DetectWapWml()
{
- if (stripos($this->useragent, $this->deviceMidp) > -1 ||
- stripos($this->httpaccept, $this->deviceMidp) > -1)
+ if (stripos($this->httpaccept, $this->vndwap) > -1 ||
+ stripos($this->httpaccept, $this->wml) > -1)
return $this->true;
else
return $this->false;
}
//**************************
- // Detects if the current device is on one of the Maemo-based Nokia Internet Tablets.
- function DetectMaemoTablet()
+ // Detects if the current device supports MIDP, a mobile Java technology.
+ function DetectMidpCapable()
{
- if (stripos($this->useragent, $this->maemo) > -1)
- return $this->true;
- //For Nokia N810, must be Linux + Tablet, or else it could be something else.
- if ((stripos($this->useragent, $this->linux) > -1)
- && (stripos($this->useragent, $this->deviceTablet) > -1)
- && ($this->DetectWebOSTablet() == $this->false)
- && ($this->DetectAndroid() == $this->false))
+ if (stripos($this->useragent, $this->deviceMidp) > -1 ||
+ stripos($this->httpaccept, $this->deviceMidp) > -1)
return $this->true;
else
return $this->false;
}
+
+
+ //*****************************
+ // Device Classes
+ //*****************************
+
//**************************
- // Detects if the current device is an Archos media player/Internet tablet.
- function DetectArchos()
+ // Check to see whether the device is *any* 'smartphone'.
+ // Note: It's better to use DetectTierIphone() for modern touchscreen devices.
+ function DetectSmartphone()
{
- if (stripos($this->useragent, $this->deviceArchos) > -1)
+ //Exclude duplicates from TierIphone
+ if (($this->DetectTierIphone() == $this->true)
+ || ($this->DetectS60OssBrowser() == $this->true)
+ || ($this->DetectSymbianOS() == $this->true)
+ || ($this->DetectWindowsMobile() == $this->true)
+ || ($this->DetectBlackBerry() == $this->true)
+ || ($this->DetectPalmWebOS() == $this->true))
return $this->true;
else
return $this->false;
}
//**************************
- // Detects if the current browser is a Sony Mylo device.
- function DetectSonyMylo()
+ // The quick way to detect for a mobile device.
+ // Will probably detect most recent/current mid-tier Feature Phones
+ // as well as smartphone-class devices. Excludes Apple iPads and other modern tablets.
+ function DetectMobileQuick()
{
- if (stripos($this->useragent, $this->manuSony) > -1)
- {
- if ((stripos($this->useragent, $this->qtembedded) > -1) ||
- (stripos($this->useragent, $this->mylocom2) > -1))
- {
- return $this->true;
- }
- else
- return $this->false;
- }
+ //Let's exclude tablets
+ if ($this->isTierTablet == $this->true)
+ return $this->false;
+
+ if ($this->initCompleted == $this->true ||
+ $this->isMobilePhone == $this->true)
+ return $this->isMobilePhone;
+
+ //Most mobile browsing is done on smartphones
+ if ($this->DetectSmartphone() == $this->true)
+ return $this->true;
+
+ if (stripos($this->useragent, $this->mobile) > -1)
+ return $this->true;
+
+ if (($this->DetectWapWml() == $this->true)
+ || ($this->DetectBrewDevice() == $this->true)
+ || ($this->DetectOperaMobile() == $this->true))
+ return $this->true;
+
+ if ((stripos($this->useragent, $this->engineObigo) > -1)
+ || (stripos($this->useragent, $this->engineNetfront) > -1)
+ || (stripos($this->useragent, $this->engineUpBrowser) > -1)
+ || (stripos($this->useragent, $this->engineOpenWeb) > -1))
+ return $this->true;
+
+ if (($this->DetectDangerHiptop() == $this->true)
+ || ($this->DetectMidpCapable() == $this->true)
+ || ($this->DetectMaemoTablet() == $this->true)
+ || ($this->DetectArchos() == $this->true))
+ return $this->true;
+
+ if ((stripos($this->useragent, $this->devicePda) > -1) &&
+ !(stripos($this->useragent, $this->disUpdate) > -1))
+ return $this->true;
+
+ //We also look for Kindle devices
+ if ($this->DetectKindle() == $this->true ||
+ $this->DetectAmazonSilk() == $this->true)
+ return $this->true;
+
else
return $this->false;
}
-
//**************************
// The longer and more thorough way to detect for a mobile device.
@@ -909,9 +1010,9 @@ class uagent_info
return $this->true;
if (stripos($this->useragent, $this->manuericsson) > -1)
return $this->true;
-
if (stripos($this->useragent, $this->manuSamsung1) > -1)
return $this->true;
+
if (stripos($this->useragent, $this->svcDocomo) > -1)
return $this->true;
if (stripos($this->useragent, $this->svcKddi) > -1)
@@ -924,7 +1025,6 @@ class uagent_info
}
-
//*****************************
// For Mobile Web Site Design
//*****************************
@@ -936,6 +1036,10 @@ class uagent_info
// Includes iPad, Android (e.g., Xoom), BB Playbook, WebOS, etc.
function DetectTierTablet()
{
+ if ($this->initCompleted == $this->true ||
+ $this->isTierTablet == $this->true)
+ return $this->isTierTablet;
+
if (($this->DetectIpad() == $this->true)
|| ($this->DetectAndroidTablet() == $this->true)
|| ($this->DetectBlackBerryTablet() == $this->true)
@@ -950,22 +1054,28 @@ class uagent_info
// The quick way to detect for a tier of devices.
// This method detects for devices which can
// display iPhone-optimized web content.
- // Includes iPhone, iPod Touch, Android, Windows Phone 7, WebOS, etc.
+ // Includes iPhone, iPod Touch, Android, Windows Phone 7 and 8, BB10, WebOS, Playstation Vita, etc.
function DetectTierIphone()
{
- if (($this->isIphone == $this->true) ||
- ($this->isAndroidPhone == $this->true))
+ if ($this->initCompleted == $this->true ||
+ $this->isTierIphone == $this->true)
+ return $this->isTierIphone;
+
+ if (($this->DetectIphoneOrIpod() == $this->true)
+ || ($this->DetectAndroidPhone() == $this->true)
+ || ($this->DetectWindowsPhone() == $this->true)
+ || ($this->DetectBlackBerry10Phone() == $this->true)
+ || ($this->DetectPalmWebOS() == $this->true)
+ || ($this->DetectBada() == $this->true)
+ || ($this->DetectTizen() == $this->true)
+ || ($this->DetectGamingHandheld() == $this->true))
return $this->true;
-
+
+ //Note: BB10 phone is in the previous paragraph
if (($this->DetectBlackBerryWebKit() == $this->true) &&
- ($this->DetectBlackBerryTouch() == $this->true))
- return $this->true;
- if ($this->DetectWindowsPhone7() == $this->true)
- return $this->true;
- if ($this->DetectPalmWebOS() == $this->true)
- return $this->true;
- if ($this->DetectGarminNuvifone() == $this->true)
- return $this->true;
+ ($this->DetectBlackBerryTouch() == $this->true))
+ return $this->true;
+
else
return $this->false;
}
@@ -978,6 +1088,10 @@ class uagent_info
// Excludes all iPhone Tier devices.
function DetectTierRichCss()
{
+ if ($this->initCompleted == $this->true ||
+ $this->isTierRichCss == $this->true)
+ return $this->isTierRichCss;
+
if ($this->DetectMobileQuick() == $this->true)
{
//Exclude iPhone Tier and e-Ink Kindle devices
@@ -1015,10 +1129,14 @@ class uagent_info
// but excludes the iPhone and RichCSS Tier devices.
function DetectTierOtherPhones()
{
+ if ($this->initCompleted == $this->true ||
+ $this->isTierGenericMobile == $this->true)
+ return $this->isTierGenericMobile;
+
//Exclude devices in the other 2 categories
if (($this->DetectMobileLong() == $this->true)
- && ($this->DetectTierIphone() == $this->false)
- && ($this->DetectTierRichCss() == $this->false))
+ && ($this->DetectTierIphone() == $this->false)
+ && ($this->DetectTierRichCss() == $this->false))
return $this->true;
else
return $this->false;