(bug 18834) Add an edit count to rollback link

Add an edit count to rollback link to show how many edits will be
rollbacked. When the count is over 10 the text "more than 10 edits" will
be outputed.

Change-Id: I5c4050e0a9197d4c505e85685a9780c97138d427
This commit is contained in:
jan 2012-07-29 18:57:11 +02:00
parent c61744b0d8
commit 9bae2198c9
5 changed files with 61 additions and 7 deletions

View file

@ -2685,6 +2685,14 @@ $wgBetterDirectionality = true;
*/
$wgSend404Code = true;
/**
* The $wgShowRollbackEditCount variable is used to show how many edits will be
* rollback. The numeric value of the varible are the limit up to are counted.
* If the value is false or 0, the edits are not counted.
*/
$wgShowRollbackEditCount = 10;
/** @} */ # End of output format settings }
/*************************************************************************//**

View file

@ -1673,6 +1673,8 @@ class Linker {
* @return String: HTML fragment
*/
public static function buildRollbackLink( $rev, IContextSource $context = null ) {
global $wgShowRollbackEditCount;
if ( $context === null ) {
$context = RequestContext::getMain();
}
@ -1687,13 +1689,50 @@ class Linker {
$query['bot'] = '1';
$query['hidediff'] = '1'; // bug 15999
}
return self::link(
$title,
$context->msg( 'rollbacklink' )->escaped(),
array( 'title' => $context->msg( 'tooltip-rollback' )->text() ),
$query,
array( 'known', 'noclasses' )
);
if( is_int( $wgShowRollbackEditCount ) && $wgShowRollbackEditCount > 0 ) {
$dbr = wfGetDB( DB_SLAVE );
// Up to the value of $wgShowRollbackEditCount revisions are counted
$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' => $wgShowRollbackEditCount + 1 )
);
$editCount = 0;
while( $row = $dbr->fetchObject( $res ) ) {
if( $rev->getUserText() != $row->rev_user_text ) {
break;
}
$editCount++;
}
if( $editCount > $wgShowRollbackEditCount ) {
$editCount_output = $context->msg( 'rollbacklinkcount-morethan' )->numParams( $wgShowRollbackEditCount )->parse();
} else {
$editCount_output = $context->msg( 'rollbacklinkcount' )->numParams( $editCount )->parse();
}
return self::link(
$title,
$editCount_output,
array( 'title' => $context->msg( 'tooltip-rollback' )->text() ),
$query,
array( 'known', 'noclasses' )
);
} else {
return self::link(
$title,
$context->msg( 'rollbacklink' )->escaped(),
array( 'title' => $context->msg( 'tooltip-rollback' )->text() ),
$query,
array( 'known', 'noclasses' )
);
}
}
/**

View file

@ -2927,6 +2927,8 @@ proceed with caution.',
'rollback' => 'Roll back edits',
'rollback_short' => 'Rollback',
'rollbacklink' => 'rollback',
'rollbacklinkcount' => 'rollback $1 {{PLURAL:$1|edit|edits}}',
'rollbacklinkcount-morethan' => 'rollback more than $1 {{PLURAL:$1|edit|edits}}',
'rollbackfailed' => 'Rollback failed',
'cantrollback' => 'Cannot revert edit;
last contributor is only author of this page.',

View file

@ -2693,6 +2693,9 @@ $1 is the <b>approximate</b> number of revisions that the page has, the message
'rollback_short' => '{{Identical|Rollback}}',
'rollbacklink' => '{{Identical|Rollback}}
This message has a tooltip {{msg-mw|tooltip-rollback}}',
'rollbacklinkcount' => '* $1: the number of edit that will be rollbacked
If $1 is over the value of $wgShowRollbackEditCount (default: 10) [[MediaWiki:Rollbacklinkcount-morethan/en|rollbacklinkcount-morethan]] is used',
'rollbacklinkcount-morethan' => 'Similar to [[MediaWiki:Rollbacklinkcount/en|rollbacklinkcount]] but with prefix more than',
'rollbackfailed' => '{{Identical|Rollback}}',
'cantrollback' => '{{Identical|Revert}}
{{Identical|Rollback}}',

View file

@ -1962,6 +1962,8 @@ $wgMessageStructure = array(
'rollback',
'rollback_short',
'rollbacklink',
'rollbacklinkcount',
'rollbacklinkcount-morethan',
'rollbackfailed',
'cantrollback',
'alreadyrolled',