Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
DiscussionToolsHooks
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 2
132
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 onDiscussionToolsAddOverflowMenuItems
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
110
1<?php
2/**
3 * DiscussionTools hooks for listening to our own hooks
4 *
5 * @file
6 * @ingroup Extensions
7 * @license MIT
8 */
9
10namespace MediaWiki\Extension\DiscussionTools\Hooks;
11
12use ExtensionRegistry;
13use MediaWiki\Config\Config;
14use MediaWiki\Config\ConfigFactory;
15use MediaWiki\Context\IContextSource;
16use MediaWiki\Extension\DiscussionTools\OverflowMenuItem;
17use MediaWiki\User\UserNameUtils;
18
19class DiscussionToolsHooks implements
20    DiscussionToolsAddOverflowMenuItemsHook
21{
22    private Config $config;
23    private UserNameUtils $userNameUtils;
24
25    public function __construct(
26        ConfigFactory $configFactory,
27        UserNameUtils $userNameUtils
28    ) {
29        $this->config = $configFactory->makeConfig( 'discussiontools' );
30        $this->userNameUtils = $userNameUtils;
31    }
32
33    /**
34     * @param OverflowMenuItem[] &$overflowMenuItems
35     * @param string[] &$resourceLoaderModules
36     * @param array $threadItemData
37     * @param IContextSource $contextSource
38     * @return bool|void
39     */
40    public function onDiscussionToolsAddOverflowMenuItems(
41        array &$overflowMenuItems,
42        array &$resourceLoaderModules,
43        array $threadItemData,
44        IContextSource $contextSource
45    ) {
46        if (
47            ( $threadItemData['type'] ?? null ) === 'heading' &&
48            !( $threadItemData['uneditableSection'] ?? false ) &&
49            $contextSource->getSkin()->getSkinName() === 'minerva'
50        ) {
51            $overflowMenuItems[] = new OverflowMenuItem(
52                'edit',
53                'edit',
54                $contextSource->msg( 'skin-view-edit' ),
55                2
56            );
57        }
58
59        if ( $this->config->get( 'DiscussionToolsEnableThanks' ) ) {
60            $user = $contextSource->getUser();
61            $showThanks = ExtensionRegistry::getInstance()->isLoaded( 'Thanks' );
62            if ( $showThanks && ( $threadItemData['type'] ?? null ) === 'comment' && $user->isNamed() ) {
63                $recipient = $this->userNameUtils->getCanonical( $threadItemData['author'], UserNameUtils::RIGOR_NONE );
64
65                if (
66                    $recipient !== $user->getName() &&
67                    !$this->userNameUtils->isIP( $recipient )
68                ) {
69                    $overflowMenuItems[] = new OverflowMenuItem(
70                        'thank',
71                        'heart',
72                        $contextSource->msg( 'thanks-button-thank' ),
73                    );
74                }
75            }
76        }
77    }
78}