Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 98 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
EmailParticipantsModule | |
0.00% |
0 / 98 |
|
0.00% |
0 / 3 |
12 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
createContent | |
0.00% |
0 / 17 |
|
0.00% |
0 / 1 |
2 | |||
getEmailForm | |
0.00% |
0 / 80 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | declare( strict_types=1 ); |
4 | |
5 | namespace MediaWiki\Extension\CampaignEvents\FrontendModules; |
6 | |
7 | use Language; |
8 | use OOUI\ButtonWidget; |
9 | use OOUI\FieldLayout; |
10 | use OOUI\FieldsetLayout; |
11 | use OOUI\MessageWidget; |
12 | use OOUI\MultilineTextInputWidget; |
13 | use OOUI\PanelLayout; |
14 | use OOUI\Tag; |
15 | use OOUI\TextInputWidget; |
16 | use OOUI\Widget; |
17 | use Wikimedia\Message\IMessageFormatterFactory; |
18 | use Wikimedia\Message\ITextFormatter; |
19 | use Wikimedia\Message\MessageValue; |
20 | |
21 | class EmailParticipantsModule { |
22 | |
23 | private IMessageFormatterFactory $messageFormatterFactory; |
24 | |
25 | /** |
26 | * @param IMessageFormatterFactory $messageFormatterFactory |
27 | */ |
28 | public function __construct( |
29 | IMessageFormatterFactory $messageFormatterFactory |
30 | ) { |
31 | $this->messageFormatterFactory = $messageFormatterFactory; |
32 | } |
33 | |
34 | /** |
35 | * @param Language $language |
36 | * @return Tag |
37 | * |
38 | * @note Ideally, this wouldn't use MW-specific classes for l10n, but it's hard-ish to avoid and |
39 | * probably not worth doing. |
40 | */ |
41 | public function createContent( |
42 | Language $language |
43 | ): Tag { |
44 | $msgFormatter = $this->messageFormatterFactory->getTextFormatter( $language->getCode() ); |
45 | $items = []; |
46 | |
47 | $items[] = ( new Tag( 'h2' ) )->appendContent( |
48 | $msgFormatter->format( |
49 | MessageValue::new( 'campaignevents-email-participants-label' ) |
50 | ) |
51 | ); |
52 | $items[] = $this->getEmailForm( $msgFormatter ); |
53 | |
54 | $layout = new PanelLayout( [ |
55 | 'content' => $items, |
56 | 'padded' => false, |
57 | 'framed' => false, |
58 | 'expanded' => false, |
59 | ] ); |
60 | |
61 | return ( new Tag( 'div' ) ) |
62 | ->addClasses( [ 'ext-campaignevents-event-details-email-panel' ] ) |
63 | ->appendContent( $layout ); |
64 | } |
65 | |
66 | /** |
67 | * @param ITextFormatter $msgFormatter |
68 | * @return FieldsetLayout |
69 | */ |
70 | private function getEmailForm( ITextFormatter $msgFormatter ): FieldsetLayout { |
71 | $fields = []; |
72 | |
73 | $recipientsList = ( new Tag( 'div' ) )->addClasses( [ 'ext-campaignevents-details-email-recipient-list' ] ); |
74 | $addRecipientsBtn = new ButtonWidget( [ |
75 | 'framed' => false, |
76 | 'flags' => [ 'progressive' ], |
77 | 'label' => $msgFormatter->format( |
78 | MessageValue::new( 'campaignevents-event-details-email-recipients-link-text' ) |
79 | ), |
80 | 'infusable' => true, |
81 | 'classes' => [ 'ext-campaignevents-details-email-recipients-link' ] |
82 | ] ); |
83 | |
84 | $fields[] = new FieldLayout( |
85 | new Widget( [ |
86 | 'content' => [ $recipientsList, $addRecipientsBtn ] |
87 | ] ), |
88 | [ |
89 | 'label' => $msgFormatter->format( |
90 | MessageValue::new( 'campaignevents-event-details-email-recipients-label' ) |
91 | ), |
92 | 'align' => 'top', |
93 | ] |
94 | ); |
95 | |
96 | $fields[] = new FieldLayout( |
97 | new MessageWidget( [ |
98 | 'type' => 'warning', |
99 | 'inline' => true, |
100 | ] ), |
101 | [ |
102 | 'infusable' => true, |
103 | 'classes' => [ 'ext-campaignevents-details-email-notification', 'oo-ui-element-hidden' ] |
104 | ] |
105 | ); |
106 | |
107 | $fields[] = new FieldLayout( |
108 | new TextInputWidget( [ |
109 | 'placeholder' => $msgFormatter->format( |
110 | MessageValue::new( 'campaignevents-event-details-email-subject-placeholder' ) |
111 | ), |
112 | 'infusable' => true, |
113 | 'classes' => [ 'ext-campaignevents-details-email-subject' ] |
114 | ] ), |
115 | [ |
116 | 'label' => $msgFormatter->format( |
117 | MessageValue::new( 'campaignevents-event-details-email-subject-label' ) |
118 | ), |
119 | 'align' => 'top', |
120 | ] |
121 | ); |
122 | |
123 | $fields[] = new FieldLayout( |
124 | new MultiLineTextInputWidget( [ |
125 | 'placeholder' => $msgFormatter->format( |
126 | MessageValue::new( 'campaignevents-event-details-email-message-placeholder' ) |
127 | ), |
128 | 'infusable' => true, |
129 | 'classes' => [ 'ext-campaignevents-details-email-message' ], |
130 | 'minLength' => 10, |
131 | 'maxLength' => 2000, |
132 | 'rows' => 17, |
133 | ] ), |
134 | [ |
135 | 'label' => $msgFormatter->format( |
136 | MessageValue::new( 'campaignevents-event-details-email-message-label' ) |
137 | ), |
138 | 'align' => 'top', |
139 | ] |
140 | ); |
141 | |
142 | $fields[] = new FieldLayout( |
143 | new ButtonWidget( [ |
144 | 'label' => $msgFormatter->format( |
145 | MessageValue::new( 'campaignevents-event-details-email-recipients-button-text' ) |
146 | ), |
147 | 'classes' => [ 'ext-campaignevents-details-email-button' ], |
148 | 'infusable' => true, |
149 | 'flags' => [ 'primary', 'progressive' ], |
150 | 'disabled' => true, |
151 | ] ) |
152 | ); |
153 | |
154 | return new FieldsetLayout( [ |
155 | 'items' => $fields, |
156 | 'classes' => [ 'ext-campaignevents-details-email-form' ] |
157 | ] ); |
158 | } |
159 | |
160 | } |