2011-06-06 14:50:34 +00:00
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* Created on June 06, 2011
|
|
|
|
|
*
|
|
|
|
|
* Copyright © 2011 Sam Reed
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
* (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
|
|
|
*
|
|
|
|
|
* @file
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @ingroup API
|
|
|
|
|
*/
|
|
|
|
|
class ApiFeedContributions extends ApiBase {
|
|
|
|
|
|
|
|
|
|
public function __construct( $main, $action ) {
|
|
|
|
|
parent::__construct( $main, $action );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This module uses a custom feed wrapper printer.
|
2011-09-21 16:36:43 +00:00
|
|
|
*
|
|
|
|
|
* @return ApiFormatFeedWrapper
|
2011-06-06 14:50:34 +00:00
|
|
|
*/
|
|
|
|
|
public function getCustomPrinter() {
|
|
|
|
|
return new ApiFormatFeedWrapper( $this->getMain() );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function execute() {
|
Revert r107309, r113601, r113704, r113742, r113792, r113838, r113859, r113893, r113894, r113952, r114047, r114252, r114256, r114257. This reverts the remaining 'new' revisions in core.
All of these revisions are tagged with 'gerritmigration' and will be resubmitted into Gerrit after the Gerrit switchover. See also http://lists.wikimedia.org/pipermail/wikitech-l/2012-March/059124.html
2012-03-21 00:16:50 +00:00
|
|
|
$params = $this->extractRequestParams();
|
2011-06-06 14:50:34 +00:00
|
|
|
|
|
|
|
|
global $wgFeed, $wgFeedClasses, $wgSitename, $wgLanguageCode;
|
|
|
|
|
|
Revert r107309, r113601, r113704, r113742, r113792, r113838, r113859, r113893, r113894, r113952, r114047, r114252, r114256, r114257. This reverts the remaining 'new' revisions in core.
All of these revisions are tagged with 'gerritmigration' and will be resubmitted into Gerrit after the Gerrit switchover. See also http://lists.wikimedia.org/pipermail/wikitech-l/2012-March/059124.html
2012-03-21 00:16:50 +00:00
|
|
|
if( !$wgFeed ) {
|
|
|
|
|
$this->dieUsage( 'Syndication feeds are not available', 'feed-unavailable' );
|
|
|
|
|
}
|
2011-06-06 14:50:34 +00:00
|
|
|
|
Revert r107309, r113601, r113704, r113742, r113792, r113838, r113859, r113893, r113894, r113952, r114047, r114252, r114256, r114257. This reverts the remaining 'new' revisions in core.
All of these revisions are tagged with 'gerritmigration' and will be resubmitted into Gerrit after the Gerrit switchover. See also http://lists.wikimedia.org/pipermail/wikitech-l/2012-March/059124.html
2012-03-21 00:16:50 +00:00
|
|
|
if( !isset( $wgFeedClasses[ $params['feedformat'] ] ) ) {
|
|
|
|
|
$this->dieUsage( 'Invalid subscription feed type', 'feed-invalid' );
|
|
|
|
|
}
|
2011-06-06 14:50:34 +00:00
|
|
|
|
Revert r107309, r113601, r113704, r113742, r113792, r113838, r113859, r113893, r113894, r113952, r114047, r114252, r114256, r114257. This reverts the remaining 'new' revisions in core.
All of these revisions are tagged with 'gerritmigration' and will be resubmitted into Gerrit after the Gerrit switchover. See also http://lists.wikimedia.org/pipermail/wikitech-l/2012-March/059124.html
2012-03-21 00:16:50 +00:00
|
|
|
global $wgMiserMode;
|
|
|
|
|
if ( $params['showsizediff'] && $wgMiserMode ) {
|
|
|
|
|
$this->dieUsage( 'Size difference is disabled in Miser Mode', 'sizediffdisabled' );
|
|
|
|
|
}
|
2011-06-06 14:50:34 +00:00
|
|
|
|
Revert r107309, r113601, r113704, r113742, r113792, r113838, r113859, r113893, r113894, r113952, r114047, r114252, r114256, r114257. This reverts the remaining 'new' revisions in core.
All of these revisions are tagged with 'gerritmigration' and will be resubmitted into Gerrit after the Gerrit switchover. See also http://lists.wikimedia.org/pipermail/wikitech-l/2012-March/059124.html
2012-03-21 00:16:50 +00:00
|
|
|
$msg = wfMsgForContent( 'Contributions' );
|
|
|
|
|
$feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']';
|
|
|
|
|
$feedUrl = SpecialPage::getTitleFor( 'Contributions', $params['user'] )->getFullURL();
|
2011-06-06 14:50:34 +00:00
|
|
|
|
Revert r107309, r113601, r113704, r113742, r113792, r113838, r113859, r113893, r113894, r113952, r114047, r114252, r114256, r114257. This reverts the remaining 'new' revisions in core.
All of these revisions are tagged with 'gerritmigration' and will be resubmitted into Gerrit after the Gerrit switchover. See also http://lists.wikimedia.org/pipermail/wikitech-l/2012-March/059124.html
2012-03-21 00:16:50 +00:00
|
|
|
$target = $params['user'] == 'newbies'
|
|
|
|
|
? 'newbies'
|
|
|
|
|
: Title::makeTitleSafe( NS_USER, $params['user'] )->getText();
|
|
|
|
|
|
|
|
|
|
$feed = new $wgFeedClasses[$params['feedformat']] (
|
|
|
|
|
$feedTitle,
|
|
|
|
|
htmlspecialchars( $msg ),
|
|
|
|
|
$feedUrl
|
|
|
|
|
);
|
2011-06-06 14:50:34 +00:00
|
|
|
|
Revert r107309, r113601, r113704, r113742, r113792, r113838, r113859, r113893, r113894, r113952, r114047, r114252, r114256, r114257. This reverts the remaining 'new' revisions in core.
All of these revisions are tagged with 'gerritmigration' and will be resubmitted into Gerrit after the Gerrit switchover. See also http://lists.wikimedia.org/pipermail/wikitech-l/2012-March/059124.html
2012-03-21 00:16:50 +00:00
|
|
|
$pager = new ContribsPager( $this->getContext(), 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 );
|
|
|
|
|
}
|
2012-03-17 02:23:06 +00:00
|
|
|
}
|
Revert r107309, r113601, r113704, r113742, r113792, r113838, r113859, r113893, r113894, r113952, r114047, r114252, r114256, r114257. This reverts the remaining 'new' revisions in core.
All of these revisions are tagged with 'gerritmigration' and will be resubmitted into Gerrit after the Gerrit switchover. See also http://lists.wikimedia.org/pipermail/wikitech-l/2012-March/059124.html
2012-03-21 00:16:50 +00:00
|
|
|
|
|
|
|
|
ApiFormatFeedWrapper::setResult( $this->getResult(), $feed, $feedItems );
|
2011-06-06 14:50:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected function feedItem( $row ) {
|
2012-05-05 14:08:47 +00:00
|
|
|
$title = Title::makeTitle( intval( $row->page_namespace ), $row->page_title );
|
2011-06-06 14:50:34 +00:00
|
|
|
if( $title ) {
|
|
|
|
|
$date = $row->rev_timestamp;
|
|
|
|
|
$comments = $title->getTalkPage()->getFullURL();
|
2011-08-05 00:33:03 +00:00
|
|
|
$revision = Revision::newFromRow( $row );
|
2011-06-06 14:50:34 +00:00
|
|
|
|
|
|
|
|
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 '<p>' . htmlspecialchars( $revision->getUserText() ) . wfMsgForContent( 'colon-separator' ) .
|
|
|
|
|
htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
|
|
|
|
|
"</p>\n<hr />\n<div>" .
|
|
|
|
|
nl2br( htmlspecialchars( $revision->getText() ) ) . "</div>";
|
|
|
|
|
}
|
|
|
|
|
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(
|
2012-02-24 04:29:50 +00:00
|
|
|
ApiBase::PARAM_TYPE => 'namespace'
|
2011-06-06 14:50:34 +00:00
|
|
|
),
|
|
|
|
|
'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',
|
2011-06-06 15:34:14 +00:00
|
|
|
'showsizediff' => 'Show the size difference between revisions. Disabled in Miser Mode',
|
2011-06-06 14:50:34 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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' ),
|
2011-06-06 15:34:14 +00:00
|
|
|
array( 'code' => 'sizediffdisabled', 'info' => 'Size difference is disabled in Miser Mode' ),
|
2011-06-06 14:50:34 +00:00
|
|
|
) );
|
|
|
|
|
}
|
|
|
|
|
|
2011-08-17 22:24:21 +00:00
|
|
|
public function getExamples() {
|
2011-06-06 14:50:34 +00:00
|
|
|
return array(
|
|
|
|
|
'api.php?action=feedcontributions&user=Reedy',
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getVersion() {
|
|
|
|
|
return __CLASS__ . ': $Id$';
|
|
|
|
|
}
|
2011-10-27 00:46:17 +00:00
|
|
|
}
|