From e80638ccff7ac1cb2976902f4b8c54e45849e9e5 Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Wed, 22 Oct 2014 12:00:48 -0400 Subject: [PATCH] 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 --- includes/api/ApiFormatFeedWrapper.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) 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' ); -- 2.20.1