From 05fa1599175343bcd63f11d73a08e53b11133b29 Mon Sep 17 00:00:00 2001 From: Jan Luca Naumann Date: Mon, 18 May 2009 18:25:06 +0000 Subject: [PATCH] * (bug 18834) Show how many edits will rollback if $wgShowRollbackEditCount is set true in LocalSettings.php, bugfixes for r50721 --- RELEASE-NOTES | 1 + includes/Linker.php | 84 +++++++++++++----------------- languages/messages/MessagesDe.php | 1 + languages/messages/MessagesEn.php | 1 + languages/messages/MessagesQqq.php | 2 + 5 files changed, 40 insertions(+), 49 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 16233a1dad..a84f7c42f8 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -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
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 e93598e1b5..1a37aefba0 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -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' ) ); + } } /** diff --git a/languages/messages/MessagesDe.php b/languages/messages/MessagesDe.php index b724953efd..f09b7aa36d 100644 --- a/languages/messages/MessagesDe.php +++ b/languages/messages/MessagesDe.php @@ -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. diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index c41999afd6..b8dbf0525c 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -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.', diff --git a/languages/messages/MessagesQqq.php b/languages/messages/MessagesQqq.php index 6d31063456..ff16293685 100644 --- a/languages/messages/MessagesQqq.php +++ b/languages/messages/MessagesQqq.php @@ -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}}', -- 2.20.1