Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
67.65% covered (warning)
67.65%
23 / 34
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
Preferences
67.65% covered (warning)
67.65%
23 / 34
66.67% covered (warning)
66.67%
2 / 3
15.10
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 onGetPreferences
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
1 / 1
3
 onSaveUserOptions
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
56
1<?php
2
3namespace MediaWiki\CheckUser\HookHandler;
4
5use MediaWiki\CheckUser\Logging\TemporaryAccountLoggerFactory;
6use MediaWiki\Context\RequestContext;
7use MediaWiki\Permissions\PermissionManager;
8use MediaWiki\Preferences\Hook\GetPreferencesHook;
9use MediaWiki\User\UserIdentity;
10use MessageLocalizer;
11
12class Preferences implements GetPreferencesHook {
13
14    /** @var string */
15    public const INVESTIGATE_TOUR_SEEN = 'checkuser-investigate-tour-seen';
16
17    /** @var string */
18    public const INVESTIGATE_FORM_TOUR_SEEN = 'checkuser-investigate-form-tour-seen';
19
20    private PermissionManager $permissionManager;
21    private TemporaryAccountLoggerFactory $loggerFactory;
22    private MessageLocalizer $messageLocalizer;
23
24    /**
25     * @param PermissionManager $permissionManager
26     * @param TemporaryAccountLoggerFactory $loggerFactory
27     */
28    public function __construct(
29        PermissionManager $permissionManager,
30        TemporaryAccountLoggerFactory $loggerFactory
31    ) {
32        $this->permissionManager = $permissionManager;
33        $this->loggerFactory = $loggerFactory;
34        $this->messageLocalizer = RequestContext::getMain();
35    }
36
37    /**
38     * @inheritDoc
39     */
40    public function onGetPreferences( $user, &$preferences ) {
41        $preferences[self::INVESTIGATE_TOUR_SEEN] = [
42            'type' => 'api',
43        ];
44
45        $preferences[self::INVESTIGATE_FORM_TOUR_SEEN] = [
46            'type' => 'api',
47        ];
48
49        if (
50            $this->permissionManager->userHasRight( $user, 'checkuser-temporary-account' ) &&
51            !$this->permissionManager->userHasRight( $user, 'checkuser-temporary-account-no-preference' )
52        ) {
53            $preferences['checkuser-temporary-account-enable-description'] = [
54                'type' => 'info',
55                'default' => $this->messageLocalizer->msg( 'checkuser-tempaccount-enable-preference-description' )
56                    ->parse(),
57                // The following message is generated here:
58                // * prefs-checkuser-tempaccount
59                'section' => 'personal/checkuser-tempaccount',
60                'raw' => true,
61            ];
62            $preferences['checkuser-temporary-account-enable'] = [
63                'type' => 'toggle',
64                'label-message' => 'checkuser-tempaccount-enable-preference',
65                'section' => 'personal/checkuser-tempaccount',
66            ];
67        }
68    }
69
70    /**
71     * @param UserIdentity $user
72     * @param array &$modifiedOptions
73     * @param array $originalOptions
74     */
75    public function onSaveUserOptions( UserIdentity $user, array &$modifiedOptions, array $originalOptions ) {
76        $wasEnabled = !empty( $originalOptions['checkuser-temporary-account-enable'] );
77        $wasDisabled = !$wasEnabled;
78
79        $willEnable = !empty( $modifiedOptions['checkuser-temporary-account-enable'] );
80        $willDisable = isset( $modifiedOptions['checkuser-temporary-account-enable'] ) &&
81            !$modifiedOptions['checkuser-temporary-account-enable'];
82
83        if (
84            ( $wasDisabled && $willEnable ) ||
85            ( $wasEnabled && $willDisable )
86        ) {
87            $logger = $this->loggerFactory->getLogger();
88            if ( $willEnable ) {
89                $logger->logAccessEnabled( $user );
90            } else {
91                $logger->logAccessDisabled( $user );
92            }
93        }
94    }
95
96}