Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
45 / 45
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
ToolLinksHandler
100.00% covered (success)
100.00%
45 / 45
100.00% covered (success)
100.00%
3 / 3
12
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onContributionsToolLinks
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
1 / 1
6
 onUserToolLinksEdit
100.00% covered (success)
100.00%
16 / 16
100.00% covered (success)
100.00%
1 / 1
5
1<?php
2
3namespace MediaWiki\CheckUser\HookHandler;
4
5use MediaWiki\Hook\ContributionsToolLinksHook;
6use MediaWiki\Hook\UserToolLinksEditHook;
7use MediaWiki\Linker\LinkRenderer;
8use MediaWiki\Permissions\PermissionManager;
9use MediaWiki\SpecialPage\SpecialPage;
10use MediaWiki\SpecialPage\SpecialPageFactory;
11use MediaWiki\Title\Title;
12use MediaWiki\User\UserIdentityLookup;
13use MediaWiki\User\UserIdentityUtils;
14use RequestContext;
15
16class ToolLinksHandler implements ContributionsToolLinksHook, UserToolLinksEditHook {
17
18    private PermissionManager $permissionManager;
19    private SpecialPageFactory $specialPageFactory;
20    private LinkRenderer $linkRenderer;
21    private UserIdentityLookup $userIdentityLookup;
22    private UserIdentityUtils $userIdentityUtils;
23
24    /**
25     * @param PermissionManager $permissionManager
26     * @param SpecialPageFactory $specialPageFactory
27     * @param LinkRenderer $linkRenderer
28     * @param UserIdentityLookup $userIdentityLookup
29     * @param UserIdentityUtils $userIdentityUtils
30     */
31    public function __construct(
32        PermissionManager $permissionManager,
33        SpecialPageFactory $specialPageFactory,
34        LinkRenderer $linkRenderer,
35        UserIdentityLookup $userIdentityLookup,
36        UserIdentityUtils $userIdentityUtils
37    ) {
38        $this->permissionManager = $permissionManager;
39        $this->specialPageFactory = $specialPageFactory;
40        $this->linkRenderer = $linkRenderer;
41        $this->userIdentityLookup = $userIdentityLookup;
42        $this->userIdentityUtils = $userIdentityUtils;
43    }
44
45    /**
46     * Add a link to Special:CheckUser and Special:CheckUserLog
47     * on Special:Contributions/<username> for
48     * privileged users.
49     *
50     * @param int $id User ID
51     * @param Title $nt User page title
52     * @param string[] &$links Tool links
53     * @param SpecialPage $sp Special page
54     */
55    public function onContributionsToolLinks(
56        $id, Title $nt, array &$links, SpecialPage $sp
57    ) {
58        $user = $sp->getUser();
59        $linkRenderer = $sp->getLinkRenderer();
60
61        if ( $this->permissionManager->userHasRight( $user, 'checkuser' ) ) {
62            $links['checkuser'] = $linkRenderer->makeKnownLink(
63                SpecialPage::getTitleFor( 'CheckUser' ),
64                $sp->msg( 'checkuser-contribs' )->text(),
65                [ 'class' => 'mw-contributions-link-check-user' ],
66                [ 'user' => $nt->getText() ]
67            );
68        }
69        if ( $this->permissionManager->userHasRight( $user, 'checkuser-log' ) ) {
70            $links['checkuser-log'] = $linkRenderer->makeKnownLink(
71                SpecialPage::getTitleFor( 'CheckUserLog' ),
72                $sp->msg( 'checkuser-contribs-log' )->text(),
73                [ 'class' => 'mw-contributions-link-check-user-log' ],
74                [ 'cuSearch' => $nt->getText() ]
75            );
76            $userIdentity = $this->userIdentityLookup->getUserIdentityByUserId( $id );
77            if ( $id && $userIdentity && $this->userIdentityUtils->isNamed( $userIdentity ) ) {
78                $links['checkuser-log-initiator'] = $linkRenderer->makeKnownLink(
79                    SpecialPage::getTitleFor( 'CheckUserLog' ),
80                    $sp->msg( 'checkuser-contribs-log-initiator' )->text(),
81                    [ 'class' => 'mw-contributions-link-check-user-initiator' ],
82                    [ 'cuInitiator' => $nt->getText() ]
83                );
84            }
85        }
86    }
87
88    /** @inheritDoc */
89    public function onUserToolLinksEdit( $userId, $userText, &$items ) {
90        $requestTitle = RequestContext::getMain()->getTitle();
91        if (
92            $requestTitle !== null &&
93            $requestTitle->isSpecialPage()
94        ) {
95            $specialPageName = $this->specialPageFactory->resolveAlias( $requestTitle->getText() )[0];
96            if ( $specialPageName === 'CheckUserLog' ) {
97                $items[] = $this->linkRenderer->makeLink(
98                    SpecialPage::getTitleFor( 'CheckUserLog', $userText ),
99                    wfMessage( 'checkuser-log-checks-on' )->text()
100                );
101            } elseif ( $specialPageName === 'CheckUser' ) {
102                $items[] = $this->linkRenderer->makeLink(
103                    SpecialPage::getTitleFor( 'CheckUser', $userText ),
104                    wfMessage( 'checkuser-toollink-check' )->text(),
105                    [],
106                    [ 'reason' => RequestContext::getMain()->getRequest()->getVal( 'reason', '' ) ]
107                );
108            }
109        }
110    }
111}