Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
94.12% covered (success)
94.12%
16 / 17
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
UserGroupManagerFactory
94.12% covered (success)
94.12%
16 / 17
50.00% covered (danger)
50.00%
1 / 2
5.01
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
 getUserGroupManager
93.75% covered (success)
93.75%
15 / 16
0.00% covered (danger)
0.00%
0 / 1
4.00
1<?php
2/**
3 * @license GPL-2.0-or-later
4 * @file
5 */
6
7namespace MediaWiki\User;
8
9use MediaWiki\Config\ServiceOptions;
10use MediaWiki\HookContainer\HookContainer;
11use MediaWiki\JobQueue\JobQueueGroupFactory;
12use MediaWiki\User\TempUser\TempUserConfig;
13use Wikimedia\Rdbms\ILBFactory;
14use Wikimedia\Rdbms\ReadOnlyMode;
15
16/**
17 * Factory service for UserGroupManager instances. This allows UserGroupManager to be created for
18 * cross-wiki access.
19 *
20 * @since 1.35
21 * @ingroup User
22 */
23class UserGroupManagerFactory {
24
25    /**
26     * @var UserGroupManager[] User group manager instances indexed by wiki
27     */
28    private $instances = [];
29
30    /**
31     * @param ServiceOptions $options
32     * @param ReadOnlyMode $readOnlyMode
33     * @param ILBFactory $dbLoadBalancerFactory
34     * @param HookContainer $hookContainer
35     * @param JobQueueGroupFactory $jobQueueGroupFactory
36     * @param TempUserConfig $tempUserConfig Assumed to be the same across all domains.
37     * @param UserRequirementsConditionCheckerFactory $userRequirementsConditionCheckerFactory
38     * @param callable[] $clearCacheCallbacks
39     */
40    public function __construct(
41        private readonly ServiceOptions $options,
42        private readonly ReadOnlyMode $readOnlyMode,
43        private readonly ILBFactory $dbLoadBalancerFactory,
44        private readonly HookContainer $hookContainer,
45        private readonly JobQueueGroupFactory $jobQueueGroupFactory,
46        private readonly TempUserConfig $tempUserConfig,
47        private readonly UserRequirementsConditionCheckerFactory $userRequirementsConditionCheckerFactory,
48        private readonly array $clearCacheCallbacks = [],
49    ) {
50    }
51
52    /**
53     * @param string|false $wikiId
54     * @return UserGroupManager
55     */
56    public function getUserGroupManager( $wikiId = UserIdentity::LOCAL ): UserGroupManager {
57        if ( is_string( $wikiId ) && $this->dbLoadBalancerFactory->getLocalDomainID() === $wikiId ) {
58            $wikiId = UserIdentity::LOCAL;
59        }
60        $key = (string)$wikiId;
61        if ( !isset( $this->instances[$key] ) ) {
62            $this->instances[$key] = new UserGroupManager(
63                $this->options,
64                $this->readOnlyMode,
65                $this->dbLoadBalancerFactory,
66                $this->hookContainer,
67                $this->jobQueueGroupFactory->makeJobQueueGroup( $wikiId ),
68                $this->tempUserConfig,
69                $this->userRequirementsConditionCheckerFactory,
70                $this->clearCacheCallbacks,
71                $wikiId
72            );
73        }
74        return $this->instances[$key];
75    }
76}