From c998888fe71248512b40c3d6213c019619a4a33e Mon Sep 17 00:00:00 2001
From: Simon Males <sime@sime.net.au>
Date: Fri, 20 Sep 2013 18:20:47 +0800
Subject: [PATCH] Do not assume CONTENT_TYPE is available.

In some server environments notably the CLI server, _SERVER['CONTENT_TYPE'] is not available.
In these cases, fall back to the HTTP_CONTENT_TYPE header.

Refs #GH-1661
---
 .../Controller/Component/RequestHandlerComponent.php   |  3 +++
 .../Component/RequestHandlerComponentTest.php          | 10 ++++++++++
 2 files changed, 13 insertions(+)

diff --git a/lib/Cake/Controller/Component/RequestHandlerComponent.php b/lib/Cake/Controller/Component/RequestHandlerComponent.php
index fd90a6d9e..da8c2243f 100644
--- a/lib/Cake/Controller/Component/RequestHandlerComponent.php
+++ b/lib/Cake/Controller/Component/RequestHandlerComponent.php
@@ -518,6 +518,9 @@ class RequestHandlerComponent extends Component {
 		}
 
 		list($contentType) = explode(';', env('CONTENT_TYPE'));
+		if ($contentType === '') {
+			list($contentType) = explode(';', CakeRequest::header('CONTENT_TYPE'));
+		}
 		if (!$type) {
 			return $this->mapType($contentType);
 		}
diff --git a/lib/Cake/Test/Case/Controller/Component/RequestHandlerComponentTest.php b/lib/Cake/Test/Case/Controller/Component/RequestHandlerComponentTest.php
index 63ced76f3..8ceb14849 100644
--- a/lib/Cake/Test/Case/Controller/Component/RequestHandlerComponentTest.php
+++ b/lib/Cake/Test/Case/Controller/Component/RequestHandlerComponentTest.php
@@ -603,6 +603,16 @@ class RequestHandlerComponentTest extends CakeTestCase {
 		$result = $this->RequestHandler->requestedWith(array('rss', 'atom'));
 		$this->assertFalse($result);
 
+		$_SERVER['REQUEST_METHOD'] = 'POST';
+		unset($_SERVER['CONTENT_TYPE']);
+		$_SERVER['HTTP_CONTENT_TYPE'] = 'application/json';
+
+		$result = $this->RequestHandler->requestedWith(array('json', 'xml'));
+		$this->assertEquals('json', $result);
+
+		$result = $this->RequestHandler->requestedWith(array('rss', 'atom'));
+		$this->assertFalse($result);
+
 		$_SERVER['HTTP_ACCEPT'] = 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain,image/png,*/*';
 		$this->assertTrue($this->RequestHandler->isXml());
 		$this->assertFalse($this->RequestHandler->isAtom());