Merge "Improve clarity of diff-multi message"

This commit is contained in:
jenkins-bot 2014-01-31 17:24:00 +00:00 committed by Gerrit Code Review
commit 1f84a574e3
5 changed files with 66 additions and 17 deletions

View file

@ -4431,9 +4431,11 @@ class Title {
}
/**
* Get the number of authors between the given revisions or revision IDs.
* Get the authors between the given revisions or revision IDs.
* Used for diffs and other things that really need it.
*
* @since 1.23
*
* @param int|Revision $old Old revision or rev ID (first before range by default)
* @param int|Revision $new New revision or rev ID (first after range by default)
* @param int $limit Maximum number of authors
@ -4442,9 +4444,9 @@ class Title {
* 'include_new' Include $new in the range; $old is excluded.
* 'include_both' Include both $old and $new in the range.
* Unknown option values are ignored.
* @return int Number of revision authors in the range; zero if not both revisions exist
* @return array|null Names of revision authors in the range; null if not both revisions exist
*/
public function countAuthorsBetween( $old, $new, $limit, $options = array() ) {
public function getAuthorsBetween( $old, $new, $limit, $options = array() ) {
if ( !( $old instanceof Revision ) ) {
$old = Revision::newFromTitle( $this, (int)$old );
}
@ -4455,8 +4457,9 @@ class Title {
// Add $old->getPage() != $new->getPage() || $old->getPage() != $this->getArticleID()
// in the sanity check below?
if ( !$old || !$new ) {
return 0; // nothing to compare
return null; // nothing to compare
}
$authors = array();
$old_cmp = '>';
$new_cmp = '<';
$options = (array)$options;
@ -4472,12 +4475,19 @@ class Title {
}
// No DB query needed if $old and $new are the same or successive revisions:
if ( $old->getId() === $new->getId() ) {
return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1;
return ( $old_cmp === '>' && $new_cmp === '<' ) ? array() : array( $old->getRawUserText() );
} elseif ( $old->getId() === $new->getParentId() ) {
if ( $old_cmp === '>' || $new_cmp === '<' ) {
return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1;
if ( $old_cmp === '>=' && $new_cmp === '<=' ) {
$authors[] = $old->getRawUserText();
if ( $old->getRawUserText() != $new->getRawUserText() ) {
$authors[] = $new->getRawUserText();
}
} elseif ( $old_cmp === '>=' ) {
$authors[] = $old->getRawUserText();
} elseif ( $new_cmp === '<=' ) {
$authors[] = $new->getRawUserText();
}
return ( $old->getRawUserText() === $new->getRawUserText() ) ? 1 : 2;
return $authors;
}
$dbr = wfGetDB( DB_SLAVE );
$res = $dbr->select( 'revision', 'DISTINCT rev_user_text',
@ -4488,7 +4498,29 @@ class Title {
), __METHOD__,
array( 'LIMIT' => $limit + 1 ) // add one so caller knows it was truncated
);
return (int)$dbr->numRows( $res );
foreach ( $res as $row ) {
$authors[] = $row->rev_user_text;
}
return $authors;
}
/**
* Get the number of authors between the given revisions or revision IDs.
* Used for diffs and other things that really need it.
*
* @param int|Revision $old Old revision or rev ID (first before range by default)
* @param int|Revision $new New revision or rev ID (first after range by default)
* @param int $limit Maximum number of authors
* @param string|array $options (Optional): Single option, or an array of options:
* 'include_old' Include $old in the range; $new is excluded.
* 'include_new' Include $new in the range; $old is excluded.
* 'include_both' Include both $old and $new in the range.
* Unknown option values are ignored.
* @return int Number of revision authors in the range; zero if not both revisions exist
*/
public function countAuthorsBetween( $old, $new, $limit, $options = array() ) {
$authors = $this->getAuthorsBetween( $old, $new, $limit, $options );
return $authors ? count( $authors ) : 0;
}
/**

View file

@ -963,7 +963,11 @@ class DifferenceEngine extends ContextSource {
$nEdits = $this->mNewPage->countRevisionsBetween( $oldRev, $newRev );
if ( $nEdits > 0 ) {
$limit = 100; // use diff-multi-manyusers if too many users
$numUsers = $this->mNewPage->countAuthorsBetween( $oldRev, $newRev, $limit );
$users = $this->mNewPage->getAuthorsBetween( $oldRev, $newRev, $limit );
$numUsers = count( $users );
if( $numUsers == 1 && $users[0] == $newRev->getRawUserText() ) {
$numUsers = 0; // special case to say "by the same user" instead of "by one other user"
}
return self::intermediateEditsMsg( $nEdits, $numUsers, $limit );
}
@ -979,11 +983,13 @@ class DifferenceEngine extends ContextSource {
* @return string
*/
public static function intermediateEditsMsg( $numEdits, $numUsers, $limit ) {
if ( $numUsers > $limit ) {
if ( $numUsers === 0 ) {
$msg = 'diff-multi-sameuser';
} elseif ( $numUsers > $limit ) {
$msg = 'diff-multi-manyusers';
$numUsers = $limit;
} else {
$msg = 'diff-multi';
$msg = 'diff-multi-otherusers';
}
return wfMessage( $msg )->numParams( $numEdits, $numUsers )->parse();

View file

@ -1803,7 +1803,8 @@ Note that using the navigation links will reset this column.',
'showhideselectedversions' => 'Change visibility of selected revisions',
'editundo' => 'undo',
'diff-empty' => '(No difference)',
'diff-multi' => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one user|$2 users}} not shown)',
'diff-multi-sameuser' => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by the same user not shown)',
'diff-multi-otherusers' => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one other user|$2 users}} not shown)',
'diff-multi-manyusers' => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by more than $2 {{PLURAL:$2|user|users}} not shown)',
'difference-missing-revision' => '{{PLURAL:$2|One revision|$2 revisions}} of this difference ($1) {{PLURAL:$2|was|were}} not found.

View file

@ -2809,12 +2809,20 @@ See also:
This message has sometimes a tooltip {{msg-mw|tooltip-undo}}
{{Identical|Undo}}',
'diff-empty' => 'This message appears instead of a "diff" when comparing two revisions that are identical.',
'diff-multi' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive.
'diff-multi-sameuser' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and the intermediate revisions were all created by the same user as the new revision.
Parameters:
* $1 - the number of revisions
* $2 - the number of distinct users who made those revisions
See also:
* {{msg-mw|Diff-multi-otherusers}}
* {{msg-mw|Diff-multi-manyusers}}",
'diff-multi-otherusers' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and at least one of the intermediate revisions was created by a user other than the user who created the new revision.
Parameters:
* $1 - the number of revisions
* $2 - the number of distinct other users who made those revisions
See also:
* {{msg-mw|Diff-multi-sameuser}}
* {{msg-mw|Diff-multi-manyusers}}",
'diff-multi-manyusers' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and the intermediate revisions have been edited by more than 100 users.
@ -2822,7 +2830,8 @@ Parameters:
* $1 - the number of revisions, will always be 101 or more
* $2 - the number of users that were found, which was limited at 100
See also:
* {{msg-mw|Diff-multi}}",
* {{msg-mw|Diff-multi-sameuser}}
* {{msg-mw|Diff-multi-otherusers}}",
'difference-missing-revision' => 'Text displayed when the requested revision does not exist using a diff link.
Example: [{{canonicalurl:Project:News|diff=426850&oldid=99999999}} Diff with invalid revision#]

View file

@ -942,7 +942,8 @@ $wgMessageStructure = array(
'showhideselectedversions',
'editundo',
'diff-empty',
'diff-multi',
'diff-multi-sameuser',
'diff-multi-otherusers',
'diff-multi-manyusers',
'difference-missing-revision',
),