Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 37 |
| DateTimeWidgetBase | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
72 | |
0.00% |
0 / 37 |
| formElement | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 19 |
|||
| massageFormValues | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 18 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\datetime\Plugin\Field\FieldWidget\DateTimeWidgetBase. | |
| */ | |
| namespace Drupal\datetime\Plugin\Field\FieldWidget; | |
| use Drupal\Core\Datetime\DrupalDateTime; | |
| use Drupal\Core\Field\FieldItemListInterface; | |
| use Drupal\Core\Field\WidgetBase; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem; | |
| /** | |
| * Base class for the 'datetime_*' widgets. | |
| */ | |
| class DateTimeWidgetBase extends WidgetBase { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) { | |
| // We are nesting some sub-elements inside the parent, so we need a wrapper. | |
| // We also need to add another #title attribute at the top level for ease in | |
| // identifying this item in error messages. We do not want to display this | |
| // title because the actual title display is handled at a higher level by | |
| // the Field module. | |
| $element['#theme_wrappers'][] = 'datetime_wrapper'; | |
| $element['#attributes']['class'][] = 'container-inline'; | |
| $element['value'] = array( | |
| '#type' => 'datetime', | |
| '#default_value' => NULL, | |
| '#date_increment' => 1, | |
| '#date_timezone' => drupal_get_user_timezone(), | |
| '#required' => $element['#required'], | |
| ); | |
| if ($items[$delta]->date) { | |
| $date = $items[$delta]->date; | |
| // The date was created and verified during field_load(), so it is safe to | |
| // use without further inspection. | |
| if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) { | |
| // A date without time will pick up the current time, use the default | |
| // time. | |
| datetime_date_default_time($date); | |
| } | |
| $date->setTimezone(new \DateTimeZone($element['value']['#date_timezone'])); | |
| $element['value']['#default_value'] = $date; | |
| } | |
| return $element; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function massageFormValues(array $values, array $form, FormStateInterface $form_state) { | |
| // The widget form element type has transformed the value to a | |
| // DrupalDateTime object at this point. We need to convert it back to the | |
| // storage timezone and format. | |
| foreach ($values as &$item) { | |
| if (!empty($item['value']) && $item['value'] instanceof DrupalDateTime) { | |
| $date = $item['value']; | |
| switch ($this->getFieldSetting('datetime_type')) { | |
| case DateTimeItem::DATETIME_TYPE_DATE: | |
| // If this is a date-only field, set it to the default time so the | |
| // timezone conversion can be reversed. | |
| datetime_date_default_time($date); | |
| $format = DATETIME_DATE_STORAGE_FORMAT; | |
| break; | |
| default: | |
| $format = DATETIME_DATETIME_STORAGE_FORMAT; | |
| break; | |
| } | |
| // Adjust the date for storage. | |
| $date->setTimezone(new \DateTimezone(DATETIME_STORAGE_TIMEZONE)); | |
| $item['value'] = $date->format($format); | |
| } | |
| } | |
| return $values; | |
| } | |
| } |