Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 78 |
|
0.00% |
0 / 8 |
CRAP | |
0.00% |
0 / 1 |
EchoUserRightsPresentationModel | |
0.00% |
0 / 78 |
|
0.00% |
0 / 8 |
380 | |
0.00% |
0 / 1 |
getIconType | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getHeaderMessage | |
0.00% |
0 / 42 |
|
0.00% |
0 / 1 |
42 | |||
getBodyMessage | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
6 | |||
getLocalizedGroupNames | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
6 | |||
getPrimaryLink | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
30 | |||
getSecondaryLinks | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getLogLink | |
0.00% |
0 / 13 |
|
0.00% |
0 / 1 |
2 | |||
getSubjectMessageKey | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\Notifications\Formatters; |
4 | |
5 | use MediaWiki\Extension\Notifications\DiscussionParser; |
6 | use MediaWiki\Language\RawMessage; |
7 | use MediaWiki\SpecialPage\SpecialPage; |
8 | use MediaWiki\User\User; |
9 | |
10 | /** |
11 | * Formatter for 'user-rights' notifications |
12 | */ |
13 | class EchoUserRightsPresentationModel extends EchoEventPresentationModel { |
14 | |
15 | public function getIconType() { |
16 | return 'user-rights'; |
17 | } |
18 | |
19 | public function getHeaderMessage() { |
20 | [ $formattedName, $genderName ] = $this->getAgentForOutput(); |
21 | $add = array_map( |
22 | [ $this->language, 'embedBidi' ], |
23 | $this->getLocalizedGroupNames( array_values( $this->event->getExtraParam( 'add', [] ) ) ) |
24 | ); |
25 | $remove = array_map( |
26 | [ $this->language, 'embedBidi' ], |
27 | $this->getLocalizedGroupNames( array_values( $this->event->getExtraParam( 'remove', [] ) ) ) |
28 | ); |
29 | $expiryChanged = array_map( |
30 | [ $this->language, 'embedBidi' ], |
31 | $this->getLocalizedGroupNames( array_values( $this->event->getExtraParam( 'expiry-changed', [] ) ) ) |
32 | ); |
33 | if ( $expiryChanged ) { |
34 | $msg = $this->msg( 'notification-header-user-rights-expiry-change' ); |
35 | $msg->params( $genderName ); |
36 | $msg->params( $this->language->commaList( $expiryChanged ) ); |
37 | $msg->params( count( $expiryChanged ) ); |
38 | $msg->params( $this->getViewingUserForGender() ); |
39 | return $msg; |
40 | } elseif ( $add && !$remove ) { |
41 | $msg = $this->msg( 'notification-header-user-rights-add-only' ); |
42 | $msg->params( $genderName ); |
43 | $msg->params( $this->language->commaList( $add ) ); |
44 | $msg->params( count( $add ) ); |
45 | $msg->params( $this->getViewingUserForGender() ); |
46 | return $msg; |
47 | } elseif ( !$add && $remove ) { |
48 | $msg = $this->msg( 'notification-header-user-rights-remove-only' ); |
49 | $msg->params( $genderName ); |
50 | $msg->params( $this->language->commaList( $remove ) ); |
51 | $msg->params( count( $remove ) ); |
52 | $msg->params( $this->getViewingUserForGender() ); |
53 | return $msg; |
54 | } else { |
55 | $msg = $this->msg( 'notification-header-user-rights-add-and-remove' ); |
56 | $msg->params( $genderName ); |
57 | $msg->params( $this->language->commaList( $add ) ); |
58 | $msg->params( count( $add ) ); |
59 | $msg->params( $this->language->commaList( $remove ) ); |
60 | $msg->params( count( $remove ) ); |
61 | $msg->params( $this->getViewingUserForGender() ); |
62 | return $msg; |
63 | } |
64 | } |
65 | |
66 | public function getBodyMessage() { |
67 | $reason = $this->event->getExtraParam( 'reason' ); |
68 | if ( $reason ) { |
69 | $text = DiscussionParser::getTextSnippet( $reason, $this->language ); |
70 | return new RawMessage( "$1", [ $text ] ); |
71 | } |
72 | return false; |
73 | } |
74 | |
75 | private function getLocalizedGroupNames( array $names ) { |
76 | return array_map( function ( $name ) { |
77 | $msg = $this->msg( 'group-' . $name ); |
78 | return $msg->isBlank() ? $name : $msg->text(); |
79 | }, $names ); |
80 | } |
81 | |
82 | public function getPrimaryLink() { |
83 | $addedGroups = array_values( $this->event->getExtraParam( 'add', [] ) ); |
84 | $removedGroups = array_values( $this->event->getExtraParam( 'remove', [] ) ); |
85 | if ( $addedGroups !== [] && $removedGroups === [] ) { |
86 | $fragment = $addedGroups[0]; |
87 | } elseif ( $addedGroups === [] && $removedGroups !== [] ) { |
88 | $fragment = $removedGroups[0]; |
89 | } else { |
90 | $fragment = ''; |
91 | } |
92 | return [ |
93 | 'url' => SpecialPage::getTitleFor( 'Listgrouprights', false, $fragment )->getFullURL(), |
94 | 'label' => $this->msg( 'echo-learn-more' )->text() |
95 | ]; |
96 | } |
97 | |
98 | public function getSecondaryLinks() { |
99 | return [ $this->getAgentLink(), $this->getLogLink() ]; |
100 | } |
101 | |
102 | private function getLogLink() { |
103 | $affectedUserPage = User::newFromId( $this->event->getExtraParam( 'user' ) )->getUserPage(); |
104 | $query = [ |
105 | 'type' => 'rights', |
106 | 'page' => $affectedUserPage->getPrefixedText(), |
107 | 'user' => $this->event->getAgent()->getName(), |
108 | ]; |
109 | return [ |
110 | 'label' => $this->msg( 'echo-log' )->text(), |
111 | 'url' => SpecialPage::getTitleFor( 'Log' )->getFullURL( $query ), |
112 | 'description' => '', |
113 | 'icon' => false, |
114 | 'prioritized' => true, |
115 | ]; |
116 | } |
117 | |
118 | protected function getSubjectMessageKey() { |
119 | return 'notification-user-rights-email-subject'; |
120 | } |
121 | } |