diff --git a/core/lib/Drupal/Core/Datetime/DateFormatter.php b/core/lib/Drupal/Core/Datetime/DateFormatter.php index 0b4f817..6bbd77f 100644 --- a/core/lib/Drupal/Core/Datetime/DateFormatter.php +++ b/core/lib/Drupal/Core/Datetime/DateFormatter.php @@ -193,6 +193,33 @@ public function formatInterval($interval, $granularity = 2, $langcode = NULL) { } /** + * Provides all date format characters value for given timestamp. + * + * @param string|null $langcode + * Language code of date format. + * @param int|null $timestamp + * Unix timestamp. + * @param string|null $timezone + * String timezone. + * + * @return array + * An array of formatted date value indexed by date character. + */ + public function getSampleDateFormats($langcode = NULL, $timestamp = NULL, $timezone = NULL) { + $language_code = $langcode ?: NULL; + $ts = $timestamp ?: REQUEST_TIME; + $tz = $timezone ?: NULL; + // All date format characters in PHP. + $date_characters = 'dDjlNSwzWFmMntLoYyaABgGhHisueIOPTZcrU'; + $date_chars = str_split($date_characters); + $date_elements = array_combine($date_chars, $date_chars); + array_walk($date_elements, function(&$character) use ($ts, $tz, $language_code) { + $character = $this->format($ts, 'custom', $character, $tz, $language_code); + }); + return $date_elements; + } + + /** * Loads the given format pattern for the given langcode. * * @param string $format diff --git a/core/modules/config_translation/src/FormElement/DateFormat.php b/core/modules/config_translation/src/FormElement/DateFormat.php index ea947af..f833362 100644 --- a/core/modules/config_translation/src/FormElement/DateFormat.php +++ b/core/modules/config_translation/src/FormElement/DateFormat.php @@ -22,8 +22,10 @@ class DateFormat extends FormElementBase { * {@inheritdoc} */ public function getTranslationElement(LanguageInterface $translation_language, $source_config, $translation_config) { + /** @var \Drupal\Core\Datetime\DateFormatter $date_formatter */ + $date_formatter = \Drupal::service('date.formatter'); $description = $this->t('A user-defined date format. See the PHP manual for available options.', array('@url' => 'http://php.net/manual/function.date.php')); - $format = $this->t('Displayed as %date_format', array('%date_format' => \Drupal::service('date.formatter')->format(REQUEST_TIME, 'custom', $translation_config))); + $format = $this->t('Displayed as %date_format', array('%date_format' => $date_formatter->format(REQUEST_TIME, 'custom', $translation_config))); return array( '#type' => 'textfield', @@ -33,7 +35,7 @@ public function getTranslationElement(LanguageInterface $translation_language, $ 'class' => array('date-formatter'), ), '#attached' => array( - 'drupalSettings' => array('dateFormats' => $this->getSampleDateFormats($translation_language->getId())), + 'drupalSettings' => array('dateFormats' => $date_formatter->getSampleDateFormats($translation_language->getId())), ), ) + parent::getTranslationElement($translation_language, $source_config, $translation_config); @@ -50,26 +52,4 @@ public function getFormAttributes() { ); } - /** - * Provides all date format characters for date format preview on client side. - * - * @param int|null $timestamp - * @return array - * An array of date character values keyed by characters. - */ - protected function getSampleDateFormats($langcode, $timestamp = NULL, $timezone = NULL) { - $tz = $timezone ?: date_default_timezone_get(); - $ts = $timestamp ?: REQUEST_TIME; - // All date format characters in PHP. - $date_characters = 'dDjlNSwzWFmMntLoYyaABgGhHisueIOPTZcrU'; - $date_chars = str_split($date_characters); - $date_elements = array_combine($date_chars, $date_chars); - /** @var \Drupal\Core\Datetime\DateFormatter $date_formatter */ - $date_formatter = \Drupal::service('date.formatter'); - array_walk($date_elements, function(&$character) use ($ts, $date_formatter, $langcode, $tz) { - $character = $date_formatter->format($ts, 'custom', $character, $tz, $langcode); - }); - return $date_elements; - } - } diff --git a/core/modules/config_translation/src/FormElement/ElementInterface.php b/core/modules/config_translation/src/FormElement/ElementInterface.php index 22ab0ef..c9fb0b9 100644 --- a/core/modules/config_translation/src/FormElement/ElementInterface.php +++ b/core/modules/config_translation/src/FormElement/ElementInterface.php @@ -70,11 +70,11 @@ public function getTranslationBuild(LanguageInterface $source_language, Language */ public function setConfig(Config $base_config, LanguageConfigOverride $config_translation, $config_values, $base_key = NULL); - /** - * Builds a form attributes for the configuration form. + * Allows to provide form attributes for the configuration form. * - * @return mixed + * @return array + * An array of form attributes. */ public function getFormAttributes(); diff --git a/core/modules/config_translation/src/FormElement/FormElementBase.php b/core/modules/config_translation/src/FormElement/FormElementBase.php index b8438d7..53cf5ff 100644 --- a/core/modules/config_translation/src/FormElement/FormElementBase.php +++ b/core/modules/config_translation/src/FormElement/FormElementBase.php @@ -74,6 +74,9 @@ public function getTranslationBuild(LanguageInterface $source_language, Language return $build; } + /** + * {@inheritdoc} + */ public function getFormAttributes() { return array(); } diff --git a/core/modules/system/src/Form/DateFormatFormBase.php b/core/modules/system/src/Form/DateFormatFormBase.php index 0c46500..c2c86ab 100644 --- a/core/modules/system/src/Form/DateFormatFormBase.php +++ b/core/modules/system/src/Form/DateFormatFormBase.php @@ -120,7 +120,7 @@ public function form(array $form, FormStateInterface $form_state) { '#languages' => LanguageInterface::STATE_ALL, '#default_value' => $this->entity->language()->getId(), ); - $form['#attached']['drupalSettings']['dateFormats'] = $this->getSampleDateFormats(); + $form['#attached']['drupalSettings']['dateFormats'] = $this->dateFormatter->getSampleDateFormats(); $form['#attached']['library'][] = 'system/drupal.system.date'; return parent::form($form, $form_state); } @@ -165,23 +165,4 @@ public function save(array $form, FormStateInterface $form_state) { $form_state->setRedirectUrl($this->entity->urlInfo('collection')); } - /** - * Provides all date format characters for date format preview on client side. - * - * @param int|null $timestamp - * @return array - * An array of date character values keyed by characters. - */ - protected function getSampleDateFormats($timestamp = NULL) { - $ts = $timestamp ?: REQUEST_TIME; - // All date format characters in PHP. - $date_characters = 'dDjlNSwzWFmMntLoYyaABgGhHisueIOPTZcrU'; - $date_chars = str_split($date_characters); - $date_elements = array_combine($date_chars, $date_chars); - array_walk($date_elements, function(&$character) use ($ts) { - $character = $this->dateFormatter->format($ts, 'custom', $character); - }); - return $date_elements; - } - }