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);
 }