From: Brad Jorsch Date: Wed, 22 Oct 2014 16:00:48 +0000 (-0400) Subject: API: Fix ApiFormatFeedWrapper X-Git-Tag: 1.31.0-rc.0~13521^2 X-Git-Url: http://git.cyclocoop.org/%22.%24info%5B?a=commitdiff_plain;h=e80638ccff7ac1cb2976902f4b8c54e45849e9e5;p=lhc%2Fweb%2Fwiklou.git API: Fix ApiFormatFeedWrapper With recent changes to the API, directly outputting text from execute() in ApiFormatBase subclasses doesn't work anymore. Adjust ApiFormatFeedWrapper for this new situation, and also handle headers in initPrinter() where that belongs. Bug: 72359 Change-Id: I4e4a2386858da6d87169deabaca763eeeacefbe9 --- diff --git a/includes/api/ApiFormatFeedWrapper.php b/includes/api/ApiFormatFeedWrapper.php index 92600067f1..3f53ed43d3 100644 --- a/includes/api/ApiFormatFeedWrapper.php +++ b/includes/api/ApiFormatFeedWrapper.php @@ -77,6 +77,27 @@ class ApiFormatFeedWrapper extends ApiFormatBase { return false; } + /** + * This class expects the result data to be in a custom format set by self::setResult() + * $result['_feed'] - an instance of one of the $wgFeedClasses classes + * $result['_feeditems'] - an array of FeedItem instances + */ + public function initPrinter( $unused = false ) { + parent::initPrinter( $unused ); + + if ( $this->isDisabled() ) { + return; + } + + $data = $this->getResultData(); + if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) { + $data['_feed']->httpHeaders(); + } else { + // Error has occurred, print something useful + ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' ); + } + } + /** * This class expects the result data to be in a custom format set by self::setResult() * $result['_feed'] - an instance of one of the $wgFeedClasses classes @@ -88,11 +109,14 @@ class ApiFormatFeedWrapper extends ApiFormatBase { $feed = $data['_feed']; $items = $data['_feeditems']; + // execute() needs to pass strings to $this->printText, not produce output itself. + ob_start(); $feed->outHeader(); foreach ( $items as & $item ) { $feed->outItem( $item ); } $feed->outFooter(); + $this->printText( ob_get_clean() ); } else { // Error has occurred, print something useful ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );