From: Brion Vibber Date: Mon, 18 May 2009 18:48:36 +0000 (+0000) Subject: Revert r50727 "* (bug 18834) Show how many edits will rollback if $wgShowRollbackEdit... X-Git-Tag: 1.31.0-rc.0~41755 X-Git-Url: http://git.cyclocoop.org/fichier?a=commitdiff_plain;h=04b62f23df804932b9056e943390dc8649a9df6d;p=lhc%2Fweb%2Fwiklou.git Revert r50727 "* (bug 18834) Show how many edits will rollback if $wgShowRollbackEditCount is set true in LocalSettings.php, bugfixes for r50721" * Seems to combine unrelated changes, which complicates code review and management * Patch is incomplete, missing default settings etc. --- diff --git a/RELEASE-NOTES b/RELEASE-NOTES index a84f7c42f8..16233a1dad 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -55,7 +55,6 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN * (bug 18342) insertTags works in edit summary box * (bug 18411) The upload form also checks post_max_size * Watchlist now has a specialized
tag that contains a unique class for each page -* (bug 18834) Show how many edits will rollback if $wgShowRollbackEditCount is set true in LocalSettings.php === Bug fixes in 1.16 === diff --git a/includes/Linker.php b/includes/Linker.php index 1a37aefba0..e93598e1b5 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -1609,7 +1609,7 @@ class Linker { * @return string */ public function buildRollbackLink( $rev ) { - global $wgRequest, $wgUser, $wgShowRollbackEditCount; + global $wgRequest, $wgUser; $title = $rev->getTitle(); $query = array( 'action' => 'rollback', @@ -1622,43 +1622,57 @@ class Linker { $query['token'] = $wgUser->editToken( array( $title->getPrefixedText(), $rev->getUserText() ) ); - if( $wgShowRollbackEditCount ) { - global $wgLang; - $dbr = wfGetDB( DB_SLAVE ); - - // 10 latest edits; if too expensive, use only on smaller wikis - $res = $dbr->select( 'revision', - array( 'rev_id', 'rev_user_text' ), - array( 'rev_page' => $rev->getPage() - ), __METHOD__, - array( 'USE INDEX' => 'page_timestamp', - 'ORDER BY' => 'rev_timestamp DESC', - 'LIMIT' => 10 ) - ); - - $editCount = 1; - $dbr->fetchObject( $res ); // throw away the first row - while( $row = $dbr->fetchObject( $res ) ) { - if( $rev->getUserText() != $row->rev_user_text ) { - break; - } - $editCount++; + $dbr = wfGetDB( DB_MASTER ); + + // Latest edits by this user, up to 10; if too expensive, use only on smaller wikis + $res = $dbr->select( 'revision', + array( 'rev_id' ), + array( 'rev_page' => $rev->getPage(), + 'rev_user_text' => $rev->getUserText() + ), __METHOD__, + array( 'USE INDEX' => 'page_timestamp', + 'ORDER BY' => 'rev_timestamp DESC', + 'LIMIT' => 10 ) + ); + + // Swiped from Article::commitRollback() + $user = intval( $rev->getUser() ); + $user_text = $dbr->addQuotes( $rev->getUserText() ); + + // Get the last edit not by this guy + $s = $dbr->selectRow( 'revision', + array( 'rev_id', 'rev_timestamp', 'rev_deleted' ), + array( 'rev_page' => $rev->getPage(), + "rev_user != {$user} OR rev_user_text != {$user_text}" + ), __METHOD__, + array( 'USE INDEX' => 'page_timestamp', + 'ORDER BY' => 'rev_timestamp DESC' ) + ); + + if( $s === false ) { + // No one else ever edited this page + return false; + } + elseif( $s->rev_deleted & REVISION::DELETED_TEXT || $s->rev_deleted & REVISION::DELETED_USER ) { + // Only admins can see this text + return false; + } + + $editCount = 0; + while( $row = $dbr->fetchObject( $res ) ) { + $editCount++; + if( $s->rev_id > $row->rev_id ) { + break; } + } - // We only bother to count up to 10 - $formattedNum = $wgLang->formatNum( $editCount ); - if( $editCount == 10 ) - $formattedNum .= '+'; + // We only bother to count up to 10 + if( $editCount == 10 ) + $editCount = '10+'; - return $this->link( $title, wfMsgExt( 'rollbacklinkcount', 'parseinline', $formattedNum, $editCount ), - array( 'title' => wfMsg( 'tooltip-rollback' ) ), - $query, array( 'known', 'noclasses' ) ); - } - else { - return $this->link( $title, wfMsgHtml( 'rollbacklink' ), - array( 'title' => wfMsg( 'tooltip-rollback' ) ), - $query, array( 'known', 'noclasses' ) ); - } + return $this->link( $title, wfMsgHtml( 'rollbacklink', $editCount ), + array( 'title' => wfMsg( 'tooltip-rollback' ) ), + $query, array( 'known', 'noclasses' ) ); } /** diff --git a/languages/messages/MessagesDe.php b/languages/messages/MessagesDe.php index f09b7aa36d..b724953efd 100644 --- a/languages/messages/MessagesDe.php +++ b/languages/messages/MessagesDe.php @@ -2073,7 +2073,6 @@ Um die Einstellungen deiner Beobachtungsliste anzupassen, besuche: {{fullurl:Spe 'rollback' => 'Zurücksetzen der Änderungen', 'rollback_short' => 'Zurücksetzen', 'rollbacklink' => 'Zurücksetzen', -'rollbacklinkcount'=> 'Setzen $1 {{PLURAL:$2|Änderung|Änderungen}} zurück', 'rollbackfailed' => 'Zurücksetzen gescheitert', 'cantrollback' => 'Die Änderung kann nicht zurückgesetzt werden, da es keine früheren Autoren gibt.', 'alreadyrolled' => 'Das Zurücksetzen der Änderungen von [[User:$2|$2]] ([[User talk:$2|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) an [[:$1]] ist gescheitert, da in der Zwischenzeit ein anderer Benutzer die Seite geändert hat. diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index b8dbf0525c..c41999afd6 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -2428,7 +2428,6 @@ proceed with caution.', 'rollback' => 'Roll back edits', 'rollback_short' => 'Rollback', 'rollbacklink' => 'rollback', -'rollbacklinkcount'=> 'rollback $1 {{PLURAL:$2|edit|edits}}', 'rollbackfailed' => 'Rollback failed', 'cantrollback' => 'Cannot revert edit; last contributor is only author of this page.', diff --git a/languages/messages/MessagesQqq.php b/languages/messages/MessagesQqq.php index ff16293685..6d31063456 100644 --- a/languages/messages/MessagesQqq.php +++ b/languages/messages/MessagesQqq.php @@ -1763,8 +1763,6 @@ $1 = the name of the page', 'rollback' => '{{Identical|Rollback}}', 'rollback_short' => '{{Identical|Rollback}}', 'rollbacklink' => '{{Identical|Rollback}}', -'rollbacklinkcount'=> '* $1: the number of edit that can rollback -* $2: the number of edit that can rollback for PLURAL', 'rollbackfailed' => '{{Identical|Rollback}}', 'cantrollback' => '{{Identical|Revert}} {{Identical|Rollback}}',