Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
67.65% |
23 / 34 |
|
66.67% |
2 / 3 |
CRAP | |
0.00% |
0 / 1 |
Preferences | |
67.65% |
23 / 34 |
|
66.67% |
2 / 3 |
15.10 | |
0.00% |
0 / 1 |
__construct | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
1 | |||
onGetPreferences | |
100.00% |
20 / 20 |
|
100.00% |
1 / 1 |
3 | |||
onSaveUserOptions | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
56 |
1 | <?php |
2 | |
3 | namespace MediaWiki\CheckUser\HookHandler; |
4 | |
5 | use MediaWiki\CheckUser\Logging\TemporaryAccountLoggerFactory; |
6 | use MediaWiki\Context\RequestContext; |
7 | use MediaWiki\Permissions\PermissionManager; |
8 | use MediaWiki\Preferences\Hook\GetPreferencesHook; |
9 | use MediaWiki\User\UserIdentity; |
10 | use MessageLocalizer; |
11 | |
12 | class 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 | } |