* (bug 18834) Show how many edits will rollback if $wgShowRollbackEditCount is set...
authorJan Luca Naumann <jan@users.mediawiki.org>
Mon, 18 May 2009 18:25:06 +0000 (18:25 +0000)
committerJan Luca Naumann <jan@users.mediawiki.org>
Mon, 18 May 2009 18:25:06 +0000 (18:25 +0000)
RELEASE-NOTES
includes/Linker.php
languages/messages/MessagesDe.php
languages/messages/MessagesEn.php
languages/messages/MessagesQqq.php

index 16233a1..a84f7c4 100644 (file)
@@ -55,6 +55,7 @@ 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 <div> 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 ===
 
index e93598e..1a37aef 100644 (file)
@@ -1609,7 +1609,7 @@ class Linker {
         * @return string
         */
        public function buildRollbackLink( $rev ) {
-               global $wgRequest, $wgUser;
+               global $wgRequest, $wgUser, $wgShowRollbackEditCount;
                $title = $rev->getTitle();
                $query = array(
                        'action' => 'rollback',
@@ -1622,57 +1622,43 @@ class Linker {
                $query['token'] = $wgUser->editToken( array( $title->getPrefixedText(),
                        $rev->getUserText() ) );
 
-               $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;
+               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++;
                        }
-               }
 
-               // We only bother to count up to 10
-               if( $editCount == 10 )
-                       $editCount = '10+';
+                       // We only bother to count up to 10
+                       $formattedNum = $wgLang->formatNum( $editCount );
+                       if( $editCount == 10 )
+                               $formattedNum .= '+';
 
-               return $this->link( $title, wfMsgHtml( 'rollbacklink', $editCount ),
-                       array( 'title' => wfMsg( 'tooltip-rollback' ) ),
-                       $query, array( 'known', 'noclasses' ) );
+                       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' ) );
+               }
        }
 
        /**
index b724953..f09b7aa 100644 (file)
@@ -2073,6 +2073,7 @@ 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.
index c41999a..b8dbf05 100644 (file)
@@ -2428,6 +2428,7 @@ 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.',
index 6d31063..ff16293 100644 (file)
@@ -1763,6 +1763,8 @@ $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}}',