X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSpecialContributions.php;h=00864da5e53924187edbfa67333cfdcce10d75ba;hb=e03fdc5ac5be1cb2e43f33885580c773289b2150;hp=9eee43be43c77f9c05ede3ceabed445562997caf;hpb=1595df6cb32c0bbfa7104d072d395765413a68fd;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SpecialContributions.php b/includes/SpecialContributions.php index 9eee43be43..00864da5e5 100644 --- a/includes/SpecialContributions.php +++ b/includes/SpecialContributions.php @@ -4,15 +4,21 @@ * @subpackage SpecialPage */ +/** @package MediaWiki */ class contribs_finder { - var $username, $offset, $limit, $namespace, $invert; + var $username, $offset, $limit, $namespace; var $dbr; function contribs_finder($username) { $this->username = $username; + $this->namespace = false; $this->dbr =& wfGetDB(DB_SLAVE); } + function set_namespace($ns) { + $this->namespace = $ns; + } + function set_limit($limit) { $this->limit = $limit; } @@ -21,87 +27,66 @@ class contribs_finder { $this->offset = $offset; } - function set_namespace($namespace, $invert = false) { - $this->namespace = $namespace; - $this->invert = $invert; - } + function get_edit_limit($dir) { + list($index, $usercond) = $this->get_user_cond(); + $nscond = $this->get_namespace_cond(); + $use_index = $this->dbr->useIndexClause($index); + extract($this->dbr->tableNames('revision', 'page')); + $sql = "SELECT rev_timestamp " . + " FROM $page,$revision $use_index " . + " WHERE rev_page=page_id AND $usercond $nscond" . + " ORDER BY rev_timestamp $dir LIMIT 1"; - function set_hide_minor($hm) { - $this->hide_minor = $hm; + $res = $this->dbr->query($sql, "contribs_finder::get_edit_limit"); + while ($o = $this->dbr->fetchObject($res)) + $row = $o; + return $row->rev_timestamp; } function get_edit_limits() { - list($index, $usercond) = $this->get_user_cond(); - - $use_index = $this->dbr->useIndexClause($index); - extract($this->dbr->tableNames('page', 'revision')); - - #$sql = "SELECT MIN(rev_timestamp) as earliest, MAX(rev_timestamp) as latest " . - # "FROM page, revision $use_index WHERE page_id = rev_page " . - # "AND "; - - #$sql .= $usercond; - #$sql .= $this->get_namespace_cond(); - #$sql .= $this->get_minor_cond(); - $sql = "SELECT MIN(rev_timestamp) as earliest, MAX(rev_timestamp) as latest " . - "FROM $revision $use_index WHERE " . $usercond; - - $res = $this->dbr->query($sql, "contribs_finder::get_edit_limits"); - $rows = array(); - while ($o = $this->dbr->fetchObject($res)) - $rows[] = $o; - $row = $rows[count($rows) - 1]; - return array($row->earliest, $row->latest); + return array( + $this->get_edit_limit("ASC"), + $this->get_edit_limit("DESC") + ); } function get_user_cond() { - $condition = ""; + $condition = ''; if ($this->username == 'newbies') { - $max = $this->dbr->selectField('user', 'max(user_id)', false, "make_sql"); - $condition = '>' . ($max - $max / 100); + $max = $this->dbr->selectField('user', 'max(user_id)', false, 'make_sql'); + $condition = '>' . (int)($max - $max / 100); } - if ($condition == "") { - $condition = " rev_user_text=" . $this->dbr->addQuotes($this->username); + if ($condition == '') { + $condition = ' rev_user_text=' . $this->dbr->addQuotes($this->username); $index = 'usertext_timestamp'; } else { - $condition = " rev_user {$condition}"; + $condition = ' rev_user '.$condition ; $index = 'user_timestamp'; } - return array($index, $condition); } - function get_minor_cond() { - if ($this->hide_minor) - return ' AND rev_minor_edit=0'; - return ''; - } - function get_namespace_cond() { - $nsQuery = $nsinvert = ""; - - if ($this->invert) - $nsinvert = "!"; - - if (!is_null($this->namespace)) - $nsQuery .= "AND page_namespace {$nsinvert}= {$this->namespace}"; - - return $nsQuery; + if ($this->namespace !== false) + return ' AND page_namespace = ' . (int)$this->namespace; + return ''; } function get_previous_offset_for_paging() { list($index, $usercond) = $this->get_user_cond(); + $nscond = $this->get_namespace_cond(); + $use_index = $this->dbr->useIndexClause($index); extract($this->dbr->tableNames('page', 'revision')); $sql = "SELECT rev_timestamp FROM $page, $revision $use_index " . "WHERE page_id = rev_page AND rev_timestamp > '" . $this->offset . "' AND " . - "rev_user_text = " . $this->dbr->addQuotes($this->username); - $sql .= $this->get_namespace_cond(); - $sql .= $this->get_minor_cond(); - $sql .= " ORDER BY rev_timestamp ASC LIMIT " . $this->limit; + "rev_user_text = " . $this->dbr->addQuotes($this->username) + . $nscond; + $sql .= " ORDER BY rev_timestamp ASC"; + $sql = $this->dbr->limitResult($sql, $this->limit, 0); $res = $this->dbr->query($sql); $rows = array(); while ($obj = $this->dbr->fetchObject($res)) @@ -114,13 +99,13 @@ class contribs_finder { list($index, $usercond) = $this->get_user_cond(); $use_index = $this->dbr->useIndexClause($index); extract($this->dbr->tableNames('page', 'revision')); - + $nscond = $this->get_namespace_cond(); $sql = "SELECT rev_timestamp FROM $page, $revision $use_index " . "WHERE page_id = rev_page AND " . - "rev_user_text = " . $this->dbr->addQuotes($this->username); - $sql .= $this->get_namespace_cond(); - $sql .= $this->get_minor_cond(); - $sql .= " ORDER BY rev_timestamp ASC LIMIT " . ($this->limit + 1); + "rev_user_text = " . $this->dbr->addQuotes($this->username) + . $nscond; + $sql .= " ORDER BY rev_timestamp ASC"; + $sql = $this->dbr->limitResult($sql, $this->limit, 0); $res = $this->dbr->query($sql); $rows = array(); while ($obj = $this->dbr->fetchObject($res)) @@ -130,33 +115,31 @@ class contribs_finder { } /* private */ function make_sql() { - $userCond = $condition = $index = $minorQuery = $nsQuery - = $offsetQuery = $limitQuery = $nsinvert = ""; - - $minorQuery = $this->get_minor_cond(); - $nsQuery = $this->get_namespace_cond(); + $userCond = $condition = $index = $offsetQuery = $limitQuery = ""; extract($this->dbr->tableNames('page', 'revision')); list($index, $userCond) = $this->get_user_cond(); - $limitQuery = "LIMIT {$this->limit}"; + $limitQuery = 'LIMIT '.$this->limit; if ($this->offset) - $offsetQuery = "AND rev_timestamp < '{$this->offset}'"; + $offsetQuery = "AND rev_timestamp <= '{$this->offset}'"; + $nscond = $this->get_namespace_cond(); $use_index = $this->dbr->useIndexClause($index); $sql = "SELECT page_namespace,page_title,page_is_new,page_latest, rev_id,rev_timestamp,rev_comment,rev_minor_edit,rev_user_text, rev_deleted FROM $page,$revision $use_index - WHERE page_id=rev_page AND $userCond $minorQuery $nsQuery $offsetQuery - ORDER BY rev_timestamp DESC $limitQuery"; + WHERE page_id=rev_page AND $userCond $nscond $offsetQuery + ORDER BY rev_timestamp DESC"; + $sql = $this->dbr->limitResult($sql, $this->limit, 0); return $sql; } function find() { $contribs = array(); - $res = $this->dbr->query($this->make_sql(), "contribs_finder::find"); + $res = $this->dbr->query($this->make_sql(), 'contribs_finder::find'); while ($c = $this->dbr->fetchObject($res)) $contribs[] = $c; $this->dbr->freeResult($res); @@ -172,7 +155,8 @@ class contribs_finder { * @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; + global $wgUser, $wgOut, $wgLang, $wgContLang, $wgRequest, $wgTitle, + $wgScript; $fname = 'wfSpecialContributions'; $target = isset($par) ? $par : $wgRequest->getVal( 'target' ); @@ -188,36 +172,42 @@ function wfSpecialContributions( $par = null ) { } $nt =& Title::makeTitle(NS_USER, $nt->getDBkey()); - $namespace = $wgRequest->getIntOrNull('namespace'); - $invert = $wgRequest->getBool('invert'); - $hideminor = $wgRequest->getBool('hideminor'); - $limit = min($wgRequest->getInt('limit', 50), 500); + list( $limit, $offset) = wfCheckLimits(); $offset = $wgRequest->getVal('offset'); /* Offset must be an integral. */ - if (!strlen($offset) || !preg_match("/^[0-9]+$/", $offset)) + if (!strlen($offset) || !preg_match('/^[0-9]+$/', $offset)) $offset = 0; - $title = Title::makeTitle(NS_SPECIAL, "Contributions"); - $urlbits = "hideminor=$hideminor&namespace=$namespace&invert=$invert&target=" . wfUrlEncode($target); + $title = Title::makeTitle(NS_SPECIAL, 'Contributions'); + $urlbits = 'target=' . wfUrlEncode($target); $myurl = $title->escapeLocalURL($urlbits); - $finder = new contribs_finder($nt->getText()); + $finder = new contribs_finder(($target == 'newbies') ? 'newbies' : $nt->getText()); - $finder->set_namespace($namespace, $invert); - $finder->set_hide_minor($hideminor); $finder->set_limit($limit); $finder->set_offset($offset); - if ($wgRequest->getText('go') == "prev") { + $nsurl = $xnsurl = ''; + if (($ns = $wgRequest->getVal('namespace', null)) !== null && $ns !== '') { + $nsurl = '&namespace='.$ns; + $xnsurl = htmlspecialchars($nsurl); + $finder->set_namespace($ns); + } + + $boturl = ''; + if ($wgUser->isAllowed('rollback') && $wgRequest->getBool( 'bot' )) + $boturl = '&bot=1'; + + if ($wgRequest->getText('go') == 'prev') { $prevts = $finder->get_previous_offset_for_paging(); - $prevurl = $title->getLocalURL($urlbits . "&offset=$prevts&limit=$limit"); + $prevurl = $title->getLocalURL($urlbits . "&offset=$prevts&limit=$limit$nsurl$boturl"); $wgOut->redirect($prevurl); return; } - if ($wgRequest->getText('go') == "first") { - $prevts = $finder->get_first_offset_for_paging(); - $prevurl = $title->getLocalURL($urlbits . "&offset=$prevts&limit=$limit"); + if ($wgRequest->getText('go') == 'first' && $target != 'newbies') { + $prevts = $finder->get_first_offset_for_paging(); + $prevurl = $title->getLocalURL($urlbits . "&offset=$prevts&limit=$limit$nsurl$boturl"); $wgOut->redirect($prevurl); return; } @@ -243,20 +233,43 @@ function wfSpecialContributions( $par = null ) { $wgOut->setSubtitle( wfMsgHtml( 'contribsub', $ul ) ); - $contribsPage = Title::makeTitle( NS_SPECIAL, 'Contributions' ); - $mlink = $sk->makeKnownLinkObj( $contribsPage, - $hideminor ? wfMsgHtml( 'show' ) : wfMsgHtml( 'hide' ), - wfArrayToCGI( array( - 'target' => $nt->getPrefixedDbKey(), - 'offset' => $offset, - 'limit' => $limit, - 'hideminor' => $hideminor ? 0 : 1, - 'namespace' => $namespace ) ) ); + wfRunHooks('SpecialContributionsBeforeMainOutput', $id ); + + $arr = $wgContLang->getFormattedNamespaces(); + $nsform = "
\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 .= '

'; + $nsform .= wfMsgHtml('namespace'); + + $nsform .= HTMLnamespaceselector( $ns, '' ); + + $nsform .= wfElement('input', array( + 'type' => 'submit', + 'value' => wfMsg('allpagessubmit'))); + $nsform .= "

\n"; + + $wgOut->addHTML($nsform); + $contribsPage = Title::makeTitle( NS_SPECIAL, 'Contributions' ); $contribs = $finder->find(); if (count($contribs) == 0) { - $wgOut->addWikiText( wfMsg( "nocontribs" ) ); + $wgOut->addWikiText( wfMsg( 'nocontribs' ) ); return; } @@ -264,42 +277,43 @@ function wfSpecialContributions( $par = null ) { $lastts = count($contribs) ? $contribs[count($contribs) - 1]->rev_timestamp : 0; $atstart = (!count($contribs) || $late == $contribs[0]->rev_timestamp); $atend = (!count($contribs) || $early == $lastts); -wfdebug("early=$early late=$late lastts=$lastts\n"); - $wgOut->addHTML(ucNamespaceForm($target, $hideminor, $namespace, $invert)); $lasturl = $wgTitle->escapeLocalURL("action=history&limit={$limit}"); - $firsttext = wfMsgHtml("histfirst"); - $lasttext = wfMsgHtml("histlast"); + $firsttext = wfMsgHtml('histfirst'); + $lasttext = wfMsgHtml('histlast'); - $prevtext = wfMsg("prevn", $limit); + $prevtext = wfMsg('prevn', $limit); if ($atstart) { $lastlink = $lasttext; $prevlink = $prevtext; } else { - $lastlink = "$lasttext"; - $prevlink = "$prevtext"; + $lastlink = "$lasttext"; + $prevlink = "$prevtext"; } - $nexttext = wfMsg("nextn", $limit); + $nexttext = wfMsg('nextn', $limit); if ($atend) { $firstlink = $firsttext; $nextlink = $nexttext; } else { - $firstlink = "$firsttext"; - $nextlink = "$nexttext"; + $firstlink = "$firsttext"; + $nextlink = "$nexttext"; } - $firstlast = "($lastlink | $firstlink)"; + if ($target == 'newbies') { + $firstlast ="($lastlink)"; + } else { + $firstlast = "($lastlink | $firstlink)"; + } $urls = array(); foreach (array(20, 50, 100, 250, 500) as $num) - $urls[] = "".$wgLang->formatNum($num).""; + $urls[] = "".$wgLang->formatNum($num).""; $bits = implode($urls, ' | '); - $prevnextbits = "$firstlast " . wfMsgHtml("viewprevnext", $prevlink, $nextlink, $bits); + $prevnextbits = $firstlast .' '. wfMsgHtml('viewprevnext', $prevlink, $nextlink, $bits); - $shm = wfMsgHtml( "contribs-showhideminor", $mlink ); - $wgOut->addHTML( "
{$prevnextbits} ($shm)

\n"); + $wgOut->addHTML( "

{$prevnextbits}

\n"); $wgOut->addHTML( "\n" ); - $wgOut->addHTML( "
{$prevnextbits} ($shm)\n"); + $wgOut->addHTML( "

{$prevnextbits}

\n"); } @@ -345,7 +359,7 @@ function ucListEdit( $sk, $row ) { if( $row->rev_id == $row->page_latest ) { $topmarktext .= '' . $messages['uctop'] . ''; if( !$row->page_is_new ) { - $difftext .= $sk->makeKnownLinkObj( $page, '(' . $messages['diff'] . ')', 'diff=0' ); + $difftext .= '(' . $sk->makeKnownLinkObj( $page, $messages['diff'], 'diff=0' ) . ')'; } else { $difftext .= $messages['newarticle']; } @@ -363,12 +377,12 @@ function ucListEdit( $sk, $row ) { if( $row->rev_deleted && !$wgUser->isAllowed( 'undelete' ) ) { $difftext = '(' . $messages['diff'] . ')'; } else { - $difftext = $sk->makeKnownLinkObj( $page, '(' . $messages['diff'].')', 'diff=prev&oldid='.$row->rev_id ); + $difftext = '(' . $sk->makeKnownLinkObj( $page, $messages['diff'], 'diff=prev&oldid='.$row->rev_id ) . ')'; } $histlink='('.$sk->makeKnownLinkObj( $page, $messages['hist'], 'action=history' ) . ')'; $comment = $sk->commentBlock( $row->rev_comment, $page ); - $d = $wgLang->timeanddate( $row->rev_timestamp, true ); + $d = $wgLang->timeanddate( wfTimestamp(TS_MW, $row->rev_timestamp), true ); if( $row->rev_minor_edit ) { $mflag = '' . $messages['minoreditletter'] . ' '; @@ -385,45 +399,4 @@ function ucListEdit( $sk, $row ) { return $ret; } -/** - * Generates a form used to restrict display of contributions - * to a specific namespace - * - * @return none - * @param string $target target user to show contributions for - * @param string $hideminor whether minor contributions are hidden - * @param string $namespace currently selected namespace, NULL for show all - * @param bool $invert inverts the namespace selection on true (default null) - */ -function ucNamespaceForm ( $target, $hideminor, $namespace, $invert ) { - global $wgContLang, $wgScript; - - $namespaceselect = "'; - - $action = htmlspecialchars( $wgScript ); - $out = "
"; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= " -
- - $namespaceselect - - - -
"; - $out .= '
'; - return $out; -} ?>