<?php
use MediaWiki\Linker\LinkTarget;
+use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Revision\RevisionRecord;
use MediaWiki\User\UserIdentity;
use Wikimedia\Assert\Assert;
/** @var WatchedItemStoreInterface */
private $watchedItemStore;
+ /** @var PermissionManager */
+ private $permissionManager;
+
public function __construct(
ILoadBalancer $loadBalancer,
CommentStore $commentStore,
ActorMigration $actorMigration,
- WatchedItemStoreInterface $watchedItemStore
+ WatchedItemStoreInterface $watchedItemStore,
+ PermissionManager $permissionManager
) {
$this->loadBalancer = $loadBalancer;
$this->commentStore = $commentStore;
$this->actorMigration = $actorMigration;
$this->watchedItemStore = $watchedItemStore;
+ $this->permissionManager = $permissionManager;
}
/**
return $conds;
}
- private function getUserRelatedConds( IDatabase $db, User $user, array $options ) {
+ private function getUserRelatedConds( IDatabase $db, UserIdentity $user, array $options ) {
if ( !array_key_exists( 'onlyByUser', $options ) && !array_key_exists( 'notByUser', $options ) ) {
return [];
}
// Avoid brute force searches (T19342)
$bitmask = 0;
- if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ if ( !$this->permissionManager->userHasRight( $user, 'deletedhistory' ) ) {
$bitmask = RevisionRecord::DELETED_USER;
- } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ } elseif ( !$this->permissionManager
+ ->userHasAnyRight( $user, 'suppressrevision', 'viewsuppressed' )
+ ) {
$bitmask = RevisionRecord::DELETED_USER | RevisionRecord::DELETED_RESTRICTED;
}
if ( $bitmask ) {
return $conds;
}
- private function getExtraDeletedPageLogEntryRelatedCond( IDatabase $db, User $user ) {
+ private function getExtraDeletedPageLogEntryRelatedCond( IDatabase $db, UserIdentity $user ) {
// LogPage::DELETED_ACTION hides the affected page, too. So hide those
// entirely from the watchlist, or someone could guess the title.
$bitmask = 0;
- if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ if ( !$this->permissionManager->userHasRight( $user, 'deletedhistory' ) ) {
$bitmask = LogPage::DELETED_ACTION;
- } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ } elseif ( !$this->permissionManager
+ ->userHasAnyRight( $user, 'suppressrevision', 'viewsuppressed' )
+ ) {
$bitmask = LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED;
}
if ( $bitmask ) {
<?php
+use MediaWiki\Permissions\PermissionManager;
use MediaWiki\User\UserIdentityValue;
use Wikimedia\Rdbms\IDatabase;
use Wikimedia\Rdbms\LoadBalancer;
/**
* @param PHPUnit_Framework_MockObject_MockObject|Database $mockDb
+ * @param PHPUnit_Framework_MockObject_MockObject|PermissionManager $mockPM
* @return WatchedItemQueryService
*/
- private function newService( $mockDb ) {
+ private function newService( $mockDb, $mockPM = null ) {
return new WatchedItemQueryService(
$this->getMockLoadBalancer( $mockDb ),
$this->getMockCommentStore(),
$this->getMockActorMigration(),
- $this->getMockWatchedItemStore()
+ $this->getMockWatchedItemStore(),
+ $mockPM ?: $this->getMockPermissionManager()
);
}
return $mock;
}
+ /**
+ * @param string $notAllowedAction
+ * @return PHPUnit_Framework_MockObject_MockObject|PermissionManager
+ */
+ private function getMockPermissionManager( $notAllowedAction = null ) {
+ $mock = $this->getMockBuilder( PermissionManager::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $mock->method( 'userHasRight' )
+ ->will( $this->returnCallback( function ( $user, $action ) use ( $notAllowedAction ) {
+ return $action !== $notAllowedAction;
+ } ) );
+ $mock->method( 'userHasAnyRight' )
+ ->will( $this->returnCallback( function ( $user, ...$actions ) use ( $notAllowedAction ) {
+ return !in_array( $notAllowedAction, $actions );
+ } ) );
+ return $mock;
+ }
+
/**
* @param int $id
* @param string[] $extraMethods Extra methods that are expected might be called
*/
private function getMockUnrestrictedNonAnonUserWithId( $id, array $extraMethods = [] ) {
$mock = $this->getMockNonAnonUserWithId( $id,
- array_merge( [ 'isAllowed', 'isAllowedAny', 'useRCPatrol' ], $extraMethods ) );
- $mock->method( 'isAllowed' )->willReturn( true );
- $mock->method( 'isAllowedAny' )->willReturn( true );
+ array_merge( [ 'useRCPatrol' ], $extraMethods ) );
$mock->method( 'useRCPatrol' )->willReturn( true );
return $mock;
}
* @param string $notAllowedAction
* @return PHPUnit_Framework_MockObject_MockObject|User
*/
- private function getMockNonAnonUserWithIdAndRestrictedPermissions( $id, $notAllowedAction ) {
+ private function getMockNonAnonUserWithIdAndRestrictedPermissions( $id ) {
$mock = $this->getMockNonAnonUserWithId( $id,
- [ 'isAllowed', 'isAllowedAny', 'useRCPatrol', 'useNPPatrol' ] );
-
- $mock->method( 'isAllowed' )
- ->will( $this->returnCallback( function ( $action ) use ( $notAllowedAction ) {
- return $action !== $notAllowedAction;
- } ) );
- $mock->method( 'isAllowedAny' )
- ->will( $this->returnCallback( function ( ...$actions ) use ( $notAllowedAction ) {
- return !in_array( $notAllowedAction, $actions );
- } ) );
+ [ 'useRCPatrol', 'useNPPatrol' ] );
$mock->method( 'useRCPatrol' )->willReturn( false );
$mock->method( 'useNPPatrol' )->willReturn( false );
*/
private function getMockNonAnonUserWithIdAndNoPatrolRights( $id ) {
$mock = $this->getMockNonAnonUserWithId( $id,
- [ 'isAllowed', 'isAllowedAny', 'useRCPatrol', 'useNPPatrol' ] );
-
- $mock->expects( $this->any() )
- ->method( 'isAllowed' )
- ->will( $this->returnValue( true ) );
- $mock->expects( $this->any() )
- ->method( 'isAllowedAny' )
- ->will( $this->returnValue( true ) );
-
+ [ 'useRCPatrol', 'useNPPatrol' ] );
$mock->expects( $this->any() )
->method( 'useRCPatrol' )
->will( $this->returnValue( false ) );
)
->will( $this->returnValue( [] ) );
- $user = $this->getMockNonAnonUserWithIdAndRestrictedPermissions( 1, $notAllowedAction );
+ $permissionManager = $this->getMockPermissionManager( $notAllowedAction );
+ $user = $this->getMockNonAnonUserWithIdAndRestrictedPermissions( 1 );
- $queryService = $this->newService( $mockDb );
+ $queryService = $this->newService( $mockDb, $permissionManager );
$items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options );
$this->assertEmpty( $items );