Merge "RCFilters: Minimize url string"
[lhc/web/wiklou.git] / includes / htmlform / fields / HTMLUsersMultiselectField.php
1 <?php
2
3 use MediaWiki\Widget\UsersMultiselectWidget;
4
5 /**
6 * Implements a capsule multiselect input field for user names.
7 *
8 * Besides the parameters recognized by HTMLUserTextField, additional recognized
9 * parameters are:
10 * default - (optional) Array of usernames to use as preset data
11 * placeholder - (optional) Custom placeholder message for input
12 *
13 * The result is the array of usernames
14 *
15 * @note This widget is not likely to remain functional in non-OOUI forms.
16 */
17 class HTMLUsersMultiselectField extends HTMLUserTextField {
18
19 public function loadDataFromRequest( $request ) {
20 if ( !$request->getCheck( $this->mName ) ) {
21 return $this->getDefault();
22 }
23
24 $usersArray = explode( "\n", $request->getText( $this->mName ) );
25 // Remove empty lines
26 $usersArray = array_values( array_filter( $usersArray, function( $username ) {
27 return trim( $username ) !== '';
28 } ) );
29 return $usersArray;
30 }
31
32 public function validate( $value, $alldata ) {
33 if ( !$this->mParams['exists'] ) {
34 return true;
35 }
36
37 if ( is_null( $value ) ) {
38 return false;
39 }
40
41 foreach ( $value as $username ) {
42 $result = parent::validate( $username, $alldata );
43 if ( $result !== true ) {
44 return $result;
45 }
46 }
47
48 return true;
49 }
50
51 public function getInputHTML( $values ) {
52 $this->mParent->getOutput()->enableOOUI();
53 return $this->getInputOOUI( $values );
54 }
55
56 public function getInputOOUI( $values ) {
57 $params = [ 'name' => $this->mName ];
58
59 if ( isset( $this->mParams['default'] ) ) {
60 $params['default'] = $this->mParams['default'];
61 }
62
63 if ( isset( $this->mParams['placeholder'] ) ) {
64 $params['placeholder'] = $this->mParams['placeholder'];
65 } else {
66 $params['placeholder'] = $this->msg( 'mw-widgets-usersmultiselect-placeholder' )
67 ->inContentLanguage()
68 ->plain();
69 }
70
71 if ( !is_null( $values ) ) {
72 $params['default'] = $values;
73 }
74
75 // Make the field auto-infusable when it's used inside a legacy HTMLForm rather than OOUIHTMLForm
76 $params['infusable'] = true;
77 $params['classes'] = [ 'mw-htmlform-field-autoinfuse' ];
78 $widget = new UsersMultiselectWidget( $params );
79 $widget->setAttributes( [ 'data-mw-modules' => implode( ',', $this->getOOUIModules() ) ] );
80
81 return $widget;
82 }
83
84 protected function shouldInfuseOOUI() {
85 return true;
86 }
87
88 protected function getOOUIModules() {
89 return [ 'mediawiki.widgets.UsersMultiselectWidget' ];
90 }
91
92 }