public function execute() { $params = $this->extractRequestParams(); global $wgFeed, $wgFeedClasses, $wgSitename, $wgLanguageCode; if (!$wgFeed) { $this->dieUsage('Syndication feeds are not available', 'feed-unavailable'); } if (!isset($wgFeedClasses[$params['feedformat']])) { $this->dieUsage('Invalid subscription feed type', 'feed-invalid'); } global $wgMiserMode; if ($params['showsizediff'] && $wgMiserMode) { $this->dieUsage('Size difference is disabled in Miser Mode', 'sizediffdisabled'); } $msg = wfMessage('Contributions')->inContentLanguage()->text(); $feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']'; $feedUrl = SpecialPage::getTitleFor('Contributions', $params['user'])->getFullURL(); $target = $params['user'] == 'newbies' ? 'newbies' : Title::makeTitleSafe(NS_USER, $params['user'])->getText(); $feed = new $wgFeedClasses[$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'], 'showSizeDiff' => $params['showsizediff'])); $feedItems = array(); if ($pager->getNumRows() > 0) { foreach ($pager->mResult as $row) { $feedItems[] = $this->feedItem($row); } } ApiFormatFeedWrapper::setResult($this->getResult(), $feed, $feedItems); }
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); }
public function execute($par) { $this->setHeaders(); $this->outputHeader(); $out = $this->getOutput(); $out->addModuleStyles('mediawiki.special'); $this->opts = array(); $request = $this->getRequest(); if ($par !== null) { $target = $par; } else { $target = $request->getVal('target'); } // check for radiobox if ($request->getVal('contribs') == 'newbie') { $target = 'newbies'; $this->opts['contribs'] = 'newbie'; } elseif ($par === 'newbies') { // b/c for WMF $target = 'newbies'; $this->opts['contribs'] = 'newbie'; } else { $this->opts['contribs'] = 'user'; } $this->opts['deletedOnly'] = $request->getBool('deletedOnly'); if (!strlen($target)) { $out->addHTML($this->getForm()); return; } $user = $this->getUser(); $this->opts['limit'] = $request->getInt('limit', $user->getOption('rclimit')); $this->opts['target'] = $target; $this->opts['topOnly'] = $request->getBool('topOnly'); $nt = Title::makeTitleSafe(NS_USER, $target); if (!$nt) { $out->addHTML($this->getForm()); return; } $userObj = User::newFromName($nt->getText(), false); if (!$userObj) { $out->addHTML($this->getForm()); return; } $id = $userObj->getID(); if ($this->opts['contribs'] != 'newbie') { $target = $nt->getText(); $out->addSubtitle($this->contributionsSub($userObj)); $out->setHTMLTitle($this->msg('pagetitle', $this->msg('contributions-title', $target)->plain())); $this->getSkin()->setRelevantUser($userObj); } else { $out->addSubtitle($this->msg('sp-contributions-newbies-sub')); $out->setHTMLTitle($this->msg('pagetitle', $this->msg('sp-contributions-newbies-title')->plain())); } if (($ns = $request->getVal('namespace', null)) !== null && $ns !== '') { $this->opts['namespace'] = intval($ns); } else { $this->opts['namespace'] = ''; } $this->opts['associated'] = $request->getBool('associated'); $this->opts['nsInvert'] = (bool) $request->getVal('nsInvert'); $this->opts['tagfilter'] = (string) $request->getVal('tagfilter'); // Allows reverts to have the bot flag in recent changes. It is just here to // be passed in the form at the top of the page if ($user->isAllowed('markbotedits') && $request->getBool('bot')) { $this->opts['bot'] = '1'; } $skip = $request->getText('offset') || $request->getText('dir') == 'prev'; # Offset overrides year/month selection if ($skip) { $this->opts['year'] = ''; $this->opts['month'] = ''; } else { $this->opts['year'] = $request->getIntOrNull('year'); $this->opts['month'] = $request->getIntOrNull('month'); } $feedType = $request->getVal('feed'); if ($feedType) { // Maintain some level of backwards compatability // If people request feeds using the old parameters, redirect to API $apiParams = array('action' => 'feedcontributions', 'feedformat' => $feedType, 'user' => $target); if ($this->opts['topOnly']) { $apiParams['toponly'] = true; } if ($this->opts['deletedOnly']) { $apiParams['deletedonly'] = true; } if ($this->opts['tagfilter'] !== '') { $apiParams['tagfilter'] = $this->opts['tagfilter']; } if ($this->opts['namespace'] !== '') { $apiParams['namespace'] = $this->opts['namespace']; } if ($this->opts['year'] !== null) { $apiParams['year'] = $this->opts['year']; } if ($this->opts['month'] !== null) { $apiParams['month'] = $this->opts['month']; } $url = wfScript('api') . '?' . wfArrayToCGI($apiParams); $out->redirect($url, '301'); return; } // Add RSS/atom links $this->addFeedLinks(array('action' => 'feedcontributions', 'user' => $target)); if (wfRunHooks('SpecialContributionsBeforeMainOutput', array($id))) { $out->addHTML($this->getForm()); $pager = new ContribsPager($this->getContext(), array('target' => $target, 'contribs' => $this->opts['contribs'], 'namespace' => $this->opts['namespace'], 'year' => $this->opts['year'], 'month' => $this->opts['month'], 'deletedOnly' => $this->opts['deletedOnly'], 'topOnly' => $this->opts['topOnly'], 'nsInvert' => $this->opts['nsInvert'], 'associated' => $this->opts['associated'])); if (!$pager->getNumRows()) { $out->addWikiMsg('nocontribs', $target); } else { # Show a message about slave lag, if applicable $lag = wfGetLB()->safeGetLag($pager->getDatabase()); if ($lag > 0) { $out->showLagWarning($lag); } $out->addHTML('<p>' . $pager->getNavigationBar() . '</p>' . $pager->getBody() . '<p>' . $pager->getNavigationBar() . '</p>'); } $out->preventClickjacking($pager->getPreventClickjacking()); # Show the appropriate "footer" message - WHOIS tools, etc. if ($this->opts['contribs'] == 'newbie') { $message = 'sp-contributions-footer-newbies'; } elseif (IP::isIPAddress($target)) { $message = 'sp-contributions-footer-anon'; } elseif ($userObj->isAnon()) { // No message for non-existing users $message = ''; } else { $message = 'sp-contributions-footer'; } if ($message) { if (!$this->msg($message, $target)->isDisabled()) { $out->wrapWikiMsg("<div class='mw-contributions-footer'>\n\$1\n</div>", array($message, $target)); } } } }
/** * Special page "user contributions". * Shows a list of the contributions of a user. * * @return none * @param $par String: (optional) user name of the user for which to show the contributions */ function wfSpecialContributions($par = null) { global $wgUser, $wgOut, $wgLang, $wgRequest; $options = array(); if (isset($par) && $par == 'newbies') { $target = 'newbies'; $options['contribs'] = 'newbie'; } elseif (isset($par)) { $target = $par; } else { $target = $wgRequest->getVal('target'); } // check for radiobox if ($wgRequest->getVal('contribs') == 'newbie') { $target = 'newbies'; $options['contribs'] = 'newbie'; } $wgOut->addHTML("<div class='section_text' style='font-size: .9em;'>"); if (!strlen($target)) { $wgOut->addHTML(contributionsForm('')); return; } $options['limit'] = $wgRequest->getInt('limit', 50); $options['target'] = $target; $nt = Title::makeTitleSafe(NS_USER, $target); if (!$nt) { $wgOut->addHTML(contributionsForm('')); return; } $id = User::idFromName($nt->getText()); if ($target != 'newbies') { $target = $nt->getText(); $wgOut->setSubtitle(contributionsSub($nt, $id)); } else { $wgOut->setSubtitle(wfMsgHtml('sp-contributions-newbies-sub')); } if (($ns = $wgRequest->getVal('namespace', null)) !== null && $ns !== '') { $options['namespace'] = intval($ns); } else { $options['namespace'] = ''; } if ($wgUser->isAllowed('markbotedit') && $wgRequest->getBool('bot')) { $options['bot'] = '1'; } $skip = $wgRequest->getText('offset') || $wgRequest->getText('dir') == 'prev'; # Offset overrides year/month selection if (($month = $wgRequest->getIntOrNull('month')) !== null && $month !== -1) { $options['month'] = intval($month); } else { $options['month'] = ''; } if (($year = $wgRequest->getIntOrNull('year')) !== null) { $options['year'] = intval($year); } else { if ($options['month']) { $thisMonth = intval(gmdate('n')); $thisYear = intval(gmdate('Y')); if (intval($options['month']) > $thisMonth) { $thisYear--; } $options['year'] = $thisYear; } else { $options['year'] = ''; } } wfRunHooks('SpecialContributionsBeforeMainOutput', array($id)); $wgOut->addHTML(contributionsForm($options)); $wgOut->addHTML("<div style='font-size:95%; margin-bottom:10px;'>" . contributionsSub($nt, $id) . "</div>"); # Show original selected options, don't apply them so as to allow paging $_GET['year'] = ''; // hack for Pager $_GET['month'] = ''; // hack for Pager if ($skip) { $options['year'] = ''; $options['month'] = ''; } $pager = new ContribsPager($target, $options['namespace'], $options['year'], $options['month']); if (!$pager->getNumRows()) { $wgOut->addWikiMsg('nocontribs'); return; } # Show a message about slave lag, if applicable if (($lag = $pager->getDatabase()->getLag()) > 0) { $wgOut->showLagWarning($lag); } $wgOut->addHTML('<p>' . $pager->getNavigationBar() . '</p>' . $pager->getBody() . '<p>' . $pager->getNavigationBar() . '</p>'); # If there were contributions, and it was a valid user or IP, show # the appropriate "footer" message - WHOIS tools, etc. if ($target != 'newbies') { $message = IP::isIPAddress($target) ? 'sp-contributions-footer-anon' : 'sp-contributions-footer'; $text = wfMsgNoTrans($message, $target); if (!wfEmptyMsg($message, $text) && $text != '-') { $wgOut->addHtml('<div class="mw-contributions-footer">'); $wgOut->addWikiText($text); $wgOut->addHtml('</div>'); } } $wgOut->addHTML("</div>"); }
/** * Output a subscription feed listing recent edits to this page. * @param string $type */ protected function feed($type) { global $wgRequest, $wgFeed, $wgFeedClasses, $wgFeedLimit; if (!$wgFeed) { global $wgOut; $wgOut->addWikiMsg('feed-unavailable'); return; } if (!isset($wgFeedClasses[$type])) { global $wgOut; $wgOut->addWikiMsg('feed-invalid'); return; } $feed = new $wgFeedClasses[$type]($this->feedTitle(), wfMsgExt('tagline', 'parsemag'), $this->getTitle()->getFullUrl() . "/" . urlencode($this->opts['target'])); // Already valid title $nt = Title::makeTitleSafe(NS_USER, $this->opts['target']); $target = $this->opts['target'] == 'newbies' ? 'newbies' : $nt->getText(); $pager = new ContribsPager($target, $this->opts['namespace'], $this->opts['year'], $this->opts['month'], $this->opts['tagfilter']); $pager->mLimit = min($this->opts['limit'], $wgFeedLimit); $feed->outHeader(); if ($pager->getNumRows() > 0) { while ($row = $pager->mResult->fetchObject()) { $feed->outItem($this->feedItem($row)); } } $feed->outFooter(); }
public static function contributionsLineEndingProcess(ContribsPager &$contribsPager, &$ret, $row) { wfProfileIn(__METHOD__); $rev = new Revision($row); $page = $rev->getTitle(); $page->resetArticleId($row->rev_page); $wfMsgOptsBase = self::getMessageOptions(null, $row); $isThread = $wfMsgOptsBase['isThread']; $isNew = $wfMsgOptsBase['isNew']; // Don't show useless link to people who cannot hide revisions $del = Linker::getRevDeleteLink($contribsPager->getUser(), $rev, $page); if ($del !== '') { $del .= ' '; } else { $del = ''; } // VOLDEV-40: remove html messages $ret = $del; $ret .= Linker::linkKnown($page, $contribsPager->getLanguage()->userTimeAndDate($row->rev_timestamp, $contribsPager->getUser()), [], ['oldid' => $row->rev_id]) . ' ('; if ($isNew) { $ret .= $contribsPager->msg('diff')->escaped(); } else { $ret .= Linker::linkKnown($page, $contribsPager->msg('diff')->escaped(), [], ['diff' => 'prev', 'oldid' => $row->rev_id]); } $wallMessage = new WallMessage($page); $threadId = $wallMessage->getMessagePageId(); $threadTitle = Title::newFromText($threadId, NS_USER_WALL_MESSAGE); $ret .= ' | ' . Linker::linkKnown($threadTitle, $contribsPager->msg('hist')->escaped(), [], ['action' => 'history']) . ') '; if ($isThread && $isNew) { $ret .= ChangesList::flag('newpage') . ' '; } if (MWNamespace::getSubject($row->page_namespace) === NS_WIKIA_FORUM_BOARD && empty($wfMsgOptsBase['articleTitleVal'])) { $wfMsgOptsBase['articleTitleTxt'] = $contribsPager->msg('forum-recentchanges-deleted-reply-title')->text(); } $prefix = MWNamespace::getSubject($row->page_namespace) === NS_WIKIA_FORUM_BOARD ? 'forum' : 'wall'; $ret .= $contribsPager->msg($prefix . '-contributions-line')->params($wfMsgOptsBase['articleTitle'])->rawParams(htmlspecialchars($wfMsgOptsBase['articleTitleTxt']))->params($wfMsgOptsBase['wallTitleTxt'], $wfMsgOptsBase['wallPageName'])->parse(); if (!$isNew) { $summary = $rev->getComment(); if (empty($summary)) { $msg = Linker::commentBlock($contribsPager->msg(static::getMessagePrefix($row->page_namespace) . '-edit')->inContentLanguage()->text()); } else { $msg = Linker::revComment($rev, false, true); } $ret .= ' ' . $contribsPager->getLanguage()->getDirMark() . $msg; } wfProfileOut(__METHOD__); return true; }
/** * * Returns the html for the box at the * top of NFD Guardian which contains * information about the current * article being voted on. * */ function getArticleInfoBox() { global $wgOut; //first find out who the author was $articleInfo = $this->getArticleInfo(); if (intval($articleInfo->fe_user) > 0) { $u = User::newFromId($articleInfo->fe_user); $userLink = $u->getUserPage()->getInternalURL(); $userName = $u->getName(); $cp = new ContribsPager(ContextSource::getContext(), array($userName)); $uEdits = $cp->getNumRows(); } else { $u = User::newFromName($articleInfo->fe_user_text); $userLink = "/User:"******"") { $t = Title::newFromText($nfdReason['article']); if ($t) { $nfdLongReason .= " with [[" . $t->getText() . "]]"; } } //finally check the number of discussion items for this //article. We ask for confirmation for articles //with a lot of discussion items. $t = Title::newFromID($this->mResult->nfd_page); if ($t) { $a = new Article($t); // $pageHistory = new PageHistory($a); // $pager = new PageHistoryPager( $pageHistory ); // $edits = $pager->getNumRows(); $pageHistory = new HistoryPage($a); $items = $pageHistory->fetchRevisions(100000, 0, 1); $edits = $items->numRows(); $discussionTitle = Title::newFromText($t->getText(), NS_TALK); if ($discussionTitle) { $discussionArticle = new Article($discussionTitle); // $pageHistory = new PageHistory($discussionArticle); // $pager = new PageHistoryPager( $pageHistory ); // $discussion = $pager->getNumRows(); $pageHistory = new HistoryPage($discussionArticle); $items = $pageHistory->fetchRevisions(100000, 0, 1); $discussion = $items->numRows(); } else { $discussion = 0; } } $articleInfo = $this->getArticleInfo(); $tmpl = new EasyTemplate(dirname(__FILE__)); $tmpl->set_vars(array('age' => wfTimeAgo($this->mResult->nfd_fe_timestamp), 'authorUrl' => $userLink, 'authorName' => $userName, 'views' => $articleInfo->page_counter, 'nfd' => $wgOut->parse($nfdLongReason), 'edits' => $edits, 'userEdits' => $uEdits, 'nfdVotes' => $this->getTotalVotes($this->mResult->nfd_id), 'discussion' => $discussion)); $html = $tmpl->execute('NFDinfo.tmpl.php'); return $html; }
/** * Special page "user contributions". * Shows a list of the contributions of a user. * * @return none * @param $par String: (optional) user name of the user for which to show the contributions */ function wfSpecialContributions($par = null) { global $wgUser, $wgOut, $wgLang, $wgRequest; $options = array(); if (isset($par) && $par == 'newbies') { $target = 'newbies'; $options['contribs'] = 'newbie'; } elseif (isset($par)) { $target = $par; } else { $target = $wgRequest->getVal('target'); } // check for radiobox if ($wgRequest->getVal('contribs') == 'newbie') { $target = 'newbies'; $options['contribs'] = 'newbie'; } if (!strlen($target)) { $wgOut->addHTML(contributionsForm('')); return; } $options['limit'] = $wgRequest->getInt('limit', 50); $options['target'] = $target; $nt = Title::makeTitleSafe(NS_USER, $target); if (!$nt) { $wgOut->addHTML(contributionsForm('')); return; } $id = User::idFromName($nt->getText()); if ($target != 'newbies') { $target = $nt->getText(); $wgOut->setSubtitle(contributionsSub($nt, $id)); } else { $wgOut->setSubtitle(wfMsgHtml('sp-contributions-newbies-sub')); } if (($ns = $wgRequest->getVal('namespace', null)) !== null && $ns !== '') { $options['namespace'] = intval($ns); } else { $options['namespace'] = ''; } /* BizzWiki */ if ($ns == null || $ns == "") { $ns = 0; } if ($wgUser->isAllowed('rollback', $ns) && $wgRequest->getBool('bot')) { $options['bot'] = '1'; } wfRunHooks('SpecialContributionsBeforeMainOutput', $id); $wgOut->addHTML(contributionsForm($options)); $pager = new ContribsPager($target, $options['namespace']); if (!$pager->getNumRows()) { $wgOut->addWikiText(wfMsg('nocontribs')); return; } $wgOut->addHTML('<p>' . $pager->getNavigationBar() . '</p>' . $pager->getBody() . '<p>' . $pager->getNavigationBar() . '</p>'); # If there were contributions, and it was a valid user or IP, show # the appropriate "footer" message - WHOIS tools, etc. if ($target != 'newbies') { $message = IP::isIPAddress($target) ? 'sp-contributions-footer-anon' : 'sp-contributions-footer'; $text = wfMsg($message, $target); if (!wfEmptyMsg($message, $text) && $text != '-') { $wgOut->addHtml('<div class="mw-contributions-footer">'); $wgOut->addWikiText($text); $wgOut->addHtml('</div>'); } } }