/** * Special page "user contributions". * Shows a list of the contributions of a user. * * @return none * @param string $par (optional) user name of the user for which to show the contributions */ function wfSpecialContributions($par = null) { global $wgUser, $wgOut, $wgLang, $wgContLang, $wgRequest, $wgTitle, $wgScript; $fname = 'wfSpecialContributions'; $target = isset($par) ? $par : $wgRequest->getVal('target'); if (!strlen($target)) { $wgOut->errorpage('notargettitle', 'notargettext'); return; } $nt = Title::newFromURL($target); if (!$nt) { $wgOut->errorpage('notargettitle', 'notargettext'); return; } $nt =& Title::makeTitle(NS_USER, $nt->getDBkey()); list($limit, $offset) = wfCheckLimits(); $offset = $wgRequest->getVal('offset'); /* Offset must be an integral. */ if (!strlen($offset) || !preg_match("/^[0-9]+\$/", $offset)) { $offset = 0; } $title = Title::makeTitle(NS_SPECIAL, "Contributions"); $urlbits = "target=" . wfUrlEncode($target); $myurl = $title->escapeLocalURL($urlbits); $finder = new contribs_finder($target == 'newbies' ? 'newbies' : $nt->getText()); $finder->set_limit($limit); $finder->set_offset($offset); $nsurl = $xnsurl = ""; if (($ns = $wgRequest->getVal('namespace', null)) !== null) { $nsurl = "&namespace={$ns}"; $xnsurl = htmlspecialchars($nsurl); $finder->set_namespace($ns); } if ($wgRequest->getText('go') == "prev") { $prevts = $finder->get_previous_offset_for_paging(); $prevurl = $title->getLocalURL($urlbits . "&offset={$prevts}&limit={$limit}{$nsurl}"); $wgOut->redirect($prevurl); return; } if ($wgRequest->getText('go') == "first") { $prevts = $finder->get_first_offset_for_paging(); $prevurl = $title->getLocalURL($urlbits . "&offset={$prevts}&limit={$limit}{$nsurl}"); $wgOut->redirect($prevurl); return; } $sk = $wgUser->getSkin(); $id = User::idFromName($nt->getText()); if (0 == $id) { $ul = $nt->getText(); } else { $ul = $sk->makeLinkObj($nt, htmlspecialchars($nt->getText())); $userCond = '=' . $id; } $talk = $nt->getTalkPage(); if ($talk) { $ul .= ' (' . $sk->makeLinkObj($talk, $wgLang->getNsText(NS_TALK)) . ')'; } if ($target == 'newbies') { $ul = wfMsg('newbies'); } $wgOut->setSubtitle(wfMsgHtml('contribsub', $ul)); wfRunHooks('SpecialContributionsBeforeMainOutput', $id); $arr = $wgContLang->getFormattedNamespaces(); $nsform = "<form method='get' action=\"{$wgScript}\">\n"; $nsform .= wfElement("input", array("name" => "title", "type" => "hidden", "value" => $wgTitle->getPrefixedText())); $nsform .= wfElement("input", array("name" => "offset", "type" => "hidden", "value" => $offset)); $nsform .= wfElement("input", array("name" => "limit", "type" => "hidden", "value" => $limit)); $nsform .= wfElement("input", array("name" => "target", "type" => "hidden", "value" => $target)); $nsform .= "<p>"; $nsform .= wfMsgHtml('namespace'); $nsform .= HTMLnamespaceselector($ns, ''); $nsform .= wfElement("input", array("type" => "submit", "value" => wfMsg('allpagessubmit'))); $nsform .= "</p></form>\n"; $wgOut->addHTML($nsform); $contribsPage = Title::makeTitle(NS_SPECIAL, 'Contributions'); $contribs = $finder->find(); if (count($contribs) == 0) { $wgOut->addWikiText(wfMsg("nocontribs")); return; } list($early, $late) = $finder->get_edit_limits(); $lastts = count($contribs) ? $contribs[count($contribs) - 1]->rev_timestamp : 0; $atstart = !count($contribs) || $late == $contribs[0]->rev_timestamp; $atend = !count($contribs) || $early == $lastts; $lasturl = $wgTitle->escapeLocalURL("action=history&limit={$limit}"); $firsttext = wfMsgHtml("histfirst"); $lasttext = wfMsgHtml("histlast"); $prevtext = wfMsg("prevn", $limit); if ($atstart) { $lastlink = $lasttext; $prevlink = $prevtext; } else { $lastlink = "<a href=\"{$myurl}&limit={$limit}{$xnsurl}\">{$lasttext}</a>"; $prevlink = "<a href=\"{$myurl}&offset={$offset}&limit={$limit}{$xnsurl}&go=prev\">{$prevtext}</a>"; } $nexttext = wfMsg("nextn", $limit); if ($atend) { $firstlink = $firsttext; $nextlink = $nexttext; } else { $firstlink = "<a href=\"{$myurl}&limit={$limit}{$xnsurl}&go=first\">{$firsttext}</a>"; $nextlink = "<a href=\"{$myurl}&offset={$lastts}&limit={$limit}{$xnsurl}\">{$nexttext}</a>"; } $firstlast = "({$lastlink} | {$firstlink})"; $urls = array(); foreach (array(20, 50, 100, 250, 500) as $num) { $urls[] = "<a href=\"{$myurl}&offset={$offset}&limit={$num}{$xnsurl}\">" . $wgLang->formatNum($num) . "</a>"; } $bits = implode($urls, ' | '); $prevnextbits = "{$firstlast} " . wfMsgHtml("viewprevnext", $prevlink, $nextlink, $bits); $wgOut->addHTML("<p>{$prevnextbits}</p>\n"); $wgOut->addHTML("<ul>\n"); foreach ($contribs as $contrib) { $wgOut->addHTML(ucListEdit($sk, $contrib)); } $wgOut->addHTML("</ul>\n"); $wgOut->addHTML("<p>{$prevnextbits}</p>\n"); }
/** * 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; $target = isset($par) ? $par : $wgRequest->getVal('target'); if (!strlen($target)) { $wgOut->showErrorPage('notargettitle', 'notargettext'); return; } $nt = Title::newFromURL($target); if (!$nt) { $wgOut->showErrorPage('notargettitle', 'notargettext'); return; } $options = array(); list($options['limit'], $options['offset']) = wfCheckLimits(); $options['offset'] = $wgRequest->getVal('offset'); /* Offset must be an integral. */ if (!strlen($options['offset']) || !preg_match('/^[0-9]+$/', $options['offset'])) { $options['offset'] = ''; } $title = SpecialPage::getTitleFor('Contributions'); $options['target'] = $target; $nt =& Title::makeTitle(NS_USER, $nt->getDBkey()); $finder = new ContribsFinder($target == 'newbies' ? 'newbies' : $nt->getText()); $finder->setLimit($options['limit']); $finder->setOffset($options['offset']); if (($ns = $wgRequest->getVal('namespace', null)) !== null && $ns !== '') { $options['namespace'] = intval($ns); $finder->setNamespace($options['namespace']); } else { $options['namespace'] = ''; } if ($wgUser->isAllowed('rollback') && $wgRequest->getBool('bot')) { $options['bot'] = '1'; } if ($wgRequest->getText('go') == 'prev') { $offset = $finder->getPreviousOffsetForPaging(); if ($offset !== false) { $options['offset'] = $offset; $prevurl = $title->getLocalURL(wfArrayToCGI($options)); $wgOut->redirect($prevurl); return; } } if ($wgRequest->getText('go') == 'first' && $target != 'newbies') { $offset = $finder->getFirstOffsetForPaging(); if ($offset !== false) { $options['offset'] = $offset; $prevurl = $title->getLocalURL(wfArrayToCGI($options)); $wgOut->redirect($prevurl); return; } } if ($target == 'newbies') { $wgOut->setSubtitle(wfMsgHtml('sp-contributions-newbies-sub')); } else { $wgOut->setSubtitle(wfMsgHtml('contribsub', contributionsSub($nt))); } $id = User::idFromName($nt->getText()); wfRunHooks('SpecialContributionsBeforeMainOutput', $id); $wgOut->addHTML(contributionsForm($options)); $contribs = $finder->find(); if (count($contribs) == 0) { $wgOut->addWikiText(wfMsg('nocontribs')); return; } list($early, $late) = $finder->getEditLimits(); $lastts = count($contribs) ? $contribs[count($contribs) - 1]->rev_timestamp : 0; $atstart = !count($contribs) || $late == $contribs[0]->rev_timestamp; $atend = !count($contribs) || $early == $lastts; // These four are defaults $newestlink = wfMsgHtml('sp-contributions-newest'); $oldestlink = wfMsgHtml('sp-contributions-oldest'); $newerlink = wfMsgHtml('sp-contributions-newer', $options['limit']); $olderlink = wfMsgHtml('sp-contributions-older', $options['limit']); if (!$atstart) { $stuff = $title->escapeLocalURL(wfArrayToCGI(array('offset' => ''), $options)); $newestlink = "<a href=\"{$stuff}\">{$newestlink}</a>"; $stuff = $title->escapeLocalURL(wfArrayToCGI(array('go' => 'prev'), $options)); $newerlink = "<a href=\"{$stuff}\">{$newerlink}</a>"; } if (!$atend) { $stuff = $title->escapeLocalURL(wfArrayToCGI(array('go' => 'first'), $options)); $oldestlink = "<a href=\"{$stuff}\">{$oldestlink}</a>"; $stuff = $title->escapeLocalURL(wfArrayToCGI(array('offset' => $lastts), $options)); $olderlink = "<a href=\"{$stuff}\">{$olderlink}</a>"; } if ($target == 'newbies') { $firstlast = "({$newestlink})"; } else { $firstlast = "({$newestlink} | {$oldestlink})"; } $urls = array(); foreach (array(20, 50, 100, 250, 500) as $num) { $stuff = $title->escapeLocalURL(wfArrayToCGI(array('limit' => $num), $options)); $urls[] = "<a href=\"{$stuff}\">" . $wgLang->formatNum($num) . "</a>"; } $bits = implode($urls, ' | '); $prevnextbits = $firstlast . ' ' . wfMsgHtml('viewprevnext', $newerlink, $olderlink, $bits); $wgOut->addHTML("<p>{$prevnextbits}</p>\n"); $wgOut->addHTML("<ul>\n"); $sk = $wgUser->getSkin(); foreach ($contribs as $contrib) { $wgOut->addHTML(ucListEdit($sk, $contrib)); } $wgOut->addHTML("</ul>\n"); $wgOut->addHTML("<p>{$prevnextbits}</p>\n"); }