From d8d4297a226c1a6e34dcab36e92b0ac9c5e43bc2 Mon Sep 17 00:00:00 2001 From: rvelices Date: Fri, 4 Apr 2014 04:20:34 +0000 Subject: bug 3058: update mdetect for windows 8 mobile etc ... git-svn-id: http://piwigo.org/svn/trunk@28068 68402e56-0260-453c-a942-63ccdbb3a9ee --- include/mdetect.php | 656 +++++++++++++++++++++++++++++++--------------------- 1 file 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 @@ 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,23 +706,12 @@ 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. @@ -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; } @@ -794,6 +847,18 @@ class uagent_info return $this->false; } + //************************** + // 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; -- cgit v1.2.3