class Widget in Select (or other) 8.3
Plugin implementation of the 'select_or_other' widget.
Plugin annotation
@FieldWidget(
id = "select_or_other",
label = @Translation("Select or other"),
field_types = {
"string"
},
multiple_values = TRUE
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Field\WidgetBase implements WidgetInterface, ContainerFactoryPluginInterface uses AllowedTagsXssTrait
- class \Drupal\select_or_other\Plugin\Field\FieldWidget\SelectOrOtherWidgetBase
- class \Drupal\select_or_other\Plugin\Field\FieldWidget\Widget
- class \Drupal\select_or_other\Plugin\Field\FieldWidget\SelectOrOtherWidgetBase
- class \Drupal\Core\Field\WidgetBase implements WidgetInterface, ContainerFactoryPluginInterface uses AllowedTagsXssTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of Widget
File
- src/
Plugin/ Field/ FieldWidget/ Widget.php, line 25 - Contains \Drupal\select_or_other\Plugin\Field\FieldWidget\Widget.
Namespace
Drupal\select_or_other\Plugin\Field\FieldWidgetView source
class Widget extends SelectOrOtherWidgetBase {
/**
* @var string
*/
protected $options;
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$form = parent::settingsForm($form, $form_state);
$form['available_options'] = array(
'#type' => 'textarea',
'#title' => t('Available options'),
'#description' => t('A list of values that are, by default, available for selection. Enter one value per line, in the format key|label. The key is the value that will be stored in the database, and the label is what will be displayed to the user.'),
'#default_value' => $this
->getSetting('available_options'),
'#required' => TRUE,
);
$form['other'] = array(
'#type' => 'textfield',
'#title' => t('<em>Other</em> option'),
'#description' => t('Label for the option that the user will choose when they want to supply an <em>other</em> value.'),
'#default_value' => $this
->getSetting('other'),
'#required' => TRUE,
);
$form['other_title'] = array(
'#type' => 'textfield',
'#title' => t('<em>Other</em> field title'),
'#description' => t('Label for the field in which the user will supply an <em>other</em> value.'),
'#default_value' => $this
->getSetting('other_title'),
);
$form['other_unknown_defaults'] = array(
'#type' => 'select',
'#title' => t('<em>Other</em> value as default value'),
'#description' => t("If any incoming default values do not appear in <em>available options</em> (i.e. set as <em>other</em> values), what should happen?"),
'#options' => array(
'other' => t('Add the values to the other textfield'),
'append' => t('Append the values to the current list'),
'available' => t('Append the values to the available options'),
'ignore' => t('Ignore the values'),
),
'#default_value' => $this
->getSetting('other_unknown_defaults'),
'#required' => TRUE,
);
$form['other_size'] = array(
'#type' => 'number',
'#title' => t('<em>Other</em> field size'),
'#default_value' => $this
->getSetting('other_size'),
'#required' => TRUE,
);
$form['sort_options'] = array(
'#type' => 'checkbox',
'#title' => t('Sort options'),
'#description' => t("Sorts the options in the list alphabetically by value."),
'#default_value' => $this
->getSetting('sort_options'),
);
return $form;
}
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$element = parent::formElement($items, $delta, $element, $form, $form_state);
$element += array(
'#maxlength' => $this
->getFieldSetting('max_length'),
'#other' => $this
->getSetting('other'),
'#other_title' => $this
->getSetting('other_title'),
'#other_size' => $this
->getSetting('other_size'),
'#other_delimiter' => FALSE,
'#other_unknown_defaults' => $this
->getSetting('other_unknown_defaults'),
'#field_widget' => 'select_or_other',
'#select_type' => 'select',
);
return $element;
}
/**
* {@inheritdoc}
*/
protected function getOptions() {
if (!isset($this->options)) {
$string_options = $this
->getSetting('available_options');
$string_options = trim($string_options);
if (empty($string_options)) {
return [];
}
// If option has a key specified
if (strpos($string_options, '|') !== FALSE) {
$options = [];
$list = explode("\n", $string_options);
$list = array_map('trim', $list);
$list = array_filter($list, 'strlen');
foreach ($list as $position => $text) {
$value = $key = FALSE;
// Check for an explicit key.
$matches = array();
if (preg_match('/(.*)\\|(.*)/', $text, $matches)) {
$key = $matches[1];
$value = $matches[2];
}
$options[$key] = isset($value) && $value !== '' ? html_entity_decode($value) : $key;
}
}
else {
$options[$string_options] = html_entity_decode($string_options);
}
$label = t('N/A');
// Add an empty option if the widget needs one.
if ($empty_option = $this
->getEmptyOption()) {
switch ($this
->getPluginId()) {
case 'select_or_other_buttons':
$label = t('N/A');
break;
case 'select_or_other':
case 'select_or_other_sort':
$label = $empty_option == static::SELECT_OR_OTHER_EMPTY_NONE ? t('- None -') : t('- Select a value -');
break;
}
$options = array(
'_none' => $label,
) + $options;
}
array_walk_recursive($options, array(
$this,
'sanitizeLabel',
));
// Options might be nested ("optgroups"). If the widget does not support
// nested options, flatten the list.
if (!$this
->supportsGroups()) {
$options = $this
->flattenOptions($options);
}
$this->options = $options;
}
return $this->options;
}
/**
* {@inheritdoc}
*/
protected static function sanitizeLabel(&$label) {
// Select form inputs allow unencoded HTML entities, but no HTML tags.
$label = strip_tags($label);
}
/**
* {@inheritdoc}
*/
protected function supportsGroups() {
return TRUE;
}
/**
* {@inheritdoc}
*/
protected function getEmptyOption() {
if ($this
->isMultiple()) {
// Multiple select: add a 'none' option for non-required fields.
if (!$this
->isRequired()) {
return static::SELECT_OR_OTHER_EMPTY_NONE;
}
}
else {
// Single select: add a 'none' option for non-required fields,
// and a 'select a value' option for required fields that do not come
// with a value selected.
if (!$this
->isRequired()) {
return static::SELECT_OR_OTHER_EMPTY_NONE;
}
if (!$this
->hasValue()) {
return static::SELECT_OR_OTHER_EMPTY_SELECT;
}
}
return NULL;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AllowedTagsXssTrait:: |
public | function | Returns a list of tags allowed by AllowedTagsXssTrait::fieldFilterXss(). | |
AllowedTagsXssTrait:: |
public | function | Returns a human-readable list of allowed tags for display in help texts. | |
AllowedTagsXssTrait:: |
public | function | Filters an HTML string to prevent XSS vulnerabilities. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginSettingsBase:: |
protected | property | Whether default settings have been merged into the current $settings. | |
PluginSettingsBase:: |
protected | property | The plugin settings injected by third party modules. | |
PluginSettingsBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
6 |
PluginSettingsBase:: |
public | function |
Returns the value of a setting, or its default value if absent. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Returns the array of settings, including defaults for missing settings. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
protected | function | Merges default settings values into $settings. | |
PluginSettingsBase:: |
public | function |
Informs the plugin that some configuration it depends on will be deleted. Overrides PluginSettingsInterface:: |
3 |
PluginSettingsBase:: |
public | function |
Sets the value of a setting for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the settings for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Unsets a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
SelectOrOtherWidgetBase:: |
private | property | ||
SelectOrOtherWidgetBase:: |
public static | function |
Defines the default settings for this plugin. Overrides PluginSettingsBase:: |
|
SelectOrOtherWidgetBase:: |
protected | function | Flattens an array of allowed values. | |
SelectOrOtherWidgetBase:: |
protected | function | Helper method to determine the identifying column for the field. | |
SelectOrOtherWidgetBase:: |
protected | function | Determines selected options from the incoming field values. | |
SelectOrOtherWidgetBase:: |
public | function | Return whether $items of formElement method contains any data. | |
SelectOrOtherWidgetBase:: |
protected | function | Helper method to determine if the field supports multiple values. | |
SelectOrOtherWidgetBase:: |
protected | function | Helper method to determine if the field is required. | |
SelectOrOtherWidgetBase:: |
protected | function | Prepares selected options for comparison to the available options. | 1 |
SelectOrOtherWidgetBase:: |
private | function | Returns the types of select elements available for selection. | |
SelectOrOtherWidgetBase:: |
constant | Identifies a 'None' option. | ||
SelectOrOtherWidgetBase:: |
constant | Identifies a 'Select a value' option. | ||
SelectOrOtherWidgetBase:: |
public | function |
Returns a short summary for the current widget settings. Overrides WidgetBase:: |
|
SelectOrOtherWidgetBase:: |
public static | function | Form validation handler for widget elements. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
Widget:: |
protected | property | ||
Widget:: |
public | function |
Returns the form for a single field widget. Overrides SelectOrOtherWidgetBase:: |
|
Widget:: |
protected | function |
Returns the empty option to add to the list of options, if any. Overrides SelectOrOtherWidgetBase:: |
|
Widget:: |
protected | function |
Returns the array of options for the widget. Overrides SelectOrOtherWidgetBase:: |
|
Widget:: |
protected static | function |
Sanitizes a string label to display as an option. Overrides SelectOrOtherWidgetBase:: |
|
Widget:: |
public | function |
Returns a form to configure settings for the widget. Overrides SelectOrOtherWidgetBase:: |
|
Widget:: |
protected | function |
Indicates whether the widgets support optgroups. Overrides SelectOrOtherWidgetBase:: |
|
WidgetBase:: |
protected | property | The field definition. | |
WidgetBase:: |
protected | property |
The widget settings. Overrides PluginSettingsBase:: |
|
WidgetBase:: |
public static | function | Ajax callback for the "Add another item" button. | |
WidgetBase:: |
public static | function | Submission handler for the "Add another item" button. | |
WidgetBase:: |
public static | function | After-build handler for field elements in a form. | |
WidgetBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
5 |
WidgetBase:: |
public | function |
Assigns a field-level validation error to the right widget sub-element. Overrides WidgetInterface:: |
8 |
WidgetBase:: |
public | function |
Extracts field values from submitted form values. Overrides WidgetBaseInterface:: |
2 |
WidgetBase:: |
public | function |
Reports field-level validation errors against actual form elements. Overrides WidgetBaseInterface:: |
2 |
WidgetBase:: |
public | function |
Creates a form element for a field. Overrides WidgetBaseInterface:: |
3 |
WidgetBase:: |
protected | function | Special handling to create form elements for multiple values. | 1 |
WidgetBase:: |
protected | function | Generates the form element for a single copy of the widget. | |
WidgetBase:: |
protected | function | Returns the value of a field setting. | |
WidgetBase:: |
protected | function | Returns the array of field settings. | |
WidgetBase:: |
protected | function | Returns the filtered field description. | |
WidgetBase:: |
public static | function |
Retrieves processing information about the widget from $form_state. Overrides WidgetBaseInterface:: |
|
WidgetBase:: |
protected static | function | Returns the location of processing information within $form_state. | |
WidgetBase:: |
protected | function | Returns whether the widget handles multiple values. | |
WidgetBase:: |
public static | function |
Returns if the widget can be used for the provided field. Overrides WidgetInterface:: |
4 |
WidgetBase:: |
protected | function | Returns whether the widget used for default value form. | |
WidgetBase:: |
public | function |
Massages the form values into the format expected for field values. Overrides WidgetInterface:: |
7 |
WidgetBase:: |
public static | function |
Stores processing information about the widget in $form_state. Overrides WidgetBaseInterface:: |
|
WidgetBase:: |
public | function |
Constructs a WidgetBase object. Overrides PluginBase:: |
5 |