* @file
*/
+use MediaWiki\MediaWikiServices;
use MediaWiki\Session\SessionManager;
use MediaWiki\Session\Token;
protected $mImplicitGroups;
/** @var array */
protected $mFormerGroups;
- /** @var bool */
- protected $mBlockedGlobally;
+ /** @var Block */
+ protected $mGlobalBlock;
/** @var bool */
protected $mLocked;
/** @var bool */
// Clean up name according to title rules,
// but only when validation is requested (bug 12654)
$t = ( $validate !== false ) ?
- Title::newFromText( $name ) : Title::makeTitle( NS_USER, $name );
+ Title::newFromText( $name, NS_USER ) : Title::makeTitle( NS_USER, $name );
// Check for invalid titles
- if ( is_null( $t ) ) {
+ if ( is_null( $t ) || $t->getNamespace() !== NS_USER || $t->isExternal() ) {
return false;
}
foreach ( LanguageConverter::$languagesWithVariants as $langCode ) {
$defOpt[$langCode == $wgContLang->getCode() ? 'variant' : "variant-$langCode"] = $langCode;
}
- foreach ( SearchEngine::searchableNamespaces() as $nsnum => $nsname ) {
+ $namespaces = MediaWikiServices::getInstance()->getSearchEngineConfig()->searchableNamespaces();
+ foreach ( $namespaces as $nsnum => $nsname ) {
$defOpt['searchNs' . $nsnum] = !empty( $wgNamespacesToBeSearchedDefault[$nsnum] );
}
$defOpt['skin'] = Skin::normalizeKey( $wgDefaultSkin );
* @return bool True if blocked, false otherwise
*/
public function isBlockedGlobally( $ip = '' ) {
- if ( $this->mBlockedGlobally !== null ) {
- return $this->mBlockedGlobally;
+ return $this->getGlobalBlock( $ip ) instanceof Block;
+ }
+
+ /**
+ * Check if user is blocked on all wikis.
+ * Do not use for actual edit permission checks!
+ * This is intended for quick UI checks.
+ *
+ * @param string $ip IP address, uses current client if none given
+ * @return Block|null Block object if blocked, null otherwise
+ * @throws FatalError
+ * @throws MWException
+ */
+ public function getGlobalBlock( $ip = '' ) {
+ if ( $this->mGlobalBlock !== null ) {
+ return $this->mGlobalBlock ?: null;
}
// User is already an IP?
if ( IP::isIPAddress( $this->getName() ) ) {
$ip = $this->getRequest()->getIP();
}
$blocked = false;
- Hooks::run( 'UserIsBlockedGlobally', [ &$this, $ip, &$blocked ] );
- $this->mBlockedGlobally = (bool)$blocked;
- return $this->mBlockedGlobally;
+ $block = null;
+ Hooks::run( 'UserIsBlockedGlobally', [ &$this, $ip, &$blocked, &$block ] );
+
+ if ( $blocked && $block === null ) {
+ // back-compat: UserIsBlockedGlobally didn't have $block param first
+ $block = new Block;
+ $block->setTarget( $ip );
+ }
+
+ $this->mGlobalBlock = $blocked ? $block : false;
+ return $this->mGlobalBlock ?: null;
}
/**