Browse Source

ZF-8444 AjaxContext actionhelper only calls isXmlHttpRequest on req object if available

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@24130 44c647ce-9c0f-0410-b52a-842ac1e357ba
freak 14 years ago
parent
commit
b9bf194c0c

+ 4 - 1
library/Zend/Controller/Action/Helper/AjaxContext.php

@@ -68,7 +68,10 @@ class Zend_Controller_Action_Helper_AjaxContext extends Zend_Controller_Action_H
     {
         $this->_currentContext = null;
 
-        if (!$this->getRequest()->isXmlHttpRequest()) {
+        $request = $this->getRequest();
+        if (!method_exists($request, 'isXmlHttpRequest') ||
+            !$this->getRequest()->isXmlHttpRequest())
+        {
             return;
         }
 

+ 43 - 0
tests/Zend/Controller/Action/Helper/AjaxContextTest.php

@@ -32,6 +32,7 @@ require_once 'Zend/Controller/Action.php';
 require_once 'Zend/Controller/Action/HelperBroker.php';
 require_once 'Zend/Controller/Front.php';
 require_once 'Zend/Controller/Request/Http.php';
+require_once 'Zend/Controller/Request/Simple.php';
 require_once 'Zend/Controller/Response/Cli.php';
 require_once 'Zend/Layout.php';
 require_once 'Zend/View.php';
@@ -197,6 +198,48 @@ class Zend_Controller_Action_Helper_AjaxContextTest extends PHPUnit_Framework_Te
         $this->helper->initContext();
         $this->assertNull($this->helper->getCurrentContext());
     }
+
+    /**
+     * @author Fix sponsored by Enrise - www.enrise.com
+     *
+     * @group ZF-8444
+     */
+    public function testAjaxContextIsRequestDependent()
+    {
+        $request = new ZendTest_Controller_Request_SimpleMock_AjaxTest();
+        $helper = new Zend_Controller_Action_Helper_AjaxContext();
+
+        $helper->setActionController(
+                    new Zend_Controller_Action_Helper_AjaxContextTestController(
+                        $request,
+                        $this->response,
+                        array()
+                    )
+        );
+
+        try {
+            $helper->initContext();
+            $this->assertTrue(true);
+        } catch(Exception $e) {
+            if($e->getMessage() == 'test testAjaxContextIsRequestDependent failed' ) {
+                $this->fail();
+            } else {
+                throw $e;
+            }
+        }
+    }
+}
+
+class ZendTest_Controller_Request_SimpleMock_AjaxTest
+    extends Zend_Controller_Request_Simple
+{
+         public function __call($method, $args) {
+             if($method == 'isXmlHttpRequest') {
+                 throw new exception('test testAjaxContextIsRequestDependent failed');
+             }
+
+             return parent::__call($method, $args);
+         }
 }
 
 class Zend_Controller_Action_Helper_AjaxContextTestController extends Zend_Controller_Action