*/
const INVALID_TOKEN = '*** INVALID ***';
- /**
- * Global constant made accessible as class constants so that autoloader
- * magic can be used.
- * @deprecated since 1.27, use \MediaWiki\Session\Token::SUFFIX
- */
- const EDIT_TOKEN_SUFFIX = Token::SUFFIX;
-
/**
* @const int Serialized record version.
*/
- const VERSION = 12;
+ const VERSION = 13;
/**
* Exclude user options that are set to their default value.
* @return bool
*/
public function isValidPassword( $password ) {
- // simple boolean wrapper for getPasswordValidity
- return $this->getPasswordValidity( $password ) === true;
+ // simple boolean wrapper for checkPasswordValidity
+ return $this->checkPasswordValidity( $password )->isGood();
}
/**
*
* @param string $password Desired password
* @return bool|string|array True on success, string or array of error message on failure
+ * @deprecated since 1.33, use checkPasswordValidity
*/
public function getPasswordValidity( $password ) {
+ wfDeprecated( __METHOD__, '1.33' );
+
$result = $this->checkPasswordValidity( $password );
if ( $result->isGood() ) {
return true;
private function getBlockedStatus( $bFromReplica = true ) {
global $wgProxyWhitelist, $wgUser, $wgApplyIpBlocksToXff, $wgSoftBlockRanges;
- if ( -1 != $this->mBlockedby ) {
+ if ( $this->mBlockedby != -1 ) {
return;
}
if ( $block->isSitewide() ) {
$blocked = $block->prevents( 'editownusertalk' );
} else {
- // If the block is partial, then only a true value is honored,
- // otherwise fallback to the partial block settings.
- $blocked = $block->prevents( 'editownusertalk' ) ?: $block->appliesToTitle( $title );
+ // If the block is partial, ignore 'editownusertalk' unless
+ // there is a restriction on the user talk namespace.
+ // TODO: To be implemented with Namespace restrictions
+ $blocked = $block->appliesToTitle( $title );
}
} else {
$blocked = $block->appliesToTitle( $title );
$this->mActorId = (int)$dbw->insertId();
} else {
// Outdated cache?
- list( , $options ) = DBAccessObjectUtils::getDBOptions( $this->queryFlagsUsed );
- $this->mActorId = (int)$dbw->selectField( 'actor', 'actor_id', $q, __METHOD__, $options );
+ // Use LOCK IN SHARE MODE to bypass any MySQL REPEATABLE-READ snapshot.
+ $this->mActorId = (int)$dbw->selectField(
+ 'actor',
+ 'actor_id',
+ $q,
+ __METHOD__,
+ [ 'LOCK IN SHARE MODE' ]
+ );
if ( !$this->mActorId ) {
throw new CannotCreateActorException(
"Cannot create actor ID for user_id={$this->getId()} user_name={$this->getName()}"
/**
* Get the list of explicit group memberships this user has.
* The implicit * and user groups are not included.
- * @return array Array of String internal group names
+ *
+ * @return string[] Array of internal group names (sorted since 1.33)
*/
public function getGroups() {
$this->load();
*/
public function setCookies( $request = null, $secure = null, $rememberMe = false ) {
$this->load();
- if ( 0 == $this->mId ) {
+ if ( $this->mId == 0 ) {
return;
}
}
$this->load();
- if ( 0 == $this->mId ) {
+ if ( $this->mId == 0 ) {
return; // anon
}