private $mIsHtml, $mFormat, $mUnescapeAmps, $mHelp;
private $mBuffer, $mDisabled = false;
private $mIsWrappedHtml = false;
+ private $mHttpStatus = false;
protected $mForceDefaultParams = false;
/**
}
}
+ /**
+ * Set the HTTP status code to be used for the response
+ * @since 1.29
+ * @param int $code
+ */
+ public function setHttpStatus( $code ) {
+ if ( $this->mDisabled ) {
+ return;
+ }
+
+ if ( $this->getIsHtml() ) {
+ $this->mHttpStatus = $code;
+ } else {
+ $this->getMain()->getRequest()->response()->statusHeader( $code );
+ }
+ }
+
/**
* Initialize the printer function and prepare the output headers.
* @param bool $unused Always false since 1.25
ApiHelp::fixHelpLinks( $header )
)
);
+
+ if ( $this->mHttpStatus && $this->mHttpStatus !== 200 ) {
+ $out->addHTML(
+ Html::rawElement( 'div', [ 'class' => 'api-pretty-header api-pretty-status' ],
+ $this->msg(
+ 'api-format-prettyprint-status',
+ $this->mHttpStatus,
+ HttpStatus::getMessage( $this->mHttpStatus )
+ )->parse()
+ )
+ );
+ }
}
if ( Hooks::run( 'ApiFormatHighlight', [ $context, $result, $mime, $format ] ) ) {
$time = microtime( true ) - $this->getConfig()->get( 'RequestTime' );
$json = FormatJson::encode(
[
+ 'status' => (int)( $this->mHttpStatus ?: 200 ),
+ 'statustext' => HttpStatus::getMessage( $this->mHttpStatus ?: 200 ),
'html' => $out->getHTML(),
'modules' => array_values( array_unique( array_merge(
$out->getModules(),
$out->getModuleScripts(),
$out->getModuleStyles()
) ) ),
+ 'continue' => $this->getResult()->getResultData( 'continue' ),
'time' => round( $time * 1000 ),
],
false, FormatJson::ALL_OK
return 'https://www.mediawiki.org/wiki/API:Data_formats';
}
- /************************************************************************//**
- * @name Deprecated
- * @{
- */
-
- /**
- * Specify whether or not sequences like " should be unescaped
- * to " . This should only be set to true for the help message
- * when rendered in the default (xmlfm) format. This is a temporary
- * special-case fix that should be removed once the help has been
- * reworked to use a fully HTML interface.
- *
- * @deprecated since 1.25
- * @param bool $b Whether or not ampersands should be escaped.
- */
- public function setUnescapeAmps( $b ) {
- wfDeprecated( __METHOD__, '1.25' );
- $this->mUnescapeAmps = $b;
- }
-
- /**
- * Whether this formatter can format the help message in a nice way.
- * By default, this returns the same as getIsHtml().
- * When action=help is set explicitly, the help will always be shown
- * @deprecated since 1.25
- * @return bool
- */
- public function getWantsHelp() {
- wfDeprecated( __METHOD__, '1.25' );
- return $this->getIsHtml();
- }
-
- /**
- * Sets whether the pretty-printer should format *bold*
- * @deprecated since 1.25
- * @param bool $help
- */
- public function setHelp( $help = true ) {
- wfDeprecated( __METHOD__, '1.25' );
- $this->mHelp = $help;
- }
-
- /**
- * Pretty-print various elements in HTML format, such as xml tags and
- * URLs. This method also escapes characters like <
- * @deprecated since 1.25
- * @param string $text
- * @return string
- */
- protected function formatHTML( $text ) {
- wfDeprecated( __METHOD__, '1.25' );
-
- // Escape everything first for full coverage
- $text = htmlspecialchars( $text );
-
- if ( $this->mFormat === 'XML' ) {
- // encode all comments or tags as safe blue strings
- $text = str_replace( '<', '<span style="color:blue;"><', $text );
- $text = str_replace( '>', '></span>', $text );
- }
-
- // identify requests to api.php
- $text = preg_replace( '#^(\s*)(api\.php\?[^ <\n\t]+)$#m', '\1<a href="\2">\2</a>', $text );
- if ( $this->mHelp ) {
- // make lines inside * bold
- $text = preg_replace( '#^(\s*)(\*[^<>\n]+\*)(\s*)$#m', '$1<b>$2</b>$3', $text );
- }
-
- // Armor links (bug 61362)
- $masked = [];
- $text = preg_replace_callback( '#<a .*?</a>#', function ( $matches ) use ( &$masked ) {
- $sha = sha1( $matches[0] );
- $masked[$sha] = $matches[0];
- return "<$sha>";
- }, $text );
-
- // identify URLs
- $protos = wfUrlProtocolsWithoutProtRel();
- // This regex hacks around bug 13218 (" included in the URL)
- $text = preg_replace(
- "#(((?i)$protos).*?)(")?([ \\'\"<>\n]|<|>|")#",
- '<a href="\\1">\\1</a>\\3\\4',
- $text
- );
-
- // Unarmor links
- $text = preg_replace_callback( '#<([0-9a-f]{40})>#', function ( $matches ) use ( &$masked ) {
- $sha = $matches[1];
- return isset( $masked[$sha] ) ? $masked[$sha] : $matches[0];
- }, $text );
-
- /**
- * Temporary fix for bad links in help messages. As a special case,
- * XML-escaped metachars are de-escaped one level in the help message
- * for legibility. Should be removed once we have completed a fully-HTML
- * version of the help message.
- */
- if ( $this->mUnescapeAmps ) {
- $text = preg_replace( '/&(amp|quot|lt|gt);/', '&\1;', $text );
- }
-
- return $text;
- }
-
- /**
- * @see ApiBase::getDescription
- * @deprecated since 1.25
- */
- public function getDescription() {
- return $this->getIsHtml() ? ' (pretty-print in HTML)' : '';
- }
-
- /**
- * Set the flag to buffer the result instead of printing it.
- * @deprecated since 1.25, output is always buffered
- * @param bool $value
- */
- public function setBufferResult( $value ) {
- }
-
- /**
- * Formerly indicated whether the formatter needed metadata from ApiResult.
- *
- * ApiResult previously (indirectly) used this to decide whether to add
- * metadata or to ignore calls to metadata-setting methods, which
- * unfortunately made several methods that should have been static have to
- * be dynamic instead. Now ApiResult always stores metadata and formatters
- * are required to ignore it or filter it out.
- *
- * @deprecated since 1.25
- * @return bool Always true
- */
- public function getNeedsRawData() {
- wfDeprecated( __METHOD__, '1.25' );
- return true;
- }
-
- /**@}*/
}
/**