wiki.techinc.nl/includes/user/UserIdentityValue.php
Aryeh Gregor f7201e3b9b Convert WatchedItem and friends to UserIdentity
I wasn't able to port some places that rely on isAllowed, getOption, or
related methods.

This adds isRegistered() to UserIdentity, which works like
User::isLoggedIn() but with a better name.

I also cleaned up User mocks in WatchedItemQueryServiceUnitTest in the
course of debugging test failures when switching them to
UserIdentityValue instead of mock Users where possible. They now specify
explicitly which methods are allowed to be called on their User objects,
which I believe is good practice for mocks (and unfortunately PHPUnit
makes it awkward).

Bug: T207972
Depends-On: I883d506197a011fe4c102b72df4d9deb58ab5ca2
Change-Id: Iadbf7bc31a496899dbef44e49065ff89f37aea89
2019-05-05 14:35:52 +03:00

106 lines
2.5 KiB
PHP

<?php
/**
* Value object representing a user's identity.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
namespace MediaWiki\User;
use Wikimedia\Assert\Assert;
/**
* Value object representing a user's identity.
*
* @since 1.31
*/
class UserIdentityValue implements UserIdentity {
/**
* @var int
*/
private $id;
/**
* @var string
*/
private $name;
/**
* @var int
*/
private $actor;
/**
* @param int $id
* @param string $name
* @param int $actor
*/
public function __construct( $id, $name, $actor ) {
Assert::parameterType( 'integer', $id, '$id' );
Assert::parameterType( 'string', $name, '$name' );
Assert::parameterType( 'integer', $actor, '$actor' );
$this->id = $id;
$this->name = $name;
$this->actor = $actor;
}
/**
* @return int The user ID. May be 0 for anonymous users or for users with no local account.
*/
public function getId() {
return $this->id;
}
/**
* @return string The user's logical name. May be an IPv4 or IPv6 address for anonymous users.
*/
public function getName() {
return $this->name;
}
/**
* @return int The user's actor ID. May be 0 if no actor ID has been assigned.
*/
public function getActorId() {
return $this->actor;
}
/**
* @since 1.32
*
* @param UserIdentity $user
* @return bool
*/
public function equals( UserIdentity $user ) {
// XXX it's not clear whether central ID providers are supposed to obey this
return $this->getName() === $user->getName();
}
/**
* @since 1.34
*
* @return bool True if user is registered on this wiki, i.e., has a user ID. False if user is
* anonymous or has no local account (which can happen when importing). This is equivalent to
* getId() != 0 and is provided for code readability.
*/
public function isRegistered() {
return $this->getId() != 0;
}
}