Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
15.15% covered (danger)
15.15%
5 / 33
33.33% covered (danger)
33.33%
1 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
UserMergeHooks
15.15% covered (danger)
15.15%
5 / 33
33.33% covered (danger)
33.33%
1 / 3
58.48
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 onUserGetReservedNames
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
 onContributionsToolLinks
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
42
1<?php
2
3use MediaWiki\Config\ConfigFactory;
4use MediaWiki\Hook\ContributionsToolLinksHook;
5use MediaWiki\SpecialPage\SpecialPage;
6use MediaWiki\Title\Title;
7use MediaWiki\User\Hook\UserGetReservedNamesHook;
8use MediaWiki\User\UserFactory;
9use MediaWiki\User\UserGroupManager;
10
11class 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}