Przeglądaj źródła

Fix for #190 - Zend_Http_UserAgent, get_browser value check is_array()

Frank 12 lat temu
rodzic
commit
0b08a35a46

+ 26 - 19
library/Zend/Http/UserAgent/Features/Adapter/Browscap.php

@@ -35,14 +35,14 @@ require_once 'Zend/Http/UserAgent/Features/Adapter.php';
  * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  * @license    http://framework.zend.com/license/new-bsd     New BSD License
  */
-class Zend_Http_UserAgent_Features_Adapter_Browscap implements Zend_Http_UserAgent_Features_Adapter
+class Zend_Http_UserAgent_Features_Adapter_Browscap
+    implements Zend_Http_UserAgent_Features_Adapter
 {
     /**
      * Constructor
      *
      * Validate that we have browscap support available.
-     * 
-     * @return void
+     *
      * @throws Zend_Http_UserAgent_Features_Exception
      */
     public function __construct()
@@ -61,30 +61,37 @@ class Zend_Http_UserAgent_Features_Adapter_Browscap implements Zend_Http_UserAge
      * Get features from request
      *
      * @param  array $request $_SERVER variable
-     * @param  array $config ignored; included only to satisfy parent class
+     * @param  array $config  ignored; included only to satisfy parent class
      * @return array
      */
     public static function getFromRequest($request, array $config)
     {
         $browscap = get_browser($request['http_user_agent'], true);
         $features = array();
-        foreach ($browscap as $key => $value) {
-            // For a few keys, we need to munge a bit for the device object
-            switch ($key) {
-                case 'browser':
-                    $features['mobile_browser'] = $value;
-                    break;
-                case 'version':
-                    $features['mobile_browser_version'] = $value;
-                    break;
-                case 'platform':
-                    $features['device_os'] = $value;
-                    break;
-                default:
-                    $features[$key] = $value;
-                    break;
+
+        if (is_array($browscap)) {
+            foreach ($browscap as $key => $value) {
+                // For a few keys, we need to munge a bit for the device object
+                switch ($key) {
+                    case 'browser':
+                        $features['mobile_browser'] = $value;
+                        break;
+
+                    case 'version':
+                        $features['mobile_browser_version'] = $value;
+                        break;
+
+                    case 'platform':
+                        $features['device_os'] = $value;
+                        break;
+
+                    default:
+                        $features[$key] = $value;
+                        break;
+                }
             }
         }
+
         return $features;
     }
 }

+ 18 - 10
tests/Zend/Http/UserAgentTest.php

@@ -120,7 +120,7 @@ class Zend_Http_UserAgentTest extends PHPUnit_Framework_TestCase
 
         $userAgent = new Zend_Http_UserAgent($config);
         $device    = $userAgent->getDevice();
-        $this->assertType('Zend_Http_UserAgent_Mobile', $device);
+        $this->assertTrue($device instanceof Zend_Http_UserAgent_Mobile);
         $this->assertEquals('mobile', $userAgent->getBrowserType());
         $this->assertEquals('iPhone', $device->getFeature('mobile_browser'));
         $this->assertRegexp('/iPhone/', $device->getFeature('device_os'));
@@ -134,7 +134,9 @@ class Zend_Http_UserAgentTest extends PHPUnit_Framework_TestCase
         );
         $oUserAgent      = new Zend_Http_UserAgent($config);
         $browser         = $oUserAgent->getUserAgent();
-        $this->assertType('Zend_Http_UserAgent_Storage_NonPersistent', $oUserAgent->getStorage($browser));
+        $this->assertTrue(
+            $oUserAgent->getStorage($browser) instanceof Zend_Http_UserAgent_Storage_NonPersistent
+        );
     }
 
     public function testUserAgentFeatureAdapter()
@@ -322,7 +324,9 @@ class Zend_Http_UserAgentTest extends PHPUnit_Framework_TestCase
         $ua = new Zend_Http_UserAgent();
         $ua->setPluginLoader('device', 'Zend_Http_TestAsset_TestPluginLoader');
         $loader = $ua->getPluginLoader('device');
-        $this->assertType('Zend_Http_TestAsset_TestPluginLoader', $loader);
+        $this->assertTrue(
+            $loader instanceof Zend_Http_TestAsset_TestPluginLoader
+        );
     }
 
     public function testSpecifyingInvalidPluginLoaderClassNameRaisesException()
@@ -374,9 +378,13 @@ class Zend_Http_UserAgentTest extends PHPUnit_Framework_TestCase
         );
         $ua = new Zend_Http_UserAgent($this->config);
         $deviceLoader = $ua->getPluginLoader('device');
-        $this->assertType('Zend_Http_TestAsset_TestPluginLoader', $deviceLoader);
+        $this->assertTrue(
+            $deviceLoader instanceof Zend_Http_TestAsset_TestPluginLoader
+        );
         $storageLoader = $ua->getPluginLoader('storage');
-        $this->assertType('Zend_Http_TestAsset_TestPluginLoader', $storageLoader);
+        $this->assertTrue(
+            $storageLoader instanceof Zend_Http_TestAsset_TestPluginLoader
+        );
         $this->assertNotSame($deviceLoader, $storageLoader);
     }
 
@@ -390,7 +398,7 @@ class Zend_Http_UserAgentTest extends PHPUnit_Framework_TestCase
         $this->config['user_agent'] = 'desktop';
         $ua     = new Zend_Http_UserAgent($this->config);
         $device = $ua->getDevice();
-        $this->assertType('Zend_Http_TestAsset_DesktopDevice', $device);
+        $this->assertTrue($device instanceof Zend_Http_TestAsset_DesktopDevice);
     }
 
     public function testAllowsSpecifyingCustomDeviceViaPrefixPath()
@@ -404,7 +412,7 @@ class Zend_Http_UserAgentTest extends PHPUnit_Framework_TestCase
         $this->config['user_agent'] = 'desktop';
         $ua     = new Zend_Http_UserAgent($this->config);
         $device = $ua->getDevice();
-        $this->assertType('Zend_Http_TestAsset_Device_Desktop', $device);
+        $this->assertTrue($device instanceof Zend_Http_TestAsset_Device_Desktop);
     }
 
     public function testShouldRaiseExceptionOnInvalidDeviceClass()
@@ -457,9 +465,9 @@ class Zend_Http_UserAgentTest extends PHPUnit_Framework_TestCase
         $this->config['user_agent'] = 'desktop';
         $ua         = new Zend_Http_UserAgent($this->config);
         $storage    = $ua->getStorage();
-        $this->assertType('Zend_Http_TestAsset_PopulatedStorage', $storage);
+        $this->assertTrue($storage instanceof Zend_Http_TestAsset_PopulatedStorage);
         $device = $ua->getDevice();
-        $this->assertType('Zend_Http_TestAsset_DesktopDevice', $device);
+        $this->assertTrue($device instanceof Zend_Http_TestAsset_DesktopDevice);
     }
 
     public function testCanClearStorage()
@@ -475,7 +483,7 @@ class Zend_Http_UserAgentTest extends PHPUnit_Framework_TestCase
         // Prime storage by retrieving device
         $device     = $ua->getDevice();
         $storage    = $ua->getStorage();
-        $this->assertType('Zend_Http_UserAgent_Storage', $storage);
+        $this->assertTrue($storage instanceof Zend_Http_UserAgent_Storage);
         $this->assertFalse($storage->isEmpty());
         $ua->clearStorage();
         $this->assertTrue($storage->isEmpty());