Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
15.62% |
5 / 32 |
|
33.33% |
1 / 3 |
CRAP | |
0.00% |
0 / 1 |
UserMergeHooks | |
15.62% |
5 / 32 |
|
33.33% |
1 / 3 |
57.65 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
onUserGetReservedNames | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
2 | |||
onContributionsToolLinks | |
0.00% |
0 / 25 |
|
0.00% |
0 / 1 |
42 |
1 | <?php |
2 | |
3 | use MediaWiki\Config\ConfigFactory; |
4 | use MediaWiki\Hook\ContributionsToolLinksHook; |
5 | use MediaWiki\Title\Title; |
6 | use MediaWiki\User\Hook\UserGetReservedNamesHook; |
7 | use MediaWiki\User\UserGroupManager; |
8 | |
9 | class UserMergeHooks implements |
10 | UserGetReservedNamesHook, |
11 | ContributionsToolLinksHook |
12 | { |
13 | private ConfigFactory $configFactory; |
14 | private UserGroupManager $userGroupManager; |
15 | |
16 | public function __construct( |
17 | ConfigFactory $configFactory, |
18 | UserGroupManager $userGroupManager |
19 | ) { |
20 | $this->configFactory = $configFactory; |
21 | $this->userGroupManager = $userGroupManager; |
22 | } |
23 | |
24 | /** |
25 | * UserGetReservedNames hook handler |
26 | * |
27 | * @param string[] &$reservedUsernames Already registered reserved names |
28 | */ |
29 | public function onUserGetReservedNames( &$reservedUsernames ) { |
30 | $deleteEnabled = $this->configFactory |
31 | ->makeConfig( 'usermerge' ) |
32 | ->get( 'UserMergeEnableDelete' ); |
33 | |
34 | if ( $deleteEnabled ) { |
35 | $reservedUsernames[] = 'Anonymous'; |
36 | } |
37 | } |
38 | |
39 | /** |
40 | * Handler for ContributionsToolLinks hook |
41 | * |
42 | * @param int $id |
43 | * @param Title $nt |
44 | * @param array &$tools |
45 | * @param SpecialPage $sp for context |
46 | */ |
47 | public function onContributionsToolLinks( |
48 | $id, Title $nt, array &$tools, SpecialPage $sp |
49 | ) { |
50 | if ( $id === 0 || $id === $sp->getUser()->getId() ) { |
51 | return; |
52 | } |
53 | if ( !$sp->getAuthority()->isAllowed( 'usermerge' ) ) { |
54 | return; |
55 | } |
56 | $targetUser = User::newFromId( $id ); |
57 | if ( array_intersect( |
58 | $this->userGroupManager->getUserGroups( $targetUser ), |
59 | $sp->getConfig()->get( 'UserMergeProtectedGroups' ) |
60 | ) ) { |
61 | return; |
62 | } |
63 | |
64 | $username = $nt->getText(); |
65 | $linkRenderer = $sp->getLinkRenderer(); |
66 | $tools['usermerge-merge'] = $linkRenderer->makeKnownLink( |
67 | SpecialPage::getTitleFor( 'UserMerge' ), |
68 | $sp->msg( 'usermerge-merge-linkoncontribs', $username )->text(), |
69 | [], |
70 | [ 'wpolduser' => $username ] |
71 | ); |
72 | if ( $sp->getConfig()->get( 'UserMergeEnableDelete' ) ) { |
73 | $tools['usermerge-delete'] = $linkRenderer->makeKnownLink( |
74 | SpecialPage::getTitleFor( 'UserMerge' ), |
75 | $sp->msg( 'usermerge-delete-linkoncontribs', $username )->text(), |
76 | [], |
77 | [ 'wpolduser' => $username, 'wpdelete' => '1' ] |
78 | ); |
79 | } |
80 | } |
81 | |
82 | } |