class DateTime in YAML Form 8
Provides a 'datetime' element.
Plugin annotation
@YamlFormElement(
id = "datetime",
api = "https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Datetime!Element!Datetime.php/class/Datetime",
label = @Translation("Date/time"),
category = @Translation("Date/time elements"),
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\yamlform\YamlFormElementBase implements YamlFormElementInterface uses StringTranslationTrait
Expanded class hierarchy of DateTime
File
- src/
Plugin/ YamlFormElement/ DateTime.php, line 20
Namespace
Drupal\yamlform\Plugin\YamlFormElementView source
class DateTime extends DateBase {
/**
* {@inheritdoc}
*/
public function getDefaultProperties() {
$date_format = '';
$time_format = '';
// Date formats cannot be loaded during install or update.
if (!defined('MAINTENANCE_MODE')) {
/** @var \Drupal\Core\Datetime\DateFormatInterface $date_format_entity */
if ($date_format_entity = DateFormat::load('html_date')) {
$date_format = $date_format_entity
->getPattern();
}
/** @var \Drupal\Core\Datetime\DateFormatInterface $time_format_entity */
if ($time_format_entity = DateFormat::load('html_time')) {
$time_format = $time_format_entity
->getPattern();
}
}
return parent::getDefaultProperties() + [
// Date settings.
'date_date_format' => $date_format,
'date_date_element' => 'date',
'date_time_format' => $time_format,
'date_time_element' => 'time',
'date_year_range' => '1900:2050',
'date_increment' => 1,
'date_timezone' => '',
];
}
/**
* {@inheritdoc}
*/
public function prepare(array &$element, YamlFormSubmissionInterface $yamlform_submission) {
parent::prepare($element, $yamlform_submission);
// Must define a '#default_value' for Datetime element to prevent the
// below error.
// Notice: Undefined index: #default_value in Drupal\Core\Datetime\Element\Datetime::valueCallback().
if (!isset($element['#default_value'])) {
$element['#default_value'] = NULL;
}
// Issue #1838234 Add jQuery Timepicker for the Time element of the
// datetime field.
$element['#attached']['library'][] = 'yamlform/yamlform.element.time';
}
/**
* {@inheritdoc}
*/
public function setDefaultValue(array &$element) {
if (is_string($element['#default_value']) && !empty($element['#default_value'])) {
$element['#default_value'] = $element['#default_value'] ? DrupalDateTime::createFromTimestamp(strtotime($element['#default_value'])) : NULL;
}
}
/**
* {@inheritdoc}
*/
protected function getElementSelectorInputsOptions(array $element) {
$t_args = [
'@title' => $this
->getAdminLabel($element),
];
return [
'date' => $this
->t('@title [Date]', $t_args),
'time' => $this
->t('@title [Time]', $t_args),
];
}
/**
* {@inheritdoc}
*/
public function form(array $form, FormStateInterface $form_state) {
$form = parent::form($form, $form_state);
// Date.
$form['date'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Date/time settings'),
'#description' => $this
->t('Datetime element is designed to have sane defaults so any or all can be omitted.') . ' ' . $this
->t('Both the date and time components are configurable so they can be output as HTML5 datetime elements or not, as desired.'),
];
$form['date']['date_date_element'] = [
'#type' => 'select',
'#title' => t('Date element'),
'#options' => [
'datetime' => $this
->t('HTML datetime - Use the HTML5 datetime element type.'),
'datetime-local' => $this
->t('HTML datetime input (localized) - Use the HTML5 datetime-local element type.'),
'date' => $this
->t('HTML date input - Use the HTML5 date element type.'),
'text' => $this
->t('Text input - No HTML5 element, use a normal text field.'),
'none' => $this
->t('None - Do not display a date element'),
],
];
$form['date']['date_date_element_datetime_warning'] = [
'#type' => 'yamlform_message',
'#message_type' => 'warning',
'#message_message' => $this
->t('HTML5 datetime elements do not gracefully degrade in older browsers and will be displayed as a plain text field without a date or time picker.'),
'#access' => TRUE,
'#states' => [
'visible' => [
[
':input[name="properties[date_date_element]"]' => [
'value' => 'datetime',
],
],
'or',
[
':input[name="properties[date_date_element]"]' => [
'value' => 'datetime-local',
],
],
],
],
];
$form['date']['date_date_element_none_warning'] = [
'#type' => 'yamlform_message',
'#message_type' => 'warning',
'#message_message' => $this
->t('You should consider using a dedicated Time element, instead of this Date/time element, which will preprend the current date to the submitted time.'),
'#access' => TRUE,
'#states' => [
'visible' => [
':input[name="properties[date_date_element]"]' => [
'value' => 'none',
],
],
],
];
$date_format = DateFormat::load('html_date')
->getPattern();
$form['date']['date_date_format'] = [
'#type' => 'yamlform_select_other',
'#title' => $this
->t('Date format'),
'#options' => [
$date_format => $this
->t('Year-Month-Date (@date)', [
'@date' => date($date_format),
]),
],
'#description' => $this
->t("Date format is only applicable for browsers that do not have support for the HTML5 date element. Browsers that support the HTML5 date element will display the date using the user's preferred format."),
'#other__option_label' => $this
->t('Custom...'),
'#other__placeholder' => $this
->t('Custom date format...'),
'#other__description' => $this
->t('Enter date format using <a href="http://php.net/manual/en/function.date.php">Date Input Format</a>.'),
'#states' => [
'invisible' => [
':input[name="properties[date_date_element]"]' => [
'value' => 'none',
],
],
],
];
$form['date']['date_year_range'] = [
'#type' => 'textfield',
'#title' => $this
->t('Date year range'),
'#description' => $this
->t("A description of the range of years to allow, like '1900:2050', '-3:+3' or '2000:+3', where the first value describes the earliest year and the second the latest year in the range.") . ' ' . $this
->t('A year in either position means that specific year.') . ' ' . $this
->t('A +/- value describes a dynamic value that is that many years earlier or later than the current year at the time the form is displayed.') . ' ' . $this
->t("Used in jQueryUI (fallback) datepicker year range and HTML5 min/max date settings. Defaults to '1900:2050'.") . ' ' . $this
->t('Use min/max validation to define a more specific date range.'),
'#states' => [
'invisible' => [
':input[name="properties[date_date_element]"]' => [
'value' => 'none',
],
],
],
];
// Time.
$form['date']['date_time_element'] = [
'#type' => 'select',
'#title' => t('Time element'),
'#options' => [
'time' => $this
->t('HTML time input - Use a HTML5 time element type.'),
'text' => $this
->t('Text input - No HTML5 element, use a normal text field.'),
'none' => $this
->t('None - Do not display a time element.'),
],
'#states' => [
'invisible' => [
[
':input[name="properties[date_date_element]"]' => [
'value' => 'datetime',
],
],
'or',
[
':input[name="properties[date_date_element]"]' => [
'value' => 'datetime-local',
],
],
],
],
];
$form['date']['date_time_format'] = [
'#type' => 'yamlform_select_other',
'#title' => $this
->t('Time format'),
'#description' => $this
->t("Time format is only applicable for browsers that do not have support for the HTML5 time element. Browsers that support the HTML5 time element will display the time using the user's preferred format."),
'#options' => [
'g:i A' => $this
->t('12 hour (@time)', [
'@time' => date('g:i A'),
]),
'g:i:s A' => $this
->t('12 hour with seconds (@time)', [
'@time' => date('g:i:s A'),
]),
'H:i' => $this
->t('24 hour (@time)', [
'@time' => date('H:i'),
]),
'H:i:s' => $this
->t('24 hour with seconds (@time)', [
'@time' => date('H:i:s'),
]),
],
'#other__option_label' => $this
->t('Custom...'),
'#other__placeholder' => $this
->t('Custom time format...'),
'#other__description' => $this
->t('Enter time format using <a href="http://php.net/manual/en/function.date.php">Time Input Format</a>.'),
'#states' => [
'invisible' => [
[
':input[name="properties[date_date_element]"]' => [
'value' => 'datetime',
],
],
'or',
[
':input[name="properties[date_date_element]"]' => [
'value' => 'datetime-local',
],
],
'or',
[
':input[name="properties[date_time_element]"]' => [
'value' => 'none',
],
],
],
],
];
$form['date']['date_increment'] = [
'#type' => 'number',
'#title' => $this
->t('Date increment'),
'#description' => $this
->t("The increment to use for minutes and seconds, i.e. '15' would show only :00, :15, :30 and :45. Used for HTML5 step values and jQueryUI (fallback) datepicker settings. Defaults to 1 to show every minute."),
'#min' => 1,
'#states' => [
'invisible' => [
[
':input[name="properties[date_date_element]"]' => [
'value' => 'datetime',
],
],
'xor',
[
':input[name="properties[date_date_element]"]' => [
'value' => 'datetime-local',
],
],
'xor',
[
':input[name="properties[date_time_element]"]' => [
'value' => 'none',
],
],
],
],
];
$form['date']['date_timezone'] = [
'#type' => 'select',
'#title' => $this
->t('Date timezone override'),
'#options' => system_time_zones(TRUE),
'#description' => $this
->t('Generally this should be left empty and it will be set correctly for the user using the form.') . ' ' . $this
->t('Useful if the default value is empty to designate a desired timezone for dates created in form processing.') . ' ' . $this
->t('If a default date is provided, this value will be ignored, the timezone in the default date takes precedence.') . ' ' . $this
->t('Defaults to the value returned by drupal_get_user_timezone().'),
];
return $form;
}
/**
* {@inheritdoc}
*/
public function getConfigurationFormProperties(array &$form, FormStateInterface $form_state) {
$properties = parent::getConfigurationFormProperties($form, $form_state);
// Remove hidden date properties.
if (isset($properties['#date_date_element'])) {
switch ($properties['#date_date_element']) {
case 'datetime':
case 'datetime-local':
unset($properties['#date_time_element'], $properties['#date_time_format'], $properties['#date_increment']);
break;
case 'none':
unset($properties['#date_date_format'], $properties['#date_year_range']);
break;
}
}
// Remove hidden date properties.
if (isset($properties['#date_time_element']) && $properties['#date_time_element'] == 'none') {
unset($properties['#date_time_format'], $properties['date_increment']);
}
return $properties;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DateBase:: |
public | function |
Build an element's export row. Overrides YamlFormElementBase:: |
|
DateBase:: |
public | function |
Format an element's value as plain text. Overrides YamlFormElementBase:: |
|
DateBase:: |
protected | function | Get the type of date/time element. | |
DateBase:: |
public | function |
Get an element's default format name. Overrides YamlFormElementBase:: |
|
DateBase:: |
public | function |
Get element's format name by looking for '#format' property, global settings, and finally default settings. Overrides YamlFormElementBase:: |
|
DateBase:: |
public | function |
Get an element's available formats. Overrides YamlFormElementBase:: |
|
DateBase:: |
protected | function | Parse GNU Date Input Format. | |
DateBase:: |
protected | function | Set GNU input format error. | |
DateBase:: |
public | function |
Form validation handler. Overrides YamlFormElementBase:: |
1 |
DateBase:: |
public static | function | Form element validation handler for base elements. | |
DateTime:: |
public | function |
Gets the actual configuration form array to be built. Overrides DateBase:: |
|
DateTime:: |
public | function |
Get an associative array of element properties from configuration form. Overrides YamlFormElementBase:: |
|
DateTime:: |
public | function |
Only a few elements don't inherit these default properties. Overrides DateBase:: |
|
DateTime:: |
protected | function |
Get an element's (sub)inputs selectors as options. Overrides YamlFormElementBase:: |
|
DateTime:: |
public | function |
Prepare an element to be rendered within a form. Overrides DateBase:: |
|
DateTime:: |
public | function |
Set an element's default value using saved data. Overrides YamlFormElementBase:: |
|
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. | |
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. | |
YamlFormElementBase:: |
protected | property | The configuration factory. | |
YamlFormElementBase:: |
protected | property | The current user. | |
YamlFormElementBase:: |
protected | property | A element info manager. | |
YamlFormElementBase:: |
protected | property | The form element manager. | |
YamlFormElementBase:: |
protected | property | The entity type manager. | |
YamlFormElementBase:: |
protected | property | A logger instance. | |
YamlFormElementBase:: |
protected | property | The token manager. | |
YamlFormElementBase:: |
protected | function | Build an element as text or HTML. | 2 |
YamlFormElementBase:: |
public | function |
Form constructor. Overrides PluginFormInterface:: |
1 |
YamlFormElementBase:: |
public | function |
Build an element's export header. Overrides YamlFormElementInterface:: |
3 |
YamlFormElementBase:: |
public | function |
Get an element's export options form. Overrides YamlFormElementInterface:: |
4 |
YamlFormElementBase:: |
public | function |
Build an element as HTML element. Overrides YamlFormElementInterface:: |
1 |
YamlFormElementBase:: |
public | function |
Build an element as text element. Overrides YamlFormElementInterface:: |
1 |
YamlFormElementBase:: |
public | function |
Check element access (rules). Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
YamlFormElementBase:: |
public | function |
Display element disabled warning. Overrides YamlFormElementInterface:: |
1 |
YamlFormElementBase:: |
public | function |
Format an element's value as HTML. Overrides YamlFormElementInterface:: |
15 |
YamlFormElementBase:: |
public | function |
Format an element's table column value. Overrides YamlFormElementInterface:: |
2 |
YamlFormElementBase:: |
public | function |
Get an element's admin label (#admin_title, #title or #yamlform_key). Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
protected | function | Get configuration property value. | 1 |
YamlFormElementBase:: |
protected | function | Get default base properties used by all elements. | |
YamlFormElementBase:: |
public | function |
Get an element's selectors as options. Overrides YamlFormElementInterface:: |
11 |
YamlFormElementBase:: |
public | function |
Get an element's supported states as options. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Get an element's default export options. Overrides YamlFormElementInterface:: |
4 |
YamlFormElementBase:: |
public | function |
Retrieves the default properties for the defined element type. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Get an element's key/name. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Get an element's label (#title or #yamlform_key). Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Get link to element's API documentation. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Get the URL for the element's API documentation. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Gets the label of the plugin instance. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Get related element types. Overrides YamlFormElementInterface:: |
3 |
YamlFormElementBase:: |
public | function |
Get element's table column(s) settings. Overrides YamlFormElementInterface:: |
3 |
YamlFormElementBase:: |
public | function |
Get test value for an element. Overrides YamlFormElementInterface:: |
7 |
YamlFormElementBase:: |
public | function |
Get translatable properties. Overrides YamlFormElementInterface:: |
7 |
YamlFormElementBase:: |
public | function |
Gets the type name (aka id) of the plugin instance with the 'yamlform_' prefix. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Checks if element value has multiple values. Overrides YamlFormElementInterface:: |
3 |
YamlFormElementBase:: |
public | function |
Determine if an element supports a specified property. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Checks if the element has a wrapper. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Initialize an element to be displayed, rendered, or exported. Overrides YamlFormElementInterface:: |
1 |
YamlFormElementBase:: |
public | function |
Checks if element is a composite element. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Checks if element is a container that can contain elements. Overrides YamlFormElementInterface:: |
3 |
YamlFormElementBase:: |
public | function |
Checks if element is disabled. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Checks if element is enabled. Overrides YamlFormElementInterface:: |
1 |
YamlFormElementBase:: |
public | function |
Checks if element is hidden. Overrides YamlFormElementInterface:: |
|
YamlFormElementBase:: |
public | function |
Checks if the element carries a value. Overrides YamlFormElementInterface:: |
5 |
YamlFormElementBase:: |
public | function |
Checks if element value could contain multiple lines. Overrides YamlFormElementInterface:: |
3 |
YamlFormElementBase:: |
public | function |
Checks if element is a root element. Overrides YamlFormElementInterface:: |
1 |
YamlFormElementBase:: |
public | function |
Acts on a form submission element after it is created. Overrides YamlFormElementInterface:: |
1 |
YamlFormElementBase:: |
public | function |
Delete any additional value associated with an element. Overrides YamlFormElementInterface:: |
2 |
YamlFormElementBase:: |
public | function |
Acts on loaded form submission. Overrides YamlFormElementInterface:: |
1 |
YamlFormElementBase:: |
public | function |
Acts on a saved form submission element before the insert or update hook is invoked. Overrides YamlFormElementInterface:: |
2 |
YamlFormElementBase:: |
public | function |
Changes the values of an entity before it is created. Overrides YamlFormElementInterface:: |
1 |
YamlFormElementBase:: |
public | function | 1 | |
YamlFormElementBase:: |
protected | function | Prefix an element's export header. | |
YamlFormElementBase:: |
protected | function | Set an elements Flexbox and #states wrapper. | 1 |
YamlFormElementBase:: |
public | function |
Acts on a form submission element before the presave hook is invoked. Overrides YamlFormElementInterface:: |
2 |
YamlFormElementBase:: |
protected | function | Set an element's configuration form element default value. | 2 |
YamlFormElementBase:: |
protected | function | Set configuration form default values recursively. | |
YamlFormElementBase:: |
public | function |
Form submission handler. Overrides PluginFormInterface:: |
|
YamlFormElementBase:: |
public static | function | Form API callback. Validate #unique value. | |
YamlFormElementBase:: |
public | function |
Constructs a Drupal\Component\Plugin\PluginBase object. Overrides PluginBase:: |