diff options
Diffstat (limited to 'core/API/ResponseBuilder.php')
-rw-r--r-- | core/API/ResponseBuilder.php | 83 |
1 files changed, 38 insertions, 45 deletions
diff --git a/core/API/ResponseBuilder.php b/core/API/ResponseBuilder.php index a632163108..1d94dc9888 100644 --- a/core/API/ResponseBuilder.php +++ b/core/API/ResponseBuilder.php @@ -19,7 +19,7 @@ class Piwik_API_ResponseBuilder private $request = null; private $outputFormat = null; - public function __construct($request, $outputFormat) + public function __construct($outputFormat, $request = array()) { $this->request = $request; $this->outputFormat = $outputFormat; @@ -49,11 +49,17 @@ class Piwik_API_ResponseBuilder * * @throws Exception If an object/resource is returned, if any of conversion fails, etc. * - * @param mixed The initial returned value, before post process + * @param mixed The initial returned value, before post process. If set to null, success response is returned. * @return mixed Usually a string, but can still be a PHP data structure if the format requested is 'original' */ - public function getResponse($value) + public function getResponse($value = null) { + // when null or void is returned from the api call, we handle it as a successful operation + if(!isset($value)) + { + return $this->handleSuccess(); + } + // If the returned value is an object DataTable we // apply the set of generic filters if asked in the URL // and we render the DataTable according to the format specified in the URL @@ -73,12 +79,6 @@ class Piwik_API_ResponseBuilder return $this->handleArray($value); } - // when null or void is returned from the api call, we handle it as a successful operation - if(!isset($value)) - { - return $this->handleSuccess(); - } - // original data structure requested, we return without process if( $this->outputFormat == 'original' ) { @@ -104,41 +104,30 @@ class Piwik_API_ResponseBuilder */ public function getResponseException(Exception $e) { - $message = htmlentities($e->getMessage(), ENT_COMPAT, "UTF-8"); - switch($this->outputFormat) + $format = strtolower($this->outputFormat); + + if( $format == 'original' ) { - case 'original': - throw $e; - break; - case 'xml': - @header("Content-Type: text/xml;charset=utf-8"); - $return = - "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" . - "<result>\n". - "\t<error message=\"".$message."\" />\n". - "</result>"; - break; - case 'json': - @header( "Content-type: application/json" ); - // we remove the \n from the resulting string as this is not allowed in json - $message = str_replace("\n","",$message); - $return = '{"result":"error", "message":"'.$message.'"}'; - break; - case 'php': - $return = array('result' => 'error', 'message' => $message); - if($this->caseRendererPHPSerialize()) - { - $return = serialize($return); - } - break; - case 'html': - $return = nl2br($message); - break; - default: - $return = 'Error: '.$message; - break; + throw $e; } - return $return; + + try + { + $renderer = Piwik_DataTable_Renderer::factory($format); + + } catch (Exception $e) { + + return "Error: " . $e->getMessage(); + } + + $renderer->setException($e); + + if($format == 'php') + { + $renderer->setSerialize($this->caseRendererPHPSerialize()); + } + + return $renderer->renderException(); } /** @@ -202,6 +191,10 @@ class Piwik_API_ResponseBuilder { $renderer->setTableId($this->request['method']); } + else if($format == 'csv') + { + $renderer->setConvertToUnicode( Piwik_Common::getRequestVar('convertToUnicode', true, 'int') ); + } return $renderer->render(); } @@ -226,7 +219,7 @@ class Piwik_API_ResponseBuilder "</result>"; break; case 'json': - @header( "Content-type: application/json" ); + @header( "Content-Type: application/json" ); $return = '{"result":"success", "message":"'.$message.'"}'; break; case 'php': @@ -238,7 +231,7 @@ class Piwik_API_ResponseBuilder break; case 'csv': - header("Content-type: application/vnd.ms-excel"); + header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=piwik-report-export.csv"); $return = "message\n".$message; break; @@ -296,5 +289,5 @@ class Piwik_API_ResponseBuilder $dataTable->addRowsFromSimpleArray($array); return $this->getRenderedDataTable($dataTable); } - } + } } |