Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
98.04% |
50 / 51 |
|
50.00% |
1 / 2 |
CRAP | |
0.00% |
0 / 1 |
ContributionsHandler | |
98.04% |
50 / 51 |
|
50.00% |
1 / 2 |
10 | |
0.00% |
0 / 1 |
__construct | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
1 | |||
onContribsPager__getQueryInfo | |
97.78% |
44 / 45 |
|
0.00% |
0 / 1 |
9 |
1 | <?php |
2 | |
3 | namespace MediaWiki\CheckUser\HookHandler; |
4 | |
5 | use MediaWiki\CheckUser\Services\CheckUserLookupUtils; |
6 | use MediaWiki\Config\Config; |
7 | use MediaWiki\Hook\ContribsPager__getQueryInfoHook; |
8 | use MediaWiki\Permissions\PermissionManager; |
9 | use MediaWiki\User\Options\UserOptionsLookup; |
10 | use MediaWiki\User\TempUser\TempUserConfig; |
11 | use Wikimedia\IPUtils; |
12 | use Wikimedia\Rdbms\IConnectionProvider; |
13 | use Wikimedia\Rdbms\IExpression; |
14 | |
15 | class ContributionsHandler implements ContribsPager__getQueryInfoHook { |
16 | private Config $config; |
17 | private PermissionManager $permissionManager; |
18 | private IConnectionProvider $dbProvider; |
19 | private TempUserConfig $tempUserConfig; |
20 | private UserOptionsLookup $userOptionsLookup; |
21 | private CheckUserLookupUtils $checkUserLookupUtils; |
22 | |
23 | /** |
24 | * @param Config $config |
25 | * @param PermissionManager $permissionManager |
26 | * @param IConnectionProvider $dbProvider |
27 | * @param TempUserConfig $tempUserConfig |
28 | * @param UserOptionsLookup $userOptionsLookup |
29 | * @param CheckUserLookupUtils $checkUserLookupUtils |
30 | */ |
31 | public function __construct( |
32 | Config $config, |
33 | PermissionManager $permissionManager, |
34 | IConnectionProvider $dbProvider, |
35 | TempUserConfig $tempUserConfig, |
36 | UserOptionsLookup $userOptionsLookup, |
37 | CheckUserLookupUtils $checkUserLookupUtils |
38 | ) { |
39 | $this->config = $config; |
40 | $this->permissionManager = $permissionManager; |
41 | $this->dbProvider = $dbProvider; |
42 | $this->tempUserConfig = $tempUserConfig; |
43 | $this->userOptionsLookup = $userOptionsLookup; |
44 | $this->checkUserLookupUtils = $checkUserLookupUtils; |
45 | } |
46 | |
47 | /** |
48 | * @inheritDoc |
49 | */ |
50 | public function onContribsPager__getQueryInfo( $pager, &$queryInfo ) { |
51 | if ( !$this->tempUserConfig->isEnabled() ) { |
52 | return; |
53 | } |
54 | |
55 | $target = $pager->getTarget(); |
56 | if ( !IPUtils::isValid( $target ) ) { |
57 | // TODO: Handle ranges and change isValid to isIPAddress: T361867 |
58 | return; |
59 | } |
60 | |
61 | $user = $pager->getUser(); |
62 | if ( |
63 | !$this->permissionManager->userHasRight( |
64 | $user, |
65 | 'checkuser-temporary-account-no-preference' |
66 | ) && |
67 | ( |
68 | !$this->permissionManager->userHasRight( |
69 | $user, |
70 | 'checkuser-temporary-account' |
71 | ) || |
72 | !$this->userOptionsLookup->getOption( |
73 | $user, |
74 | 'checkuser-temporary-account-enable' |
75 | ) |
76 | ) |
77 | ) { |
78 | return; |
79 | } |
80 | |
81 | if ( $user->getBlock() ) { |
82 | return; |
83 | } |
84 | |
85 | $dbr = $this->dbProvider->getReplicaDatabase(); |
86 | $ipConds = $this->checkUserLookupUtils->getIPTargetExpr( $target, false, 'cu_changes' ); |
87 | if ( !$ipConds ) { |
88 | return; |
89 | } |
90 | |
91 | $results = $dbr->newSelectQueryBuilder() |
92 | ->select( [ 'cuc_actor', 'actor_name' ] ) |
93 | ->from( 'cu_changes' ) |
94 | ->where( $ipConds ) |
95 | ->andWhere( |
96 | $this->tempUserConfig->getMatchCondition( |
97 | $dbr, |
98 | 'actor_name', |
99 | IExpression::LIKE |
100 | ) |
101 | ) |
102 | ->caller( __METHOD__ ) |
103 | ->groupBy( [ 'cuc_actor', 'actor_name' ] ) |
104 | ->limit( $this->config->get( 'CheckUserMaximumRowCount' ) ) |
105 | ->join( 'actor', null, 'actor_id=cuc_actor' ) |
106 | ->fetchResultSet(); |
107 | |
108 | $names = [ $queryInfo['conds']['actor_name'] ]; |
109 | foreach ( $results as $row ) { |
110 | $names[] = $row->actor_name; |
111 | } |
112 | $queryInfo['conds']['actor_name'] = $names; |
113 | } |
114 | } |