From 013a4fde7babd6eacc67874021fb43be9b085a0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thierry=20Fran=C3=A7ois?= Date: Fri, 29 Aug 2014 10:00:51 +0300 Subject: [PATCH] FIX #85 Add Content-Type negotiation --- .../code/GridFieldBulkUpload_Request.php | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/bulkUpload/code/GridFieldBulkUpload_Request.php b/bulkUpload/code/GridFieldBulkUpload_Request.php index abad363..10f0df3 100644 --- a/bulkUpload/code/GridFieldBulkUpload_Request.php +++ b/bulkUpload/code/GridFieldBulkUpload_Request.php @@ -120,8 +120,9 @@ class GridFieldBulkUpload_Request extends RequestHandler $responseData = $this->newRecordJSTemplateData($record, $uploadResponse); $response = new SS_HTTPResponse(Convert::raw2json(array($responseData))); - $response->addHeader('Content-Type', 'text/json'); - return $response; + $this->contentTypeNegotiation($response); + + return $response; } @@ -260,7 +261,8 @@ class GridFieldBulkUpload_Request extends RequestHandler } $response = new SS_HTTPResponse(Convert::raw2json($return)); - $response->addHeader('Content-Type', 'text/json'); + $this->contentTypeNegotiation($response); + return $response; } @@ -285,4 +287,19 @@ class GridFieldBulkUpload_Request extends RequestHandler return Controller::join_links($this->gridField->Link(), '/bulkupload/', $action); } + /** + * Sets response 'Content-Type' depending on browser capabilities + * e.g. IE needs text/plain for iframe transport + * https://github.com/blueimp/jQuery-File-Upload/issues/1795 + * @param SS_HTTPResponse $response HTTP Response to set content-type on + */ + protected function contentTypeNegotiation(&$response) + { + if (isset($_SERVER['HTTP_ACCEPT']) && (strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false)) + { + $response->addHeader('Content-Type', 'application/json'); + }else{ + $response->addHeader('Content-Type', 'text/plain'); + } + } }