Use LogFormatter to format rights log.
* Has to keep actual messages for IRC notification * Catch really old log entries with no parameters and use an appropriate message in that case to not always display erroneous "X changed group membership for Y from (none) to (none)". Change-Id: Ie188bc6fcdf672fe31f0f389a158aab6256031fa
This commit is contained in:
parent
8f5ce91a04
commit
4c69cd3ad6
8 changed files with 161 additions and 73 deletions
|
|
@ -700,6 +700,7 @@ $wgAutoloadLocalClasses = array(
|
|||
'PatrolLog' => 'includes/logging/PatrolLog.php',
|
||||
'PatrolLogFormatter' => 'includes/logging/LogFormatter.php',
|
||||
'RCDatabaseLogEntry' => 'includes/logging/LogEntry.php',
|
||||
'RightsLogFormatter' => 'includes/logging/LogFormatter.php',
|
||||
|
||||
# includes/media
|
||||
'BitmapHandler' => 'includes/media/Bitmap.php',
|
||||
|
|
|
|||
|
|
@ -5641,8 +5641,6 @@ $wgLogActions = array(
|
|||
'protect/modify' => 'modifiedarticleprotection',
|
||||
'protect/unprotect' => 'unprotectedarticle',
|
||||
'protect/move_prot' => 'movedarticleprotection',
|
||||
'rights/rights' => 'rightslogentry',
|
||||
'rights/autopromote' => 'rightslogentry-autopromote',
|
||||
'upload/upload' => 'uploadedimage',
|
||||
'upload/overwrite' => 'overwroteimage',
|
||||
'upload/revert' => 'uploadedimage',
|
||||
|
|
@ -5660,16 +5658,18 @@ $wgLogActions = array(
|
|||
* @see LogFormatter
|
||||
*/
|
||||
$wgLogActionsHandlers = array(
|
||||
'move/move' => 'MoveLogFormatter',
|
||||
'move/move_redir' => 'MoveLogFormatter',
|
||||
'delete/delete' => 'DeleteLogFormatter',
|
||||
'delete/restore' => 'DeleteLogFormatter',
|
||||
'delete/revision' => 'DeleteLogFormatter',
|
||||
'delete/event' => 'DeleteLogFormatter',
|
||||
'suppress/revision' => 'DeleteLogFormatter',
|
||||
'suppress/event' => 'DeleteLogFormatter',
|
||||
'suppress/delete' => 'DeleteLogFormatter',
|
||||
'patrol/patrol' => 'PatrolLogFormatter',
|
||||
'move/move' => 'MoveLogFormatter',
|
||||
'move/move_redir' => 'MoveLogFormatter',
|
||||
'delete/delete' => 'DeleteLogFormatter',
|
||||
'delete/restore' => 'DeleteLogFormatter',
|
||||
'delete/revision' => 'DeleteLogFormatter',
|
||||
'delete/event' => 'DeleteLogFormatter',
|
||||
'suppress/revision' => 'DeleteLogFormatter',
|
||||
'suppress/event' => 'DeleteLogFormatter',
|
||||
'suppress/delete' => 'DeleteLogFormatter',
|
||||
'patrol/patrol' => 'PatrolLogFormatter',
|
||||
'rights/rights' => 'RightsLogFormatter',
|
||||
'rights/autopromote' => 'RightsLogFormatter',
|
||||
);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1155,13 +1155,17 @@ class User {
|
|||
}
|
||||
$newGroups = array_merge( $oldGroups, $toPromote ); // all groups
|
||||
|
||||
$log = new LogPage( 'rights', $wgAutopromoteOnceLogInRC /* in RC? */ );
|
||||
$log->addEntry( 'autopromote',
|
||||
$this->getUserPage(),
|
||||
'', // no comment
|
||||
// These group names are "list to texted"-ed in class LogPage.
|
||||
array( implode( ', ', $oldGroups ), implode( ', ', $newGroups ) )
|
||||
);
|
||||
$logEntry = new ManualLogEntry( 'rights', 'autopromote' );
|
||||
$logEntry->setPerformer( $this );
|
||||
$logEntry->setTarget( $this->getUserPage() );
|
||||
$logEntry->setParameters( array(
|
||||
'4::oldgroups' => $oldGroups,
|
||||
'5::newgroups' => $newGroups,
|
||||
) );
|
||||
$logid = $logEntry->insert();
|
||||
if ( $wgAutopromoteOnceLogInRC ) {
|
||||
$logEntry->publish( $logid );
|
||||
}
|
||||
}
|
||||
}
|
||||
return $toPromote;
|
||||
|
|
|
|||
|
|
@ -293,6 +293,28 @@ class LogFormatter {
|
|||
}
|
||||
break;
|
||||
|
||||
case 'rights':
|
||||
if ( count( $parameters['4::oldgroups'] ) ) {
|
||||
$oldgroups = implode( ', ', $parameters['4::oldgroups'] );
|
||||
} else {
|
||||
$oldgroups = wfMessage( 'rightsnone' )->inContentLanguage()->escaped();
|
||||
}
|
||||
if ( count( $parameters['5::newgroups'] ) ) {
|
||||
$newgroups = implode( ', ', $parameters['5::newgroups'] );
|
||||
} else {
|
||||
$newgroups = wfMessage( 'rightsnone' )->inContentLanguage()->escaped();
|
||||
}
|
||||
switch( $entry->getSubtype() ) {
|
||||
case 'rights':
|
||||
$text = wfMessage( 'rightslogentry' )
|
||||
->rawParams( $target, $oldgroups, $newgroups )->inContentLanguage()->escaped();
|
||||
break;
|
||||
case 'autopromote':
|
||||
$text = wfMessage( 'rightslogentry-autopromote' )
|
||||
->rawParams( $target, $oldgroups, $newgroups )->inContentLanguage()->escaped();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
// case 'suppress' --private log -- aaron (sign your messages so we know who to blame in a few years :-D)
|
||||
// default:
|
||||
|
|
@ -1009,3 +1031,88 @@ class NewUsersLogFormatter extends LogFormatter {
|
|||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This class formats rights log entries.
|
||||
* @since 1.21
|
||||
*/
|
||||
class RightsLogFormatter extends LogFormatter {
|
||||
protected function makePageLink( Title $title = null, $parameters = array() ) {
|
||||
global $wgContLang, $wgUserrightsInterwikiDelimiter;
|
||||
|
||||
if ( !$this->plaintext ) {
|
||||
$text = $wgContLang->ucfirst( $title->getText() );
|
||||
$parts = explode( $wgUserrightsInterwikiDelimiter, $text, 2 );
|
||||
|
||||
if ( count( $parts ) === 2 ) {
|
||||
$titleLink = WikiMap::foreignUserLink( $parts[1], $parts[0],
|
||||
htmlspecialchars( $title->getPrefixedText() ) );
|
||||
|
||||
if ( $titleLink !== false ) {
|
||||
return $titleLink;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return parent::makePageLink( $title, $parameters );
|
||||
}
|
||||
|
||||
protected function getMessageKey() {
|
||||
$key = parent::getMessageKey();
|
||||
$params = $this->getMessageParameters();
|
||||
if ( !isset( $params[3] ) && !isset( $params[4] ) ) {
|
||||
$key .= '-legacy';
|
||||
}
|
||||
return $key;
|
||||
}
|
||||
|
||||
protected function getMessageParameters() {
|
||||
$params = parent::getMessageParameters();
|
||||
|
||||
// Really old entries
|
||||
if ( !isset( $params[3] ) && !isset( $params[4] ) ) {
|
||||
return $params;
|
||||
}
|
||||
|
||||
$oldGroups = $params[3];
|
||||
$newGroups = $params[4];
|
||||
|
||||
// Less old entries
|
||||
if ( $oldGroups === '' ) {
|
||||
$oldGroups = array();
|
||||
} elseif ( is_string( $oldGroups ) ) {
|
||||
$oldGroups = array_map( 'trim', explode( ',', $oldGroups ) );
|
||||
}
|
||||
if ( $newGroups === '' ) {
|
||||
$newGroups = array();
|
||||
} elseif ( is_string( $newGroups ) ) {
|
||||
$newGroups = array_map( 'trim', explode( ',', $newGroups ) );
|
||||
}
|
||||
|
||||
$userName = $this->entry->getTarget()->getText();
|
||||
if ( !$this->plaintext && count( $oldGroups ) ) {
|
||||
foreach ( $oldGroups as &$group ) {
|
||||
$group = User::getGroupMember( $group, $userName );
|
||||
}
|
||||
}
|
||||
if ( !$this->plaintext && count( $newGroups ) ) {
|
||||
foreach ( $newGroups as &$group ) {
|
||||
$group = User::getGroupMember( $group, $userName );
|
||||
}
|
||||
}
|
||||
|
||||
$lang = $this->context->getLanguage();
|
||||
if ( count( $oldGroups ) ) {
|
||||
$params[3] = $lang->listToText( $oldGroups );
|
||||
} else {
|
||||
$params[3] = $this->msg( 'rightsnone' )->text();
|
||||
}
|
||||
if ( count( $newGroups ) ) {
|
||||
$params[4] = $lang->listToText( $newGroups );
|
||||
} else {
|
||||
$params[4] = $this->msg( 'rightsnone' )->text();
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -253,29 +253,6 @@ class LogPage {
|
|||
} else {
|
||||
$titleLink = self::getTitleLink( $type, $langObjOrNull, $title, $params );
|
||||
|
||||
if( preg_match( '/^rights\/(rights|autopromote)/', $key ) ) {
|
||||
$rightsnone = wfMessage( 'rightsnone' )->inLanguage( $langObj )->text();
|
||||
|
||||
if( $skin ) {
|
||||
$username = $title->getText();
|
||||
foreach ( $params as &$param ) {
|
||||
$groupArray = array_map( 'trim', explode( ',', $param ) );
|
||||
foreach( $groupArray as &$group ) {
|
||||
$group = User::getGroupMember( $group, $username );
|
||||
}
|
||||
$param = $wgLang->listToText( $groupArray );
|
||||
}
|
||||
}
|
||||
|
||||
if( !isset( $params[0] ) || trim( $params[0] ) == '' ) {
|
||||
$params[0] = $rightsnone;
|
||||
}
|
||||
|
||||
if( !isset( $params[1] ) || trim( $params[1] ) == '' ) {
|
||||
$params[1] = $rightsnone;
|
||||
}
|
||||
}
|
||||
|
||||
if( count( $params ) == 0 ) {
|
||||
$rv = wfMessage( $wgLogActions[$key] )->rawParams( $titleLink )->inLanguage( $langObj )->escaped();
|
||||
} else {
|
||||
|
|
@ -350,8 +327,6 @@ class LogPage {
|
|||
* @return String
|
||||
*/
|
||||
protected static function getTitleLink( $type, $lang, $title, &$params ) {
|
||||
global $wgContLang, $wgUserrightsInterwikiDelimiter;
|
||||
|
||||
if( !$lang ) {
|
||||
return $title->getPrefixedText();
|
||||
}
|
||||
|
|
@ -388,20 +363,6 @@ class LogPage {
|
|||
. Linker::userToolLinks( $id, $title->getText(), false, Linker::TOOL_LINKS_NOBLOCK );
|
||||
}
|
||||
break;
|
||||
case 'rights':
|
||||
$text = $wgContLang->ucfirst( $title->getText() );
|
||||
$parts = explode( $wgUserrightsInterwikiDelimiter, $text, 2 );
|
||||
|
||||
if ( count( $parts ) == 2 ) {
|
||||
$titleLink = WikiMap::foreignUserLink( $parts[1], $parts[0],
|
||||
htmlspecialchars( $title->getPrefixedText() ) );
|
||||
|
||||
if ( $titleLink !== false ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
$titleLink = Linker::link( Title::makeTitle( NS_USER, $text ) );
|
||||
break;
|
||||
case 'merge':
|
||||
$titleLink = Linker::link(
|
||||
$title,
|
||||
|
|
|
|||
|
|
@ -245,16 +245,16 @@ class UserrightsPage extends SpecialPage {
|
|||
* Add a rights log entry for an action.
|
||||
*/
|
||||
function addLogEntry( $user, $oldGroups, $newGroups, $reason ) {
|
||||
$log = new LogPage( 'rights' );
|
||||
|
||||
$log->addEntry( 'rights',
|
||||
$user->getUserPage(),
|
||||
$reason,
|
||||
array(
|
||||
$this->makeGroupNameListForLog( $oldGroups ),
|
||||
$this->makeGroupNameListForLog( $newGroups )
|
||||
)
|
||||
);
|
||||
$logEntry = new ManualLogEntry( 'rights', 'rights' );
|
||||
$logEntry->setPerformer( $this->getUser() );
|
||||
$logEntry->setTarget( $user->getUserPage() );
|
||||
$logEntry->setComment( $reason );
|
||||
$logEntry->setParameters( array(
|
||||
'4::oldgroups' => $oldGroups,
|
||||
'5::newgroups' => $newGroups,
|
||||
) );
|
||||
$logid = $logEntry->insert();
|
||||
$logEntry->publish( $logid );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -355,7 +355,16 @@ class UserrightsPage extends SpecialPage {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a list of group names to be stored as parameter for log entries
|
||||
*
|
||||
* @deprecated in 1.21; use LogFormatter instead.
|
||||
* @param $ids array
|
||||
* @return string
|
||||
*/
|
||||
function makeGroupNameListForLog( $ids ) {
|
||||
wfDeprecated( __METHOD__, '1.21' );
|
||||
|
||||
if( empty( $ids ) ) {
|
||||
return '';
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -2047,11 +2047,14 @@ Your e-mail address is not revealed when other users contact you.',
|
|||
'right-passwordreset' => 'View password reset e-mails',
|
||||
|
||||
# User rights log
|
||||
'rightslog' => 'User rights log',
|
||||
'rightslogtext' => 'This is a log of changes to user rights.',
|
||||
'rightslogentry' => 'changed group membership for $1 from $2 to $3',
|
||||
'rightslogentry-autopromote' => 'was automatically promoted from $2 to $3',
|
||||
'rightsnone' => '(none)',
|
||||
'rightslog' => 'User rights log',
|
||||
'rightslogtext' => 'This is a log of changes to user rights.',
|
||||
'rightslogentry' => 'changed group membership for $1 from $2 to $3',
|
||||
'rightslogentry-autopromote' => 'was automatically promoted from $2 to $3',
|
||||
'logentry-rights-rights' => '$1 changed group membership for $3 from $4 to $5',
|
||||
'logentry-rights-rights-legacy' => '$1 changed group membership for $3',
|
||||
'logentry-rights-autopromote' => '$1 was automatically promoted from $4 to $5',
|
||||
'rightsnone' => '(none)',
|
||||
|
||||
# Associated actions - in the sentence "You do not have permission to X"
|
||||
'action-read' => 'read this page',
|
||||
|
|
|
|||
|
|
@ -1190,6 +1190,9 @@ $wgMessageStructure = array(
|
|||
'rightslogtext',
|
||||
'rightslogentry',
|
||||
'rightslogentry-autopromote',
|
||||
'logentry-rights-rights',
|
||||
'logentry-rights-rights-legacy',
|
||||
'logentry-rights-autopromote',
|
||||
'rightsnone',
|
||||
),
|
||||
'action' => array(
|
||||
|
|
|
|||
Loading…
Reference in a new issue