Loading includes/webform.date.inc +5 −76 Changes for includes/webform.date.inc: 5 added lines, 76 removed lines. Original line number Diff line number Diff line Loading @@ -7,7 +7,8 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Datetime\DateHelper; use Drupal\webform\Plugin\WebformElement\DateList; use Drupal\webform\Plugin\WebformElement\DateTime; /** * Callback for removing abbreviation from datelist. Loading @@ -22,12 +23,7 @@ use Drupal\Core\Datetime\DateHelper; * @see \Drupal\Core\Datetime\Element\Datelist::processDatelist */ function _webform_datelist_date_date_callback(array &$element, FormStateInterface $form_state, $date) { $no_abbreviate = (isset($element['#date_abbreviate']) && $element['#date_abbreviate'] === FALSE); if ($no_abbreviate && isset($element['month']) && isset($element['month']['#options'])) { // Load translated date part labels from the appropriate calendar plugin. $date_helper = new DateHelper(); $element['month']['#options'] = $date_helper->monthNames($element['#required']); } DateList::dateListCallback($element, $form_state, $date); } /** Loading @@ -43,22 +39,7 @@ function _webform_datelist_date_date_callback(array &$element, FormStateInterfac * @see \Drupal\webform\Plugin\WebformElement\DateTime::prepare */ function _webform_datetime_date(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) { // Make sure the date element is being displayed. if (!isset($element['date'])) { return; } $type = $element['#date_date_element'] ?? 'date'; switch ($type) { case 'datepicker': // Convert #type from datepicker to textfield. $element['date']['#type'] = 'textfield'; // Must manually set 'data-drupal-date-format' to trigger date picker. // @see \Drupal\Core\Render\Element\Date::processDate $element['date']['#attributes']['data-drupal-date-format'] = [$element['date']['#date_date_format']]; break; } DateTime::dateCallback($element, $form_state, $date); } /** Loading @@ -74,57 +55,5 @@ function _webform_datetime_date(array &$element, FormStateInterface $form_state, * @see \Drupal\webform\Plugin\WebformElement\DateTime::prepare */ function _webform_datetime_time(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) { // Make sure the time element is being displayed. if (!isset($element['time'])) { return; } // Apply time specific min/max to the element. foreach (['min', 'max'] as $property) { if (!empty($element["#date_time_$property"])) { $value = $element["#date_time_$property"]; } elseif (!empty($element["#date_$property"])) { $value = date('H:i:s', strtotime($element["#date_$property"])); } else { $value = NULL; } if ($value) { $element['time']["#$property"] = $value; $element['time']['#attributes'][$property] = $value; } } // Apply time step and format to the element. if (!empty($element['#date_time_step'])) { $element['time']['#step'] = $element['#date_time_step']; $element['time']['#attributes']['step'] = $element['#date_time_step']; } if (!empty($element['#date_time_format'])) { $element['time']['#time_format'] = $element['#date_time_format']; } // Remove extra attributes for date element. unset( $element['time']['#attributes']['data-min-year'], $element['time']['#attributes']['data-max-year'] ); $type = $element['#date_time_element'] ?? 'time'; switch ($type) { case 'timepicker': $element['time']['#type'] = 'webform_time'; $element['time']['#timepicker'] = TRUE; break; case 'time': $element['time']['#type'] = 'webform_time'; break; case 'text': $element['time']['#element_validate'][] = ['\Drupal\webform\Element\WebformTime', 'validateWebformTime']; break; } DateTime::timeCallback($element, $form_state, $date); } src/Plugin/WebformElement/DateList.php +32 −2 Changes for src/Plugin/WebformElement/DateList.php: 32 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -2,10 +2,12 @@ namespace Drupal\webform\Plugin\WebformElement; use Drupal\Core\Datetime\DateHelper; use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Datetime\Element\Datelist as DatelistElement; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element; use Drupal\Core\Security\TrustedCallbackInterface; use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\webform\WebformSubmissionConditionsValidator; use Drupal\webform\WebformSubmissionInterface; Loading @@ -21,7 +23,7 @@ use Drupal\webform\WebformSubmissionInterface; * category = @Translation("Date/time elements"), * ) */ class DateList extends DateBase { class DateList extends DateBase implements TrustedCallbackInterface { /** * {@inheritdoc} Loading Loading @@ -57,7 +59,7 @@ class DateList extends DateBase { // Remove month abbreviation. // @see \Drupal\Core\Datetime\Element\Datelist::processDatelist if (isset($element['#date_abbreviate']) && $element['#date_abbreviate'] === FALSE) { $element['#date_date_callbacks'][] = '_webform_datelist_date_date_callback'; $element['#date_date_callbacks'][] = floatval(\Drupal::VERSION) >= 9.3 ? [DateList::class, 'dateListCallback'] : '_webform_datelist_date_date_callback'; } // Remove 'for' from the element's label. Loading Loading @@ -296,4 +298,32 @@ class DateList extends DateBase { } } /** * Callback for removing abbreviation from datelist. * * @param array $element * The element. * @param \Drupal\Core\Form\FormStateInterface $form_state * The form state. * @param \Drupal\Core\Datetime\DrupalDateTime|null $date * The date value. * * @see \Drupal\Core\Datetime\Element\Datelist::processDatelist */ public static function dateListCallback(array &$element, FormStateInterface $form_state, $date) { $no_abbreviate = (isset($element['#date_abbreviate']) && $element['#date_abbreviate'] === FALSE); if ($no_abbreviate && isset($element['month']) && isset($element['month']['#options'])) { // Load translated date part labels from the appropriate calendar plugin. $date_helper = new DateHelper(); $element['month']['#options'] = $date_helper->monthNames($element['#required']); } } /** * {@inheritdoc} */ public static function trustedCallbacks() { return array_merge(['dateListCallback'], parent::trustedCallbacks()); } } src/Plugin/WebformElement/DateTime.php +110 −3 Changes for src/Plugin/WebformElement/DateTime.php: 110 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace Drupal\webform\Plugin\WebformElement; use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Datetime\Entity\DateFormat; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Security\TrustedCallbackInterface; use Drupal\webform\WebformSubmissionConditionsValidator; use Drupal\webform\WebformSubmissionInterface; Loading @@ -19,7 +20,7 @@ use Drupal\webform\WebformSubmissionInterface; * category = @Translation("Date/time elements"), * ) */ class DateTime extends DateBase { class DateTime extends DateBase implements TrustedCallbackInterface { /** * {@inheritdoc} Loading Loading @@ -113,7 +114,7 @@ class DateTime extends DateBase { } // Add date callback. $element['#date_date_callbacks'][] = '_webform_datetime_date'; $element['#date_date_callbacks'][] = floatval(\Drupal::VERSION) >= 9.3 ? [DateTime::class, 'dateCallback'] : '_webform_datetime_date'; /* Time */ Loading @@ -123,7 +124,7 @@ class DateTime extends DateBase { } // Add time callback. $element['#date_time_callbacks'][] = '_webform_datetime_time'; $element['#date_time_callbacks'][] = floatval(\Drupal::VERSION) >= 9.3 ? [DateTime::class, 'timeCallback'] : '_webform_datetime_time'; // Prepare element after date/time formats have been updated. parent::prepare($element, $webform_submission); Loading Loading @@ -425,4 +426,110 @@ class DateTime extends DateBase { return $properties; } /** * Callback for custom datetime date element. * * @param array $element * The element. * @param \Drupal\Core\Form\FormStateInterface $form_state * The form state. * @param \Drupal\Core\Datetime\DrupalDateTime|null $date * The date value. * * @see \Drupal\webform\Plugin\WebformElement\DateTime::prepare */ public static function dateCallback(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) { // Make sure the date element is being displayed. if (!isset($element['date'])) { return; } $type = (isset($element['#date_date_element'])) ? $element['#date_date_element'] : 'date'; switch ($type) { case 'datepicker': // Convert #type from datepicker to textfield. $element['date']['#type'] = 'textfield'; // Must manually set 'data-drupal-date-format' to trigger date picker. // @see \Drupal\Core\Render\Element\Date::processDate $element['date']['#attributes']['data-drupal-date-format'] = [$element['date']['#date_date_format']]; break; } } /** * Callback for custom datetime time element. * * @param array $element * The element. * @param \Drupal\Core\Form\FormStateInterface $form_state * The form state. * @param \Drupal\Core\Datetime\DrupalDateTime|null $date * The date value. * * @see \Drupal\webform\Plugin\WebformElement\DateTime::prepare */ public static function timeCallback(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) { // Make sure the time element is being displayed. if (!isset($element['time'])) { return; } // Apply time specific min/max to the element. foreach (['min', 'max'] as $property) { if (!empty($element["#date_time_$property"])) { $value = $element["#date_time_$property"]; } elseif (!empty($element["#date_$property"])) { $value = date('H:i:s', strtotime($element["#date_$property"])); } else { $value = NULL; } if ($value) { $element['time']["#$property"] = $value; $element['time']['#attributes'][$property] = $value; } } // Apply time step and format to the element. if (!empty($element['#date_time_step'])) { $element['time']['#step'] = $element['#date_time_step']; $element['time']['#attributes']['step'] = $element['#date_time_step']; } if (!empty($element['#date_time_format'])) { $element['time']['#time_format'] = $element['#date_time_format']; } // Remove extra attributes for date element. unset( $element['time']['#attributes']['data-min-year'], $element['time']['#attributes']['data-max-year'] ); $type = $element['#date_time_element'] ?? 'time'; switch ($type) { case 'timepicker': $element['time']['#type'] = 'webform_time'; $element['time']['#timepicker'] = TRUE; break; case 'time': $element['time']['#type'] = 'webform_time'; break; case 'text': $element['time']['#element_validate'][] = ['\Drupal\webform\Element\WebformTime', 'validateWebformTime']; break; } } /** * {@inheritdoc} */ public static function trustedCallbacks() { return array_merge(['dateCallback', 'timeCallback'], parent::trustedCallbacks()); } } Loading
includes/webform.date.inc +5 −76 Changes for includes/webform.date.inc: 5 added lines, 76 removed lines. Original line number Diff line number Diff line Loading @@ -7,7 +7,8 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Datetime\DateHelper; use Drupal\webform\Plugin\WebformElement\DateList; use Drupal\webform\Plugin\WebformElement\DateTime; /** * Callback for removing abbreviation from datelist. Loading @@ -22,12 +23,7 @@ use Drupal\Core\Datetime\DateHelper; * @see \Drupal\Core\Datetime\Element\Datelist::processDatelist */ function _webform_datelist_date_date_callback(array &$element, FormStateInterface $form_state, $date) { $no_abbreviate = (isset($element['#date_abbreviate']) && $element['#date_abbreviate'] === FALSE); if ($no_abbreviate && isset($element['month']) && isset($element['month']['#options'])) { // Load translated date part labels from the appropriate calendar plugin. $date_helper = new DateHelper(); $element['month']['#options'] = $date_helper->monthNames($element['#required']); } DateList::dateListCallback($element, $form_state, $date); } /** Loading @@ -43,22 +39,7 @@ function _webform_datelist_date_date_callback(array &$element, FormStateInterfac * @see \Drupal\webform\Plugin\WebformElement\DateTime::prepare */ function _webform_datetime_date(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) { // Make sure the date element is being displayed. if (!isset($element['date'])) { return; } $type = $element['#date_date_element'] ?? 'date'; switch ($type) { case 'datepicker': // Convert #type from datepicker to textfield. $element['date']['#type'] = 'textfield'; // Must manually set 'data-drupal-date-format' to trigger date picker. // @see \Drupal\Core\Render\Element\Date::processDate $element['date']['#attributes']['data-drupal-date-format'] = [$element['date']['#date_date_format']]; break; } DateTime::dateCallback($element, $form_state, $date); } /** Loading @@ -74,57 +55,5 @@ function _webform_datetime_date(array &$element, FormStateInterface $form_state, * @see \Drupal\webform\Plugin\WebformElement\DateTime::prepare */ function _webform_datetime_time(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) { // Make sure the time element is being displayed. if (!isset($element['time'])) { return; } // Apply time specific min/max to the element. foreach (['min', 'max'] as $property) { if (!empty($element["#date_time_$property"])) { $value = $element["#date_time_$property"]; } elseif (!empty($element["#date_$property"])) { $value = date('H:i:s', strtotime($element["#date_$property"])); } else { $value = NULL; } if ($value) { $element['time']["#$property"] = $value; $element['time']['#attributes'][$property] = $value; } } // Apply time step and format to the element. if (!empty($element['#date_time_step'])) { $element['time']['#step'] = $element['#date_time_step']; $element['time']['#attributes']['step'] = $element['#date_time_step']; } if (!empty($element['#date_time_format'])) { $element['time']['#time_format'] = $element['#date_time_format']; } // Remove extra attributes for date element. unset( $element['time']['#attributes']['data-min-year'], $element['time']['#attributes']['data-max-year'] ); $type = $element['#date_time_element'] ?? 'time'; switch ($type) { case 'timepicker': $element['time']['#type'] = 'webform_time'; $element['time']['#timepicker'] = TRUE; break; case 'time': $element['time']['#type'] = 'webform_time'; break; case 'text': $element['time']['#element_validate'][] = ['\Drupal\webform\Element\WebformTime', 'validateWebformTime']; break; } DateTime::timeCallback($element, $form_state, $date); }
src/Plugin/WebformElement/DateList.php +32 −2 Changes for src/Plugin/WebformElement/DateList.php: 32 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -2,10 +2,12 @@ namespace Drupal\webform\Plugin\WebformElement; use Drupal\Core\Datetime\DateHelper; use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Datetime\Element\Datelist as DatelistElement; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element; use Drupal\Core\Security\TrustedCallbackInterface; use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\webform\WebformSubmissionConditionsValidator; use Drupal\webform\WebformSubmissionInterface; Loading @@ -21,7 +23,7 @@ use Drupal\webform\WebformSubmissionInterface; * category = @Translation("Date/time elements"), * ) */ class DateList extends DateBase { class DateList extends DateBase implements TrustedCallbackInterface { /** * {@inheritdoc} Loading Loading @@ -57,7 +59,7 @@ class DateList extends DateBase { // Remove month abbreviation. // @see \Drupal\Core\Datetime\Element\Datelist::processDatelist if (isset($element['#date_abbreviate']) && $element['#date_abbreviate'] === FALSE) { $element['#date_date_callbacks'][] = '_webform_datelist_date_date_callback'; $element['#date_date_callbacks'][] = floatval(\Drupal::VERSION) >= 9.3 ? [DateList::class, 'dateListCallback'] : '_webform_datelist_date_date_callback'; } // Remove 'for' from the element's label. Loading Loading @@ -296,4 +298,32 @@ class DateList extends DateBase { } } /** * Callback for removing abbreviation from datelist. * * @param array $element * The element. * @param \Drupal\Core\Form\FormStateInterface $form_state * The form state. * @param \Drupal\Core\Datetime\DrupalDateTime|null $date * The date value. * * @see \Drupal\Core\Datetime\Element\Datelist::processDatelist */ public static function dateListCallback(array &$element, FormStateInterface $form_state, $date) { $no_abbreviate = (isset($element['#date_abbreviate']) && $element['#date_abbreviate'] === FALSE); if ($no_abbreviate && isset($element['month']) && isset($element['month']['#options'])) { // Load translated date part labels from the appropriate calendar plugin. $date_helper = new DateHelper(); $element['month']['#options'] = $date_helper->monthNames($element['#required']); } } /** * {@inheritdoc} */ public static function trustedCallbacks() { return array_merge(['dateListCallback'], parent::trustedCallbacks()); } }
src/Plugin/WebformElement/DateTime.php +110 −3 Changes for src/Plugin/WebformElement/DateTime.php: 110 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace Drupal\webform\Plugin\WebformElement; use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Datetime\Entity\DateFormat; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Security\TrustedCallbackInterface; use Drupal\webform\WebformSubmissionConditionsValidator; use Drupal\webform\WebformSubmissionInterface; Loading @@ -19,7 +20,7 @@ use Drupal\webform\WebformSubmissionInterface; * category = @Translation("Date/time elements"), * ) */ class DateTime extends DateBase { class DateTime extends DateBase implements TrustedCallbackInterface { /** * {@inheritdoc} Loading Loading @@ -113,7 +114,7 @@ class DateTime extends DateBase { } // Add date callback. $element['#date_date_callbacks'][] = '_webform_datetime_date'; $element['#date_date_callbacks'][] = floatval(\Drupal::VERSION) >= 9.3 ? [DateTime::class, 'dateCallback'] : '_webform_datetime_date'; /* Time */ Loading @@ -123,7 +124,7 @@ class DateTime extends DateBase { } // Add time callback. $element['#date_time_callbacks'][] = '_webform_datetime_time'; $element['#date_time_callbacks'][] = floatval(\Drupal::VERSION) >= 9.3 ? [DateTime::class, 'timeCallback'] : '_webform_datetime_time'; // Prepare element after date/time formats have been updated. parent::prepare($element, $webform_submission); Loading Loading @@ -425,4 +426,110 @@ class DateTime extends DateBase { return $properties; } /** * Callback for custom datetime date element. * * @param array $element * The element. * @param \Drupal\Core\Form\FormStateInterface $form_state * The form state. * @param \Drupal\Core\Datetime\DrupalDateTime|null $date * The date value. * * @see \Drupal\webform\Plugin\WebformElement\DateTime::prepare */ public static function dateCallback(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) { // Make sure the date element is being displayed. if (!isset($element['date'])) { return; } $type = (isset($element['#date_date_element'])) ? $element['#date_date_element'] : 'date'; switch ($type) { case 'datepicker': // Convert #type from datepicker to textfield. $element['date']['#type'] = 'textfield'; // Must manually set 'data-drupal-date-format' to trigger date picker. // @see \Drupal\Core\Render\Element\Date::processDate $element['date']['#attributes']['data-drupal-date-format'] = [$element['date']['#date_date_format']]; break; } } /** * Callback for custom datetime time element. * * @param array $element * The element. * @param \Drupal\Core\Form\FormStateInterface $form_state * The form state. * @param \Drupal\Core\Datetime\DrupalDateTime|null $date * The date value. * * @see \Drupal\webform\Plugin\WebformElement\DateTime::prepare */ public static function timeCallback(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) { // Make sure the time element is being displayed. if (!isset($element['time'])) { return; } // Apply time specific min/max to the element. foreach (['min', 'max'] as $property) { if (!empty($element["#date_time_$property"])) { $value = $element["#date_time_$property"]; } elseif (!empty($element["#date_$property"])) { $value = date('H:i:s', strtotime($element["#date_$property"])); } else { $value = NULL; } if ($value) { $element['time']["#$property"] = $value; $element['time']['#attributes'][$property] = $value; } } // Apply time step and format to the element. if (!empty($element['#date_time_step'])) { $element['time']['#step'] = $element['#date_time_step']; $element['time']['#attributes']['step'] = $element['#date_time_step']; } if (!empty($element['#date_time_format'])) { $element['time']['#time_format'] = $element['#date_time_format']; } // Remove extra attributes for date element. unset( $element['time']['#attributes']['data-min-year'], $element['time']['#attributes']['data-max-year'] ); $type = $element['#date_time_element'] ?? 'time'; switch ($type) { case 'timepicker': $element['time']['#type'] = 'webform_time'; $element['time']['#timepicker'] = TRUE; break; case 'time': $element['time']['#type'] = 'webform_time'; break; case 'text': $element['time']['#element_validate'][] = ['\Drupal\webform\Element\WebformTime', 'validateWebformTime']; break; } } /** * {@inheritdoc} */ public static function trustedCallbacks() { return array_merge(['dateCallback', 'timeCallback'], parent::trustedCallbacks()); } }