MediaWiki REL1_35
PreferencesFormOOUI.php
Go to the documentation of this file.
1<?php
27 // Override default value from HTMLForm
28 protected $mSubSectionBeforeFields = false;
29
32
34 private $privateInfoEditable = true;
35
37 private $optionsEditable = true;
38
42 public function setModifiedUser( $user ) {
43 $this->modifiedUser = $user;
44 }
45
49 public function getModifiedUser() {
50 if ( $this->modifiedUser === null ) {
51 return $this->getUser();
52 } else {
53 return $this->modifiedUser;
54 }
55 }
56
60 public function isPrivateInfoEditable() {
61 return $this->privateInfoEditable;
62 }
63
68 public function setPrivateInfoEditable( $editable ) {
69 $this->privateInfoEditable = $editable;
70 }
71
75 public function areOptionsEditable() {
76 return $this->optionsEditable;
77 }
78
82 public function setOptionsEditable( $optionsEditable ) {
83 $this->optionsEditable = $optionsEditable;
84 }
85
93 return [];
94 }
95
100 public function wrapForm( $html ) {
101 $html = Xml::tags( 'div', [ 'id' => 'preferences' ], $html );
102
103 return parent::wrapForm( $html );
104 }
105
109 public function getButtons() {
110 if ( !$this->areOptionsEditable() && !$this->isPrivateInfoEditable() ) {
111 return '';
112 }
113
114 $html = parent::getButtons();
115
116 if ( $this->areOptionsEditable() ) {
117 $t = $this->getTitle()->getSubpage( 'reset' );
118
119 $html .= new OOUI\ButtonWidget( [
120 'infusable' => true,
121 'id' => 'mw-prefs-restoreprefs',
122 'label' => $this->msg( 'restoreprefs' )->text(),
123 'href' => $t->getLinkURL(),
124 'flags' => [ 'destructive' ],
125 'framed' => false,
126 ] );
127
128 $html = Xml::tags( 'div', [ 'class' => 'mw-prefs-buttons' ], $html );
129 }
130
131 return $html;
132 }
133
140 public function filterDataForSubmit( $data ) {
141 foreach ( $this->mFlatFields as $fieldname => $field ) {
142 if ( $field instanceof HTMLNestedFilterable ) {
143 // @phan-suppress-next-next-line PhanUndeclaredProperty All HTMLForm fields have mParams,
144 // but the instanceof confuses phan, which doesn't support intersections
145 $info = $field->mParams;
146 $prefix = $info['prefix'] ?? $fieldname;
147 foreach ( $field->filterDataForSubmit( $data[$fieldname] ) as $key => $value ) {
148 $data["$prefix$key"] = $value;
149 }
150 unset( $data[$fieldname] );
151 }
152 }
153
154 return $data;
155 }
156
157 protected function wrapFieldSetSection( $legend, $section, $attributes, $isRoot ) {
158 $layout = parent::wrapFieldSetSection( $legend, $section, $attributes, $isRoot );
159
160 $layout->addClasses( [ 'mw-prefs-fieldset-wrapper' ] );
161 $layout->removeClasses( [ 'oo-ui-panelLayout-framed' ] );
162
163 return $layout;
164 }
165
170 public function getBody() {
171 $tabPanels = [];
172 foreach ( $this->mFieldTree as $key => $val ) {
173 if ( !is_array( $val ) ) {
174 wfDebug( __METHOD__ . " encountered a field not attached to a section: '$key'" );
175 continue;
176 }
177 $label = $this->getLegend( $key );
178 $content =
179 $this->getHeaderText( $key ) .
180 $this->displaySection(
181 $val,
182 "",
183 "mw-prefsection-$key-"
184 ) .
185 $this->getFooterText( $key );
186
187 $tabPanels[] = new OOUI\TabPanelLayout( 'mw-prefsection-' . $key, [
188 'classes' => [ 'mw-htmlform-autoinfuse-lazy' ],
189 'label' => $label,
190 'content' => new OOUI\FieldsetLayout( [
191 'classes' => [ 'mw-prefs-section-fieldset' ],
192 'id' => "mw-prefsection-$key",
193 'label' => $label,
194 'items' => [
195 new OOUI\Widget( [
196 'content' => new OOUI\HtmlSnippet( $content )
197 ] ),
198 ],
199 ] ),
200 'expanded' => false,
201 'framed' => true,
202 ] );
203 }
204
205 $indexLayout = new OOUI\IndexLayout( [
206 'infusable' => true,
207 'expanded' => false,
208 'autoFocus' => false,
209 'classes' => [ 'mw-prefs-tabs' ],
210 ] );
211 $indexLayout->addTabPanels( $tabPanels );
212
213 $header = $this->formatFormHeader();
214 $form = new OOUI\PanelLayout( [
215 'framed' => true,
216 'expanded' => false,
217 'classes' => [ 'mw-prefs-tabs-wrapper' ],
218 'content' => $indexLayout
219 ] );
220
221 return $header . $form;
222 }
223
230 public function getLegend( $key ) {
231 $legend = parent::getLegend( $key );
232 $this->getHookRunner()->onPreferencesGetLegend( $this, $key, $legend );
233 return $legend;
234 }
235
240 public function getPreferenceSections() {
241 return array_keys( array_filter( $this->mFieldTree, 'is_array' ) );
242 }
243}
getUser()
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
msg( $key,... $params)
Get a Message object with context set Parameters are the same as wfMessage()
getFooterText( $section=null)
Get footer text.
Definition HTMLForm.php:914
displaySection( $fields, $sectionName='', $fieldsetIDPrefix='', &$hasUserVisibleFields=false)
Compact stacked vertical format for forms, implemented using OOUI widgets.
getHeaderText( $section=null)
Get header text.
Form to edit user preferences.
filterDataForSubmit( $data)
Separate multi-option preferences into multiple preferences, since we have to store them separately.
getPreferenceSections()
Get the keys of each top level preference section.
getBody()
Get the whole body of the form.
getLegend( $key)
Get the "<legend>" for a given section key.
wrapFieldSetSection( $legend, $section, $attributes, $isRoot)
Wraps the given $section into an user-visible fieldset.Stable to overridestring The fieldset's HtmlOO...
getExtraSuccessRedirectParameters()
Get extra parameters for the query string when redirecting after successful save.
setPrivateInfoEditable( $editable)
Whether the.
setOptionsEditable( $optionsEditable)
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
Definition User.php:60
$content
Definition router.php:76
$header