From: Derk-Jan Hartman Date: Fri, 4 Sep 2015 19:13:21 +0000 (+0200) Subject: Add option to ApiFormatRaw to generate a HTTP errorcode X-Git-Tag: 1.31.0-rc.0~10138^2 X-Git-Url: https://git.cyclocoop.org//%22?a=commitdiff_plain;h=483e9d3cdbe45e0214e7da56b89f299c06348f90;p=lhc%2Fweb%2Fwiklou.git Add option to ApiFormatRaw to generate a HTTP errorcode New method setFailWithHTTPError() allows you to configure ApiFormatRaw to return HTTP status code 400 in case it encounters (any) error. This is useful for when the output format is intended to be read by a user-agent which has no other method to be notified of errors. Change-Id: I11b2824c6725143cff5b4c56194f94c44ce451c0 --- diff --git a/includes/api/ApiFormatRaw.php b/includes/api/ApiFormatRaw.php index 7bb2453d2c..9dbd4a553f 100644 --- a/includes/api/ApiFormatRaw.php +++ b/includes/api/ApiFormatRaw.php @@ -31,14 +31,20 @@ class ApiFormatRaw extends ApiFormatBase { private $errorFallback; + private $mFailWithHTTPError = false; + /** * @param ApiMain $main - * @param ApiFormatBase $errorFallback Object to fall back on for errors + * @param ApiFormatBase |null $errorFallback Object to fall back on for errors */ - public function __construct( ApiMain $main, ApiFormatBase $errorFallback ) { + public function __construct( ApiMain $main, ApiFormatBase $errorFallback = null ) { parent::__construct( $main, 'raw' ); - $this->errorFallback = $errorFallback; + if ( $errorFallback === null ) { + $this->errorFallback = $main->createPrinterByName( $main->getParameter( 'format' ) ); + } else { + $this->errorFallback = $errorFallback; + } } public function getMimeType() { @@ -59,6 +65,9 @@ class ApiFormatRaw extends ApiFormatBase { $data = $this->getResult()->getResultData(); if ( isset( $data['error'] ) ) { $this->errorFallback->initPrinter( $unused ); + if ( $this->mFailWithHTTPError ) { + $this->getMain()->getRequest()->response()->statusHeader( 400 ); + } } else { parent::initPrinter( $unused ); } @@ -85,4 +94,17 @@ class ApiFormatRaw extends ApiFormatBase { } $this->printText( $data['text'] ); } + + /** + * Output HTTP error code 400 when if an error is encountered + * + * The purpose is for output formats where the user-agent will + * not be able to interpret the validity of the content in any + * other way. For example subtitle files read by browser video players. + * + * @param bool $fail + */ + public function setFailWithHTTPError( $fail ) { + $this->mFailWithHTTPError = $fail; + } }