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