Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4106810
RadioSelectInputWidget.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
RadioSelectInputWidget.php
View Options
<?php
namespace
OOUI
;
/**
* Multiple radio buttons input widget. Intended to be used within a OO.ui.FormLayout.
*/
class
RadioSelectInputWidget
extends
InputWidget
{
/* Properties */
/**
* @var string|null
*/
protected
$name
=
null
;
/**
* Layouts for this input, as FieldLayouts.
*
* @var FieldLayout[]
*/
protected
$fields
=
[];
/**
* @param array $config Configuration options
* - array[] $config['options'] Array of menu options in the format
* `[ 'data' => …, 'label' => … ]`
*/
public
function
__construct
(
array
$config
=
[]
)
{
// Parent constructor
parent
::
__construct
(
$config
);
if
(
isset
(
$config
[
'name'
]
)
)
{
$this
->
name
=
$config
[
'name'
];
}
// Initialization
$this
->
setOptions
(
$config
[
'options'
]
??
[]
);
$this
->
addClasses
(
[
'oo-ui-radioSelectInputWidget'
]
);
}
/** @inheritDoc */
protected
function
getInputElement
(
$config
)
{
// Actually unused
return
new
Tag
(
'unused'
);
}
/** @inheritDoc */
public
function
setValue
(
$value
)
{
$this
->
value
=
$this
->
cleanUpValue
(
$value
);
foreach
(
$this
->
fields
as
$field
)
{
$widget
=
$field
->
getField
();
'@phan-var RadioInputWidget $widget'
;
$widget
->
setSelected
(
$widget
->
getValue
()
===
$this
->
value
);
}
return
$this
;
}
/**
* Set the options available for this input.
*
* @param array[] $options Array of menu options in the format
* `[ 'data' => …, 'label' => … ]`
* @return $this
*/
public
function
setOptions
(
$options
)
{
$value
=
$this
->
getValue
();
$isValueAvailable
=
false
;
$this
->
fields
=
[];
// Rebuild the radio buttons
$this
->
clearContent
();
// Need a unique name, otherwise more than one radio will be selectable
// Note: This is not going in the ID attribute, not that it matters
$name
=
$this
->
name
?:
Tag
::
generateElementId
();
foreach
(
$options
as
$opt
)
{
$optValue
=
$this
->
cleanUpValue
(
$opt
[
'data'
]
);
$field
=
new
FieldLayout
(
new
RadioInputWidget
(
[
'name'
=>
$name
,
'value'
=>
$optValue
,
'disabled'
=>
$this
->
isDisabled
(),
]
),
[
'label'
=>
$opt
[
'label'
]
??
$optValue
,
'align'
=>
'inline'
,
]
);
if
(
$value
===
$optValue
)
{
$isValueAvailable
=
true
;
}
$this
->
fields
[]
=
$field
;
$this
->
appendContent
(
$field
);
}
// Restore the previous value, or reset to something sensible
if
(
$isValueAvailable
)
{
// Previous value is still available
$this
->
setValue
(
$value
);
}
else
{
// No longer valid, reset
if
(
count
(
$options
)
)
{
$this
->
setValue
(
$options
[
0
][
'data'
]
);
}
}
return
$this
;
}
/** @inheritDoc */
public
function
setDisabled
(
$disabled
)
{
parent
::
setDisabled
(
$disabled
);
foreach
(
$this
->
fields
as
$field
)
{
$field
->
getField
()->
setDisabled
(
$this
->
isDisabled
()
);
}
return
$this
;
}
/** @inheritDoc */
public
function
getConfig
(
&
$config
)
{
$options
=
[];
foreach
(
$this
->
fields
as
$field
)
{
$widget
=
$field
->
getField
();
'@phan-var RadioInputWidget $widget'
;
$options
[]
=
[
'data'
=>
$widget
->
getValue
(),
'label'
=>
$field
->
getLabel
(),
];
}
$config
[
'options'
]
=
$options
;
return
parent
::
getConfig
(
$config
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Aug 18, 19:45 (2 w, 3 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
9d/08/e2200fbdc65935f86bbf62ca021d
Default Alt Text
RadioSelectInputWidget.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment