Introduce LogEntry::getPerformerIdentity and deprecate ::getPerformer

Bug: T274329
Change-Id: I3dadb20f076494f7b46f0647ea3a8bfbbdaa59da
This commit is contained in:
Vadim Kovalenko 2021-02-15 13:53:00 -05:00 committed by Peter Ovchyn
parent 3448f20ab9
commit 66573bec7e
6 changed files with 39 additions and 49 deletions

View file

@ -23,6 +23,7 @@
* @since 1.19
*/
use MediaWiki\User\UserIdentity;
use Wikimedia\Rdbms\IDatabase;
/**
@ -213,6 +214,10 @@ class DatabaseLogEntry extends LogEntryBase {
return $this->performer;
}
public function getPerformerIdentity(): UserIdentity {
return $this->getPerformer();
}
public function getTarget() {
$namespace = $this->row->log_namespace;
$page = $this->row->log_title;

View file

@ -23,6 +23,8 @@
* @since 1.19
*/
use MediaWiki\User\UserIdentity;
/**
* Interface for log entries. Every log entry has these methods.
*
@ -61,11 +63,17 @@ interface LogEntry {
/**
* Get the user who performed this action.
*
* @deprecated since 1.36 use ::getPerformerIdentity instead
* @return User
*/
public function getPerformer();
/**
* @since 1.36
* @return UserIdentity
*/
public function getPerformerIdentity(): UserIdentity;
/**
* Get the target page of this action.
*

View file

@ -25,6 +25,7 @@
use MediaWiki\Linker\LinkRenderer;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
use MediaWiki\User\UserIdentity;
/**
* Implements the default log formatting.
@ -580,7 +581,7 @@ class LogFormatter {
$entry = $this->entry;
$params = $this->extractParameters();
$params[0] = Message::rawParam( $this->getPerformerElement() );
$params[1] = $this->canView( LogPage::DELETED_USER ) ? $entry->getPerformer()->getName() : '';
$params[1] = $this->canView( LogPage::DELETED_USER ) ? $entry->getPerformerIdentity()->getName() : '';
$params[2] = Message::rawParam( $this->makePageLink( $entry->getTarget() ) );
// Bad things happens if the numbers are not in correct order
@ -706,8 +707,8 @@ class LogFormatter {
*/
public function getPerformerElement() {
if ( $this->canView( LogPage::DELETED_USER ) ) {
$performer = $this->entry->getPerformer();
$element = $this->makeUserLink( $performer );
$performerIdentity = $this->entry->getPerformerIdentity();
$element = $this->makeUserLink( $performerIdentity );
if ( $this->entry->isDeleted( LogPage::DELETED_USER ) ) {
$element = $this->styleRestricedElement( $element );
}
@ -780,12 +781,12 @@ class LogFormatter {
}
/**
* @param User $user
* @param UserIdentity $user
* @param int $toolFlags Combination of Linker::TOOL_LINKS_* flags
* @return string wikitext or html
* @return-taint onlysafefor_html
*/
protected function makeUserLink( User $user, $toolFlags = 0 ) {
protected function makeUserLink( UserIdentity $user, $toolFlags = 0 ) {
if ( $this->plaintext ) {
$element = $user->getName();
} else {
@ -793,14 +794,17 @@ class LogFormatter {
$user->getId(),
$user->getName()
);
if ( $this->linkFlood ) {
$editCount = $user->isRegistered()
? MediaWikiServices::getInstance()->getUserEditTracker()->getUserEditCount( $user )
: null;
$element .= Linker::userToolLinks(
$user->getId(),
$user->getName(),
true, // redContribsWhenNoEdits
$toolFlags,
$user->getEditCount(),
$editCount,
// do not render parenthesises in the HTML markup (CSS will provide)
false
);

View file

@ -463,7 +463,7 @@ class ManualLogEntry extends LogEntryBase implements Taggable {
/**
* @return UserIdentity
*/
public function getPerformerIdentity() : UserIdentity {
public function getPerformerIdentity(): UserIdentity {
return $this->performer;
}

View file

@ -2434,11 +2434,11 @@ class AuthManagerTest extends \MediaWikiIntegrationTestCase {
$this->assertSame( $logSubtype ?: ( $isAnon ? 'create' : 'create2' ), $entry->getSubtype() );
$this->assertSame(
$isAnon ? $user->getId() : $creator->getId(),
$entry->getPerformer()->getId()
$entry->getPerformerIdentity()->getId()
);
$this->assertSame(
$isAnon ? $user->getName() : $creator->getName(),
$entry->getPerformer()->getName()
$entry->getPerformerIdentity()->getName()
);
$this->assertSame( $user->getUserPage()->getFullText(), $entry->getTarget()->getFullText() );
$this->assertSame( [ '4::userid' => $user->getId() ], $entry->getParameters() );
@ -2936,8 +2936,8 @@ class AuthManagerTest extends \MediaWikiIntegrationTestCase {
$entry = \DatabaseLogEntry::newFromRow( reset( $rows ) );
$this->assertSame( 'autocreate', $entry->getSubtype() );
$this->assertSame( $user->getId(), $entry->getPerformer()->getId() );
$this->assertSame( $user->getName(), $entry->getPerformer()->getName() );
$this->assertSame( $user->getId(), $entry->getPerformerIdentity()->getId() );
$this->assertSame( $user->getName(), $entry->getPerformerIdentity()->getName() );
$this->assertSame( $user->getUserPage()->getFullText(), $entry->getTarget()->getFullText() );
$this->assertSame( [ '4::userid' => $user->getId() ], $entry->getParameters() );

View file

@ -2,6 +2,7 @@
use MediaWiki\User\UserEditTracker;
use MediaWiki\User\UserIdentity;
use MediaWiki\User\UserIdentityValue;
use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\LoadBalancer;
use Wikimedia\TestingAccessWrapper;
@ -49,10 +50,7 @@ class UserEditTrackerTest extends MediaWikiUnitTestCase {
->with( DB_REPLICA )
->willReturn( $database );
$user = $this->createMock( UserIdentity::class );
$user->expects( $this->any() )
->method( 'getId' )
->willReturn( $userId );
$user = new UserIdentityValue( $userId, 'TestUser', 0 );
$jobQueueGroup = $this->createMock( JobQueueGroup::class );
@ -77,9 +75,7 @@ class UserEditTrackerTest extends MediaWikiUnitTestCase {
$loadBalancer = $this->createMock( LoadBalancer::class );
$user = $this->createMock( UserIdentity::class );
$user->expects( $this->once() )
->method( 'getId' )
->willReturn( $userId );
$user = new UserIdentityValue( $userId, 'TestUser', 0 );
$jobQueueGroup = $this->createMock( JobQueueGroup::class );
@ -99,10 +95,7 @@ class UserEditTrackerTest extends MediaWikiUnitTestCase {
$methodName2 = 'MediaWiki\User\UserEditTracker::initializeUserEditCount';
$editCount = 17;
$user = $this->createMock( UserIdentity::class );
$user->expects( $this->any() )
->method( 'getId' )
->willReturn( $userId );
$user = new UserIdentityValue( $userId, 'TestUser', 0 );
$database1 = $this->createMock( Database::class );
$database1->expects( $this->once() )
@ -188,10 +181,7 @@ class UserEditTrackerTest extends MediaWikiUnitTestCase {
$methodName = 'MediaWiki\User\UserEditTracker::initializeUserEditCount';
$editCount = 341;
$user = $this->createMock( UserIdentity::class );
$user->expects( $this->any() )
->method( 'getId' )
->willReturn( $userId );
$user = new UserIdentityValue( $userId, 'TestUser', 0 );
$database1 = $this->createMock( Database::class );
$database1->expects( $this->once() )
@ -260,10 +250,7 @@ class UserEditTrackerTest extends MediaWikiUnitTestCase {
$methodName = 'MediaWiki\User\UserEditTracker::getUserEditTimestamp';
$actorId = 982110;
$user = $this->createMock( UserIdentity::class );
$user->expects( $this->once() )
->method( 'getId' )
->willReturn( 1 );
$user = new UserIdentityValue( 1, 'TestUser', $actorId );
$expectedSort = ( $type === 'first' ) ? 'ASC' : 'DESC';
$dbTime = ( $time === 'null' ) ? null : $time;
@ -338,12 +325,7 @@ class UserEditTrackerTest extends MediaWikiUnitTestCase {
$actorMigration = $this->createMock( ActorMigration::class );
$loadBalancer = $this->createMock( LoadBalancer::class );
$user = $this->createMock( UserIdentity::class );
$user->expects( $this->exactly( 2 ) )
->method( 'getId' )
->will(
$this->onConsecutiveCalls( 0, 0 )
);
$user = new UserIdentityValue( 0, 'TestUser', 0 );
$jobQueueGroup = $this->createMock( JobQueueGroup::class );
@ -359,18 +341,9 @@ class UserEditTrackerTest extends MediaWikiUnitTestCase {
$tracker = new UserEditTracker( $actorMigration, $loadBalancer, $jobQueueGroup );
$anon = $this->createMock( UserIdentity::class );
$anon->expects( $this->once() )
->method( 'isRegistered' )
->willReturn( false );
$anon = new UserIdentityValue( 0, 'TestUser', 0 );
$user = $this->createMock( UserIdentity::class );
$user->expects( $this->once() )
->method( 'isRegistered' )
->willReturn( true );
$user->expects( $this->once() )
->method( 'getId' )
->willReturn( 123 );
$user = new UserIdentityValue( 123, 'TestUser', 0 );
$accessible = TestingAccessWrapper::newFromObject( $tracker );
$accessible->userEditCountCache = [ 'u123' => 5 ];