Переглянути джерело

ZF-11557: fix notices when matching iPad and Mac Safari

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@24283 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 14 роки тому
батько
коміт
f24fb49920

+ 13 - 4
library/Zend/Http/UserAgent/AbstractDevice.php

@@ -555,7 +555,11 @@ abstract class Zend_Http_UserAgent_AbstractDevice
                 $result['device']           = strtolower($result['compatibility_flag']);
                 $result['device_os_token']  = 'iPhone OS';
                 $result['browser_language'] = trim($comment[3]);
-                $result['browser_version']  = $result['others']['detail'][1][2];
+                if (isset($result['others']['detail'][1])) {
+                    $result['browser_version']  = $result['others']['detail'][1][2];
+                } elseif (count($result['others']['detail'])) {
+                    $result['browser_version']  = $result['others']['detail'][0][2];
+                }
                 if (!empty($result['others']['detail'][2])) {
                     $result['firmware'] = $result['others']['detail'][2][2];
                 }
@@ -570,7 +574,7 @@ abstract class Zend_Http_UserAgent_AbstractDevice
         if (isset($result['others'])) {
             if ($result['others']['detail'][0][1] == 'AppleWebKit') {
                 $result['browser_engine'] = 'AppleWebKit';
-                if ($result['others']['detail'][1][1] == 'Version') {
+                if (isset($result['others']['detail'][1]) && $result['others']['detail'][1][1] == 'Version') {
                     $result['browser_version'] = $result['others']['detail'][1][2];
                 } else {
                     $result['browser_version'] = $result['others']['detail'][count($result['others']['detail']) - 1][2];
@@ -582,8 +586,13 @@ abstract class Zend_Http_UserAgent_AbstractDevice
                 $last = $result['others']['detail'][count($result['others']['detail']) - 1][1];
 
                 if (empty($result['others']['detail'][2][1]) || $result['others']['detail'][2][1] == 'Safari') {
-                    $result['browser_name']    = ($result['others']['detail'][1][1] && $result['others']['detail'][1][1] != 'Version' ? $result['others']['detail'][1][1] : 'Safari');
-                    $result['browser_version'] = ($result['others']['detail'][1][2] ? $result['others']['detail'][1][2] : $result['others']['detail'][0][2]);
+                    if (isset($result['others']['detail'][1])) {
+                        $result['browser_name']    = ($result['others']['detail'][1][1] && $result['others']['detail'][1][1] != 'Version' ? $result['others']['detail'][1][1] : 'Safari');
+                        $result['browser_version'] = ($result['others']['detail'][1][2] ? $result['others']['detail'][1][2] : $result['others']['detail'][0][2]);
+                    } else {
+                        $result['browser_name']    = ($result['others']['detail'][0][1] && $result['others']['detail'][0][1] != 'Version' ? $result['others']['detail'][0][1] : 'Safari');
+                        $result['browser_version'] = $result['others']['detail'][0][2];
+                    }
                 } else {
                     $result['browser_name']    = $result['others']['detail'][2][1];
                     $result['browser_version'] = $result['others']['detail'][2][2];

+ 20 - 0
tests/Zend/Http/UserAgent/AbstractDeviceTest.php

@@ -10116,4 +10116,24 @@ audio/vnd.qcelp, application/xhtml+xml'
         $userAgent = 'CSE HTML Validator Lite Online (http://online.htmlvalidator.com/php/onlinevallite.php)';
         $this->assertTrue(Zend_Http_UserAgent_Validator::match($userAgent,array('HTTP_USER_AGENT'=>$userAgent)));
     }
+
+    /**
+     * @group ZF-11557
+     */
+    public function testMatchingIpadUserAgentShouldNotResultInNotices()
+    {
+        $userAgent = 'Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; de-de) AppleWebKit/533.17.9 (KHTML, like Gecko)';
+        $capabilities = Zend_Http_UserAgent_AbstractDevice::extractFromUserAgent($userAgent);
+        $this->assertEquals('AppleWebKit', $capabilities['browser_name']);
+    }
+
+    /**
+     * @group ZF-11557
+     */
+    public function testMatchingMacSafariUserAgentShouldNotResultInNotices()
+    {
+        $userAgent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; de-de) AppleWebKit/533.18.1 (KHTML, like Gecko)';
+        $capabilities = Zend_Http_UserAgent_AbstractDevice::extractFromUserAgent($userAgent);
+        $this->assertEquals('AppleWebKit', $capabilities['browser_name']);
+    }
 }