Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
45 / 45 |
|
100.00% |
3 / 3 |
CRAP | |
100.00% |
1 / 1 |
ToolLinksHandler | |
100.00% |
45 / 45 |
|
100.00% |
3 / 3 |
12 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
1 | |||
onContributionsToolLinks | |
100.00% |
24 / 24 |
|
100.00% |
1 / 1 |
6 | |||
onUserToolLinksEdit | |
100.00% |
16 / 16 |
|
100.00% |
1 / 1 |
5 |
1 | <?php |
2 | |
3 | namespace MediaWiki\CheckUser\HookHandler; |
4 | |
5 | use MediaWiki\Hook\ContributionsToolLinksHook; |
6 | use MediaWiki\Hook\UserToolLinksEditHook; |
7 | use MediaWiki\Linker\LinkRenderer; |
8 | use MediaWiki\Permissions\PermissionManager; |
9 | use MediaWiki\SpecialPage\SpecialPage; |
10 | use MediaWiki\SpecialPage\SpecialPageFactory; |
11 | use MediaWiki\Title\Title; |
12 | use MediaWiki\User\UserIdentityLookup; |
13 | use MediaWiki\User\UserIdentityUtils; |
14 | use RequestContext; |
15 | |
16 | class 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 | } |