/**
  * Render the special page
  * @param string $par parameter submitted as subpage
  */
 function execute($par)
 {
     // Anons don't get a watchlist
     $this->requireLogin('watchlistanontext');
     $user = $this->getUser();
     $out = $this->getOutput();
     $out->setPageTitle($this->msg('gather-editfeed-title'));
     $req = $this->getRequest();
     $this->filter = $req->getVal('filter', 'all');
     $this->id = $req->getInt('collection-id', 0);
     $out->addHtml($this->getHeader($user, $this->id, $this->getPageTitle()->getLocalUrl()));
     $out->addModuleStyles(array('mediawiki.ui.input', 'ext.gather.styles', 'ext.gather.menu.icon'));
     $out->setProperty('unstyledContent', true);
     $this->showRecentChangesHeader();
     $user = $this->getUser();
     $id = (int) $this->id;
     $feed = models\CollectionFeed::newFromDatabase($user, $id, $this->filter);
     $feedView = new views\CollectionFeed($feed, $this->getLanguage());
     $feedView->render($out);
 }
 /**
  * @param ResultWrapper $res
  * @return CollectionFeed a collection
  */
 public static function newFromResultWrapper(ResultWrapper $res)
 {
     $feed = new CollectionFeed();
     foreach ($res as $row) {
         $user = User::newFromId($row->rc_user);
         $title = Title::makeTitle($row->rc_namespace, $row->rc_title);
         $comment = self::formatComment($row->rc_comment, $title);
         $ts = new MWTimestamp($row->rc_timestamp);
         $revId = $row->rc_this_oldid;
         $bytes = $row->rc_new_len - $row->rc_old_len;
         $isMinor = $row->rc_minor != 0;
         if (!$row->rc_deleted) {
             $item = new CollectionFeedItem($title, $user, $comment, $ts, $revId, $isMinor, $bytes);
             if ($row->rc_user == 0) {
                 $item->setUsername(IP::prettifyIP($row->rc_user_text));
             }
             $feed->add($item);
         }
     }
     return $feed;
 }