34use Wikimedia\Assert\Assert;
62 private $defaultOptions =
null;
84 parent::__construct( $userNameUtils );
86 $this->serviceOptions = $options;
87 $this->contentLang = $contentLang;
88 $this->hookRunner =
new HookRunner( $hookContainer );
89 $this->nsInfo = $nsInfo;
90 $this->conditionalDefaultsLookup = $conditionalUserOptionsDefaultsLookup;
91 $this->userIdentityLookup = $userIdentityLookup;
97 private function getGenericDefaultOptions(): array {
98 if ( $this->defaultOptions !== null ) {
99 return $this->defaultOptions;
107 $contentLangCode = $this->contentLang->toString();
108 $LangsWithStaticDefaultVariant = LanguageConverter::$languagesWithStaticDefaultVariant;
109 $staticDefaultVariant = $LangsWithStaticDefaultVariant[$contentLangCode] ?? $contentLangCode;
110 $this->defaultOptions[
'language'] = $contentLangCode;
111 $this->defaultOptions[
'variant'] = $staticDefaultVariant;
112 foreach ( LanguageConverter::$languagesWithVariants as $langCode ) {
113 $staticDefaultVariant = $LangsWithStaticDefaultVariant[$langCode] ?? $langCode;
114 $this->defaultOptions[
"variant-$langCode"] = $staticDefaultVariant;
121 foreach ( $this->nsInfo->getValidNamespaces() as $n ) {
122 $this->defaultOptions[
'searchNs' . $n] = ( $nsSearchDefault[$n] ?? false ) ? 1 : 0;
124 $this->defaultOptions[
'skin'] = Skin::normalizeKey(
127 $this->hookRunner->onUserGetDefaultOptions( $this->defaultOptions );
129 return $this->defaultOptions;
136 $defaultOptions = $this->getGenericDefaultOptions();
139 if ( $userIdentity ) {
140 $cacheKey = $this->getCacheKey( $userIdentity );
141 if ( isset( $this->cache[$cacheKey] ) ) {
142 return $this->cache[$cacheKey];
144 $conditionallyDefaultOptions = $this->conditionalDefaultsLookup->getConditionallyDefaultOptions();
145 foreach ( $conditionallyDefaultOptions as $optionName ) {
146 $conditionalDefault = $this->conditionalDefaultsLookup->getOptionDefaultForUser(
147 $optionName, $userIdentity
149 if ( $conditionalDefault !==
null ) {
150 $defaultOptions[$optionName] = $conditionalDefault;
153 $this->cache[$cacheKey] = $defaultOptions;
156 return $defaultOptions;
165 $defaultOverride =
null,
166 bool $ignoreHidden =
false,
167 int $queryFlags = IDBAccessObject::READ_NORMAL
169 $this->verifyUsable( $user, __METHOD__ );
170 return $this->getDefaultOption( $oname ) ?? $defaultOverride;
179 int $queryFlags = IDBAccessObject::READ_NORMAL
181 $this->verifyUsable( $user, __METHOD__ );
182 if ( $flags & self::EXCLUDE_DEFAULTS ) {
185 return $this->getDefaultOptions();
202 private function verifyUsable(
UserIdentity $user,
string $fname ) {
203 if ( defined(
'MEDIAWIKI_INSTALL' ) ) {
206 Assert::precondition( !$user->
isRegistered(),
"$fname called on a registered user" );
210 $genericDefault = $this->getGenericDefaultOptions()[$key] ??
'';
211 $options = array_fill_keys( $users, $genericDefault );
212 if ( $this->conditionalDefaultsLookup->hasConditionalDefault( $key ) ) {
213 $userIdentities = $this->userIdentityLookup->newSelectQueryBuilder()
214 ->whereUserNames( $users )
215 ->caller( __METHOD__ )
216 ->fetchUserIdentities();
217 foreach ( $userIdentities as $user ) {
218 $options[$user->getName()] = $this->conditionalDefaultsLookup
219 ->getOptionDefaultForUser( $key, $user );
227class_alias( DefaultOptionsLookup::class,
'MediaWiki\\User\\DefaultOptionsLookup' );
if(!defined('MW_SETUP_CALLBACK'))
A class containing constants representing the names of configuration variables.
const DefaultUserOptions
Name constant for the DefaultUserOptions setting, for use with Config::get()
const DefaultSkin
Name constant for the DefaultSkin setting, for use with Config::get()
const NamespacesToBeSearchedDefault
Name constant for the NamespacesToBeSearchedDefault setting, for use with Config::get()