*/
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.
*/
if ( $s === false ) {
$result = null;
} else {
- $result = $s->user_id;
+ $result = (int)$s->user_id;
}
self::$idCacheByName[$name] = $result;
private function getBlockedStatus( $bFromReplica = true ) {
global $wgProxyWhitelist, $wgUser, $wgApplyIpBlocksToXff, $wgSoftBlockRanges;
- if ( -1 != $this->mBlockedby ) {
+ if ( $this->mBlockedby != -1 ) {
return;
}
if ( !$blocked ) {
$block = $this->getBlock( $fromReplica );
if ( $block ) {
- $blocked = $block->preventsEdit( $title );
+ // Special handling for a user's own talk page. The block is not aware
+ // of the user, so this must be done here.
+ if ( $title->equals( $this->getTalkPage() ) ) {
+ // If the block is sitewide, then whatever is set is what is honored.
+ 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 );
+ }
+ } 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()}"
*/
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
}