Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
70.59% covered (warning)
70.59%
12 / 17
80.00% covered (warning)
80.00%
4 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
StaticUserOptionsLookup
75.00% covered (warning)
75.00%
12 / 16
80.00% covered (warning)
80.00%
4 / 5
10.27
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getDefaultOptions
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getOption
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 getOptions
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
3
 getOptionBatchForUserNames
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace MediaWiki\User\Options;
4
5use MediaWiki\User\UserIdentity;
6use Wikimedia\Rdbms\IDBAccessObject;
7
8/**
9 * A UserOptionsLookup that's just an array. Useful for testing and creating staging environments.
10 * Note that unlike UserOptionsManager, no attempt is made to canonicalize user names.
11 * @since 1.36
12 */
13class StaticUserOptionsLookup extends UserOptionsLookup {
14
15    /**
16     * @param array[] $userMap User options, username => [ option name => value ]
17     * @param mixed[] $defaults Defaults for each option, option name => value
18     */
19    public function __construct(
20        private readonly array $userMap,
21        private readonly array $defaults = [],
22    ) {
23    }
24
25    /** @inheritDoc */
26    public function getDefaultOptions( ?UserIdentity $userIdentity = null ): array {
27        return $this->defaults;
28    }
29
30    /** @inheritDoc */
31    public function getOption(
32        UserIdentity $user,
33        string $oname,
34        $defaultOverride = null,
35        bool $ignoreHidden = false,
36        int $queryFlags = IDBAccessObject::READ_NORMAL
37    ) {
38        $userOptions = $this->getOptions( $user );
39        if ( array_key_exists( $oname, $userOptions ) ) {
40            return $userOptions[$oname];
41        } else {
42            return $defaultOverride;
43        }
44    }
45
46    /** @inheritDoc */
47    public function getOptions(
48        UserIdentity $user,
49        int $flags = 0,
50        int $queryFlags = IDBAccessObject::READ_NORMAL
51    ): array {
52        $userOptions = [];
53        if ( $user->isRegistered() ) {
54            $userOptions = $this->userMap[$user->getName()] ?? [];
55        }
56        if ( !( $flags & self::EXCLUDE_DEFAULTS ) ) {
57            $userOptions += $this->defaults;
58        }
59        return $userOptions;
60    }
61
62    /** @inheritDoc */
63    public function getOptionBatchForUserNames( array $users, string $key ) {
64        $options = [];
65        foreach ( $users as $name ) {
66            $options[$name] = $this->userMap[$name][$key] ?? $this->defaults[$key] ?? '';
67        }
68        return $options;
69    }
70}
71
72/** @deprecated class alias since 1.42 */
73class_alias( StaticUserOptionsLookup::class, 'MediaWiki\User\StaticUserOptionsLookup' );