class SmartDateTimezoneWidget in Smart Date 3.2.x
Same name and namespace in other branches
- 8.2 src/Plugin/Field/FieldWidget/SmartDateTimezoneWidget.php \Drupal\smart_date\Plugin\Field\FieldWidget\SmartDateTimezoneWidget
- 3.x src/Plugin/Field/FieldWidget/SmartDateTimezoneWidget.php \Drupal\smart_date\Plugin\Field\FieldWidget\SmartDateTimezoneWidget
- 3.0.x src/Plugin/Field/FieldWidget/SmartDateTimezoneWidget.php \Drupal\smart_date\Plugin\Field\FieldWidget\SmartDateTimezoneWidget
- 3.1.x src/Plugin/Field/FieldWidget/SmartDateTimezoneWidget.php \Drupal\smart_date\Plugin\Field\FieldWidget\SmartDateTimezoneWidget
- 3.3.x src/Plugin/Field/FieldWidget/SmartDateTimezoneWidget.php \Drupal\smart_date\Plugin\Field\FieldWidget\SmartDateTimezoneWidget
- 3.4.x src/Plugin/Field/FieldWidget/SmartDateTimezoneWidget.php \Drupal\smart_date\Plugin\Field\FieldWidget\SmartDateTimezoneWidget
Plugin implementation of the 'smartdate_timezone' widget.
Plugin annotation
@FieldWidget(
id = "smartdate_timezone",
label = @Translation("Date and time range with timezone"),
field_types = {
"smartdate"
}
)
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
- class \Drupal\datetime\Plugin\Field\FieldWidget\DateTimeWidgetBase
- class \Drupal\smart_date\Plugin\Field\FieldWidget\SmartDateWidgetBase
- class \Drupal\smart_date\Plugin\Field\FieldWidget\SmartDateDefaultWidget implements ContainerFactoryPluginInterface
- class \Drupal\smart_date\Plugin\Field\FieldWidget\SmartDateTimezoneWidget implements ContainerFactoryPluginInterface
- class \Drupal\smart_date\Plugin\Field\FieldWidget\SmartDateDefaultWidget implements ContainerFactoryPluginInterface
- class \Drupal\smart_date\Plugin\Field\FieldWidget\SmartDateWidgetBase
- class \Drupal\datetime\Plugin\Field\FieldWidget\DateTimeWidgetBase
- class \Drupal\Core\Field\WidgetBase implements WidgetInterface, ContainerFactoryPluginInterface
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of SmartDateTimezoneWidget
File
- src/
Plugin/ Field/ FieldWidget/ SmartDateTimezoneWidget.php, line 20
Namespace
Drupal\smart_date\Plugin\Field\FieldWidgetView source
class SmartDateTimezoneWidget extends SmartDateDefaultWidget implements ContainerFactoryPluginInterface {
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
return [
'default_tz' => '',
'custom_tz' => '',
'allowed_timezones' => [],
] + parent::defaultSettings();
}
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$element = parent::formElement($items, $delta, $element, $form, $form_state);
// Set default, based on field config.
$default_label = t('- default: @tz_label -', [
'@tz_label' => $this
->getSiteTimezone(),
]);
switch ($this
->getSetting('default_tz')) {
case '':
$default_timezone = '';
break;
case 'user':
$default_timezone = date_default_timezone_get();
break;
case 'custom':
$default_timezone = $this
->getSetting('custom_tz');
break;
}
$timezones = $this
->getSetting('allowed_timezones') ? $this
->formatTimezoneOptions($this
->getSetting('allowed_timezones')) : $this
->getTimezones();
$element['timezone']['#type'] = 'select';
$element['timezone']['#options'] = [
'' => $default_label,
] + $timezones;
$element['timezone']['#default_value'] = $items[$delta]->timezone ? $items[$delta]->timezone : $default_timezone;
$element['timezone']['#attributes']['class'][] = 'field-timezone';
$element['timezone']['#weight'] = 100;
return $element;
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$element = parent::settingsForm($form, $form_state);
$element['default_tz'] = [
'#type' => 'select',
'#title' => $this
->t('Default timezone'),
'#default_value' => $this
->getSetting('default_tz'),
'#options' => [
'' => $this
->t('Site default (ignores any user override)'),
'user' => $this
->t("User's timezone, defaulting to site (always saved)"),
'custom' => $this
->t('A custom timezone (always saved)'),
],
];
$custom_tz = $this
->getSetting('custom_tz') ? $this
->getSetting('custom_tz') : $this
->getSiteTimezone();
$element['custom_tz'] = [
'#type' => 'select',
'#title' => $this
->t('Custom timezone'),
'#default_value' => $custom_tz,
'#options' => $this
->getTimezones(),
'#states' => [
// Show this select only if the 'default_tz' select is set to custom.
'visible' => [
'select[name$="[settings][default_tz]"]' => [
'value' => 'custom',
],
],
],
];
// Set default, based on field config.
$default_label = t('- default: @tz_label -', [
'@tz_label' => $this
->getSiteTimezone(),
]);
switch ($this
->getSetting('default_tz')) {
case '':
$default_timezone = '';
break;
case 'user':
$default_timezone = date_default_timezone_get();
break;
case 'custom':
$default_timezone = $this
->getSetting('custom_tz');
break;
}
$element['allowed_timezones']['#type'] = 'select';
$element['allowed_timezones']['#multiple'] = TRUE;
$element['allowed_timezones']['#options'] = $this
->getTimezones();
$element['allowed_timezones']['#default_value'] = $this
->getSetting('allowed_timezones');
$element['allowed_timezones']['#weight'] = 100;
return $element;
}
/**
* {@inheritdoc}
*/
public function settingsSummary() {
$summary = parent::settingsSummary();
switch ($this
->getSetting('default_tz')) {
case '':
$summary[] = $this
->t("The site's timezone will be used unless overridden");
break;
case 'user':
$summary[] = $this
->t("The user's timezone will be used by default");
break;
case 'custom':
$summary[] = $this
->t('Custom default timezone: @custom_tz', [
'@custom_tz' => $this
->getSetting('custom_tz'),
]);
break;
}
if ($allowed_tz = $this
->getSetting('allowed_timezones')) {
$summary[] = $this
->t('Allowed timezones: @timezones', [
'@timezones' => implode(', ', $allowed_tz),
]);
}
return $summary;
}
/**
* Helper function to retrieve available timezones.
*/
public function getTimezones() {
return system_time_zones(FALSE, TRUE);
}
/**
* Helper function to format allowed timezone as a grouped list.
*/
public function formatTimezoneOptions(array $zonelist, $grouped = TRUE) {
$zones = [];
foreach ($zonelist as $zone) {
// Because many time zones exist in PHP only for backward compatibility
// reasons and should not be used, the list is filtered by a regular
// expression.
if (preg_match('!^((Africa|America|Antarctica|Arctic|Asia|Atlantic|Australia|Europe|Indian|Pacific)/|UTC$)!', $zone)) {
$zones[$zone] = t('@zone', [
'@zone' => t(str_replace('_', ' ', $zone)),
]);
}
}
// Sort the translated time zones alphabetically.
asort($zones);
if ($grouped) {
$grouped_zones = [];
foreach ($zones as $key => $value) {
$split = explode('/', $value);
$city = array_pop($split);
$region = array_shift($split);
if (!empty($region)) {
$grouped_zones[$region][$key] = empty($split) ? $city : $city . ' (' . implode('/', $split) . ')';
}
else {
$grouped_zones[$key] = $value;
}
}
foreach ($grouped_zones as $key => $value) {
if (is_array($grouped_zones[$key])) {
asort($grouped_zones[$key]);
}
}
$zones = $grouped_zones;
}
return $zones;
}
/**
* Helper function to return only the site's timezone.
*/
public function getSiteTimezone() {
// Ignore PHP strict notice if time zone has not yet been set in the php.ini
// configuration.
$config = \Drupal::config('system.date');
$config_data_default_timezone = $config
->get('timezone.default');
return !empty($config_data_default_timezone) ? $config_data_default_timezone : @date_default_timezone_get();
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DateTimeWidgetBase:: |
protected | function | Creates a date object for use as a default value. | |
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
public | function | 2 | |
DependencySerializationTrait:: |
public | function | 2 | |
MessengerTrait:: |
protected | property | The messenger. | 27 |
MessengerTrait:: |
public | function | Gets the messenger. | 27 |
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:: |
2 |
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:: |
|
SmartDateDefaultWidget:: |
protected | property | The date format storage. | |
SmartDateDefaultWidget:: |
public static | function |
Creates an instance of the plugin. Overrides WidgetBase:: |
|
SmartDateDefaultWidget:: |
public | function |
Constructs a WidgetBase object. Overrides WidgetBase:: |
|
SmartDateTimezoneWidget:: |
public static | function |
Defines the default settings for this plugin. Overrides SmartDateDefaultWidget:: |
|
SmartDateTimezoneWidget:: |
public | function | Helper function to format allowed timezone as a grouped list. | |
SmartDateTimezoneWidget:: |
public | function |
Returns the form for a single field widget. Overrides SmartDateDefaultWidget:: |
|
SmartDateTimezoneWidget:: |
public | function | Helper function to return only the site's timezone. | |
SmartDateTimezoneWidget:: |
public | function | Helper function to retrieve available timezones. | |
SmartDateTimezoneWidget:: |
public | function |
Returns a form to configure settings for the widget. Overrides SmartDateDefaultWidget:: |
|
SmartDateTimezoneWidget:: |
public | function |
Returns a short summary for the current widget settings. Overrides SmartDateDefaultWidget:: |
|
SmartDateWidgetBase:: |
public static | function | Helper method to create SmartDate element. | |
SmartDateWidgetBase:: |
protected | function |
Special handling to create form elements for multiple values. Overrides WidgetBase:: |
|
SmartDateWidgetBase:: |
public | function |
Massages the form values into the format expected for field values. Overrides DateTimeWidgetBase:: |
1 |
SmartDateWidgetBase:: |
public static | function | Conditionally convert a DrupalDateTime object to a timestamp. | |
SmartDateWidgetBase:: |
private | function | Conditionally convert a DrupalDateTime object to a timestamp. | |
SmartDateWidgetBase:: |
public static | function | Ensure that the start date <= the end date via #element_validate callback. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 4 |
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. | |
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 | 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 | 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 static | function |
Stores processing information about the widget in $form_state. Overrides WidgetBaseInterface:: |