/** * Format the rows (generated by SpecialRecentchanges or SpecialRecentchangeslinked) * as an RSS/Atom feed. */ public function execute() { $config = $this->getConfig(); $this->params = $this->extractRequestParams(); if (!$config->get('Feed')) { $this->dieUsage('Syndication feeds are not available', 'feed-unavailable'); } $feedClasses = $config->get('FeedClasses'); if (!isset($feedClasses[$this->params['feedformat']])) { $this->dieUsage('Invalid subscription feed type', 'feed-invalid'); } $this->getMain()->setCacheMode('public'); if (!$this->getMain()->getParameter('smaxage')) { // bug 63249: This page gets hit a lot, cache at least 15 seconds. $this->getMain()->setCacheMaxAge(15); } $feedFormat = $this->params['feedformat']; $specialClass = $this->params['target'] !== null ? 'SpecialRecentchangeslinked' : 'SpecialRecentchanges'; $formatter = $this->getFeedObject($feedFormat, $specialClass); // Parameters are passed via the request in the context… :( $context = new DerivativeContext($this); $context->setRequest(new DerivativeRequest($this->getRequest(), $this->params, $this->getRequest()->wasPosted())); // The row-getting functionality should be factored out of ChangesListSpecialPage too… $rc = new $specialClass(); $rc->setContext($context); $rows = $rc->getRows(); $feedItems = $rows ? ChangesFeed::buildItems($rows) : array(); ApiFormatFeedWrapper::setResult($this->getResult(), $formatter, $feedItems); }
/** * Format the rows (generated by SpecialRecentchanges or SpecialRecentchangeslinked) * as an RSS/Atom feed. */ public function execute() { global $wgFeed, $wgFeedClasses; $this->params = $this->extractRequestParams(); if (!$wgFeed) { $this->dieUsage('Syndication feeds are not available', 'feed-unavailable'); } if (!isset($wgFeedClasses[$this->params['feedformat']])) { $this->dieUsage('Invalid subscription feed type', 'feed-invalid'); } $this->getMain()->setCacheMode('public'); if (!$this->getMain()->getParameter('smaxage')) { // bug 63249: This page gets hit a lot, cache at least 15 seconds. $this->getMain()->setCacheMaxAge(15); } $feedFormat = $this->params['feedformat']; $specialClass = $this->params['target'] !== null ? 'SpecialRecentchangeslinked' : 'SpecialRecentchanges'; $formatter = $this->getFeedObject($feedFormat, $specialClass); // Everything is passed implicitly via $wgRequest… :( // The row-getting functionality should maybe be factored out of ChangesListSpecialPage too… $rc = new $specialClass(); $rows = $rc->getRows(); $feedItems = $rows ? ChangesFeed::buildItems($rows) : array(); ApiFormatFeedWrapper::setResult($this->getResult(), $formatter, $feedItems); }