From ca32f08966f1b51fcb19460f0996bb0c4048e6fe Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sat, 3 Dec 2011 13:29:22 +0100 Subject: Update to MediaWiki 1.18.0 * also update ArchLinux skin to chagnes in MonoBook * Use only css to hide our menu bar when printing --- includes/api/ApiFeedContributions.php | 207 ++++++++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 includes/api/ApiFeedContributions.php (limited to 'includes/api/ApiFeedContributions.php') diff --git a/includes/api/ApiFeedContributions.php b/includes/api/ApiFeedContributions.php new file mode 100644 index 00000000..c06b71af --- /dev/null +++ b/includes/api/ApiFeedContributions.php @@ -0,0 +1,207 @@ +getMain() ); + } + + public function execute() { + $params = $this->extractRequestParams(); + + global $wgFeed, $wgFeedClasses, $wgSitename, $wgLanguageCode; + + if( !$wgFeed ) { + $this->dieUsage( 'Syndication feeds are not available', 'feed-unavailable' ); + } + + if( !isset( $wgFeedClasses[ $params['feedformat'] ] ) ) { + $this->dieUsage( 'Invalid subscription feed type', 'feed-invalid' ); + } + + global $wgMiserMode; + if ( $params['showsizediff'] && $wgMiserMode ) { + $this->dieUsage( 'Size difference is disabled in Miser Mode', 'sizediffdisabled' ); + } + + $msg = wfMsgForContent( 'Contributions' ); + $feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']'; + $feedUrl = SpecialPage::getTitleFor( 'Contributions', $params['user'] )->getFullURL(); + + $target = $params['user'] == 'newbies' + ? 'newbies' + : Title::makeTitleSafe( NS_USER, $params['user'] )->getText(); + + $feed = new $wgFeedClasses[$params['feedformat']] ( + $feedTitle, + htmlspecialchars( $msg ), + $feedUrl + ); + + $pager = new ContribsPager( array( + 'target' => $target, + 'namespace' => $params['namespace'], + 'year' => $params['year'], + 'month' => $params['month'], + 'tagFilter' => $params['tagfilter'], + 'deletedOnly' => $params['deletedonly'], + 'topOnly' => $params['toponly'], + 'showSizeDiff' => $params['showsizediff'], + ) ); + + $feedItems = array(); + if( $pager->getNumRows() > 0 ) { + foreach ( $pager->mResult as $row ) { + $feedItems[] = $this->feedItem( $row ); + } + } + + ApiFormatFeedWrapper::setResult( $this->getResult(), $feed, $feedItems ); + } + + protected function feedItem( $row ) { + $title = Title::MakeTitle( intval( $row->page_namespace ), $row->page_title ); + if( $title ) { + $date = $row->rev_timestamp; + $comments = $title->getTalkPage()->getFullURL(); + $revision = Revision::newFromRow( $row); + + return new FeedItem( + $title->getPrefixedText(), + $this->feedItemDesc( $revision ), + $title->getFullURL(), + $date, + $this->feedItemAuthor( $revision ), + $comments + ); + } else { + return null; + } + } + + /** + * @param $revision Revision + * @return string + */ + protected function feedItemAuthor( $revision ) { + return $revision->getUserText(); + } + + /** + * @param $revision Revision + * @return string + */ + protected function feedItemDesc( $revision ) { + if( $revision ) { + return '

' . htmlspecialchars( $revision->getUserText() ) . wfMsgForContent( 'colon-separator' ) . + htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) . + "

\n
\n
" . + nl2br( htmlspecialchars( $revision->getText() ) ) . "
"; + } + return ''; + } + + public function getAllowedParams() { + global $wgFeedClasses; + $feedFormatNames = array_keys( $wgFeedClasses ); + return array ( + 'feedformat' => array( + ApiBase::PARAM_DFLT => 'rss', + ApiBase::PARAM_TYPE => $feedFormatNames + ), + 'user' => array( + ApiBase::PARAM_TYPE => 'user', + ApiBase::PARAM_REQUIRED => true, + ), + 'namespace' => array( + ApiBase::PARAM_TYPE => 'namespace', + ApiBase::PARAM_ISMULTI => true + ), + 'year' => array( + ApiBase::PARAM_TYPE => 'integer' + ), + 'month' => array( + ApiBase::PARAM_TYPE => 'integer' + ), + 'tagfilter' => array( + ApiBase::PARAM_ISMULTI => true, + ApiBase::PARAM_TYPE => array_values( ChangeTags::listDefinedTags() ), + ApiBase::PARAM_DFLT => '', + ), + 'deletedonly' => false, + 'toponly' => false, + 'showsizediff' => false, + ); + } + + public function getParamDescription() { + return array( + 'feedformat' => 'The format of the feed', + 'user' => 'What users to get the contributions for', + 'namespace' => 'What namespace to filter the contributions by', + 'year' => 'From year (and earlier)', + 'month' => 'From month (and earlier)', + 'tagfilter' => 'Filter contributions that have these tags', + 'deletedonly' => 'Show only deleted contributions', + 'toponly' => 'Only show edits that are latest revisions', + 'showsizediff' => 'Show the size difference between revisions. Disabled in Miser Mode', + ); + } + + public function getDescription() { + return 'Returns a user contributions feed'; + } + + public function getPossibleErrors() { + return array_merge( parent::getPossibleErrors(), array( + array( 'code' => 'feed-unavailable', 'info' => 'Syndication feeds are not available' ), + array( 'code' => 'feed-invalid', 'info' => 'Invalid subscription feed type' ), + array( 'code' => 'sizediffdisabled', 'info' => 'Size difference is disabled in Miser Mode' ), + ) ); + } + + protected function getExamples() { + return array( + 'api.php?action=feedcontributions&user=Reedy', + ); + } + + public function getVersion() { + return __CLASS__ . ': $Id: ApiFeedContributions.php 95607 2011-08-27 19:28:13Z hashar $'; + } +} \ No newline at end of file -- cgit v1.2.3-54-g00ecf