public function execute() { $params = $this->extractRequestParams(); $config = $this->getConfig(); if (!$config->get('Feed')) { $this->dieUsage('Syndication feeds are not available', 'feed-unavailable'); } $feedClasses = $config->get('FeedClasses'); if (!isset($feedClasses[$params['feedformat']])) { $this->dieUsage('Invalid subscription feed type', 'feed-invalid'); } if ($params['showsizediff'] && $this->getConfig()->get('MiserMode')) { $this->dieUsage('Size difference is disabled in Miser Mode', 'sizediffdisabled'); } $msg = wfMessage('Contributions')->inContentLanguage()->text(); $feedTitle = $config->get('Sitename') . ' - ' . $msg . ' [' . $config->get('LanguageCode') . ']'; $feedUrl = SpecialPage::getTitleFor('Contributions', $params['user'])->getFullURL(); $target = $params['user'] == 'newbies' ? 'newbies' : Title::makeTitleSafe(NS_USER, $params['user'])->getText(); $feed = new $feedClasses[$params['feedformat']]($feedTitle, htmlspecialchars($msg), $feedUrl); $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'], 'newOnly' => $params['newonly'], 'showSizeDiff' => $params['showsizediff'])); $feedLimit = $this->getConfig()->get('FeedLimit'); if ($pager->getLimit() > $feedLimit) { $pager->setLimit($feedLimit); } $feedItems = array(); if ($pager->getNumRows() > 0) { $count = 0; $limit = $pager->getLimit(); foreach ($pager->mResult as $row) { // ContribsPager selects one more row for navigation, skip that row if (++$count > $limit) { break; } $item = $this->feedItem($row); if ($item !== null) { $feedItems[] = $item; } } } ApiFormatFeedWrapper::setResult($this->getResult(), $feed, $feedItems); }