MediaWiki
REL1_41
HTMLTitlesMultiselectField.php
Go to the documentation of this file.
1
<?php
2
3
use
MediaWiki\Widget\TitlesMultiselectWidget
;
4
23
class
HTMLTitlesMultiselectField
extends
HTMLTitleTextField
{
28
public
function
__construct
( $params ) {
29
$params += [
30
// This overrides the default from HTMLTitleTextField
31
'required'
=>
false
,
32
];
33
34
parent::__construct( $params );
35
}
36
37
public
function
loadDataFromRequest
( $request ) {
38
$value = $request->getText( $this->mName, $this->
getDefault
() ??
''
);
39
40
$titlesArray = explode(
"\n"
, $value );
41
// Remove empty lines
42
$titlesArray = array_values( array_filter( $titlesArray,
static
function
( $title ) {
43
return
trim( $title ) !==
''
;
44
} ) );
45
// This function is expected to return a string
46
return
implode(
"\n"
, $titlesArray );
47
}
48
49
public
function
validate
( $value, $alldata ) {
50
if
( !$this->mParams[
'exists'
] ) {
51
return
true
;
52
}
53
54
if
( $value ===
null
) {
55
return
false
;
56
}
57
58
// $value is a string, because HTMLForm fields store their values as strings
59
$titlesArray = explode(
"\n"
, $value );
60
61
if
( isset( $this->mParams[
'max'
] ) && ( count( $titlesArray ) > $this->mParams[
'max'
] ) ) {
62
return
$this->
msg
(
'htmlform-multiselect-toomany'
, $this->mParams[
'max'
] );
63
}
64
65
foreach
( $titlesArray as $title ) {
66
$result = parent::validate( $title, $alldata );
67
if
( $result !==
true
) {
68
return
$result;
69
}
70
}
71
72
return
true
;
73
}
74
75
public
function
getInputHTML
( $value ) {
76
$this->mParent->getOutput()->enableOOUI();
77
return
$this->
getInputOOUI
( $value );
78
}
79
80
public
function
getInputOOUI
( $value ) {
81
$this->mParent->getOutput()->addModuleStyles(
'mediawiki.widgets.TagMultiselectWidget.styles'
);
82
83
$params = [
84
'id'
=>
$this->mID
,
85
'name'
=>
$this->mName
,
86
'dir'
=>
$this->mDir
,
87
];
88
89
if
( isset( $this->mParams[
'disabled'
] ) ) {
90
$params[
'disabled'
] = $this->mParams[
'disabled'
];
91
}
92
93
if
( isset( $this->mParams[
'default'
] ) ) {
94
$params[
'default'
] = $this->mParams[
'default'
];
95
}
96
97
$params[
'placeholder'
] = $this->mParams[
'placeholder'
] ??
98
$this->
msg
(
'mw-widgets-titlesmultiselect-placeholder'
)->plain();
99
100
if
( isset( $this->mParams[
'max'
] ) ) {
101
$params[
'tagLimit'
] = $this->mParams[
'max'
];
102
}
103
104
if
( isset( $this->mParams[
'showMissing'
] ) ) {
105
$params[
'showMissing'
] = $this->mParams[
'showMissing'
];
106
}
107
if
( isset( $this->mParams[
'excludeDynamicNamespaces'
] ) ) {
108
$params[
'excludeDynamicNamespaces'
] = $this->mParams[
'excludeDynamicNamespaces'
];
109
}
110
if
( isset( $this->mParams[
'allowEditTags'
] ) ) {
111
$params[
'allowEditTags'
] = $this->mParams[
'allowEditTags'
];
112
}
113
114
if
( isset( $this->mParams[
'input'
] ) ) {
115
$params[
'input'
] = $this->mParams[
'input'
];
116
}
117
118
if
( $value !==
null
) {
119
// $value is a string, but the widget expects an array
120
$params[
'default'
] = $value ===
''
? [] : explode(
"\n"
, $value );
121
}
122
123
// Make the field auto-infusable when it's used inside a legacy HTMLForm rather than OOUIHTMLForm
124
$params[
'infusable'
] =
true
;
125
$params[
'classes'
] = [
'mw-htmlform-autoinfuse'
];
126
127
return
$this->
getInputWidget
( $params );
128
}
129
133
protected
function
getInputWidget
( $params ) {
134
$widget =
new
TitlesMultiselectWidget
( $params );
135
$widget->setAttributes( [
'data-mw-modules'
=> implode(
','
, $this->
getOOUIModules
() ) ] );
136
return
$widget;
137
}
138
139
protected
function
shouldInfuseOOUI
() {
140
return
true
;
141
}
142
143
protected
function
getOOUIModules
() {
144
return
[
'mediawiki.widgets.TitlesMultiselectWidget'
];
145
}
146
147
}
HTMLFormField\$mID
$mID
Definition
HTMLFormField.php:24
HTMLFormField\$mDir
$mDir
Definition
HTMLFormField.php:22
HTMLFormField\$mName
$mName
Definition
HTMLFormField.php:21
HTMLFormField\msg
msg( $key,... $params)
Get a translated interface message.
Definition
HTMLFormField.php:99
HTMLFormField\getDefault
getDefault()
Definition
HTMLFormField.php:1084
HTMLTitleTextField
Implements a text input field for page titles.
Definition
HTMLTitleTextField.php:24
HTMLTitlesMultiselectField
Implements a tag multiselect input field for titles.
Definition
HTMLTitlesMultiselectField.php:23
HTMLTitlesMultiselectField\validate
validate( $value, $alldata)
Override this function to add specific validation checks on the field input.
Definition
HTMLTitlesMultiselectField.php:49
HTMLTitlesMultiselectField\loadDataFromRequest
loadDataFromRequest( $request)
Get the value that this input has been set to from a posted form, or the input's default value if it ...
Definition
HTMLTitlesMultiselectField.php:37
HTMLTitlesMultiselectField\__construct
__construct( $params)
Definition
HTMLTitlesMultiselectField.php:28
HTMLTitlesMultiselectField\shouldInfuseOOUI
shouldInfuseOOUI()
Whether the field should be automatically infused.
Definition
HTMLTitlesMultiselectField.php:139
HTMLTitlesMultiselectField\getInputOOUI
getInputOOUI( $value)
Same as getInputHTML, but returns an OOUI object.Defaults to false, which getOOUI will interpret as "...
Definition
HTMLTitlesMultiselectField.php:80
HTMLTitlesMultiselectField\getInputHTML
getInputHTML( $value)
This function must be implemented to return the HTML to generate the input object itself....
Definition
HTMLTitlesMultiselectField.php:75
HTMLTitlesMultiselectField\getInputWidget
getInputWidget( $params)
to overrideWidget
Definition
HTMLTitlesMultiselectField.php:133
HTMLTitlesMultiselectField\getOOUIModules
getOOUIModules()
Get the list of extra ResourceLoader modules which must be loaded client-side before it's possible to...
Definition
HTMLTitlesMultiselectField.php:143
MediaWiki\Widget\TitlesMultiselectWidget
Widget to select multiple titles.
Definition
TitlesMultiselectWidget.php:11
includes
htmlform
fields
HTMLTitlesMultiselectField.php
Generated on Wed Nov 27 2024 07:23:31 for MediaWiki by
1.10.0