From 362e5f82c4d50bc415e6dcc25556dcfa642c23ba Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Mon, 5 Aug 2013 17:38:37 +0200 Subject: [PATCH] Issue #2017139 by amateescu, swentel: Convert field type to typed data plugin for datetime module . --- core/modules/datetime/datetime.install | 23 --- core/modules/datetime/datetime.module | 92 ------------ .../Plugin/field/field_type/DateTimeItem.php | 140 ++++++++++++++++++ .../lib/Drupal/datetime/Type/DateTimeItem.php | 39 ----- 4 files changed, 140 insertions(+), 154 deletions(-) delete mode 100644 core/modules/datetime/datetime.install create mode 100644 core/modules/datetime/lib/Drupal/datetime/Plugin/field/field_type/DateTimeItem.php delete mode 100644 core/modules/datetime/lib/Drupal/datetime/Type/DateTimeItem.php diff --git a/core/modules/datetime/datetime.install b/core/modules/datetime/datetime.install deleted file mode 100644 index e0362a897f7..00000000000 --- a/core/modules/datetime/datetime.install +++ /dev/null @@ -1,23 +0,0 @@ - 'The date value', - 'type' => 'varchar', - 'length' => 20, - 'not null' => FALSE, - ); - $indexes = array( - 'value' => array('value'), - ); - return array('columns' => $db_columns, 'indexes' => $indexes); -} diff --git a/core/modules/datetime/datetime.module b/core/modules/datetime/datetime.module index fdee1a69026..ebbcdd8d663 100644 --- a/core/modules/datetime/datetime.module +++ b/core/modules/datetime/datetime.module @@ -90,74 +90,6 @@ function datetime_theme() { ); } -/** - * Implements hook_field_is_empty(). - */ -function datetime_field_is_empty($item, $field_type) { - if (empty($item['value'])) { - return TRUE; - } - return FALSE; -} - -/** - * Implements hook_field_info(). - */ -function datetime_field_info() { - return array( - 'datetime' => array( - 'label' => 'Date', - 'description' => t('Create and store date values.'), - 'settings' => array( - 'datetime_type' => 'datetime', - ), - 'instance_settings' => array( - 'default_value' => 'now', - ), - 'default_widget' => 'datetime_default', - 'default_formatter' => 'datetime_default', - 'class' => '\Drupal\datetime\Type\DateTimeItem', - ), - ); -} - -/** - * Implements hook_field_settings_form(). - */ -function datetime_field_settings_form($field, $instance) { - $settings = $field['settings']; - - $form['datetime_type'] = array( - '#type' => 'select', - '#title' => t('Date type'), - '#description' => t('Choose the type of date to create.'), - '#default_value' => $settings['datetime_type'], - '#options' => array( - 'datetime' => t('Date and time'), - 'date' => t('Date only'), - ), - ); - return $form; -} - -/** - * Implements hook_field_instance_settings_form(). - */ -function datetime_field_instance_settings_form($field, $instance) { - $settings = $instance['settings']; - - $form['default_value'] = array( - '#type' => 'select', - '#title' => t('Default date'), - '#description' => t('Set a default value for this date.'), - '#default_value' => $settings['default_value'], - '#options' => array('blank' => t('No default value'), 'now' => t('The current date')), - '#weight' => 1, - ); - - return $form; -} - /** * Validation callback for the datetime widget element. * @@ -234,30 +166,6 @@ function datetime_datelist_widget_validate(&$element, &$form_state) { } } -/** - * Implements hook_field_load(). - * - * The function generates a Date object for each field early so that it is - * cached in the field cache. This avoids the need to generate the object later. - * The date will be retrieved in UTC, the local timezone adjustment must be made - * in real time, based on the preferences of the site and user. - */ -function datetime_field_load($entity_type, $entities, $field, $instances, $langcode, &$items) { - foreach ($entities as $id => $entity) { - foreach ($items[$id] as $delta => $item) { - $items[$id][$delta]['date'] = NULL; - $value = isset($item['value']) ? $item['value'] : NULL; - if (!empty($value)) { - $storage_format = $field['settings']['datetime_type'] == 'date' ? DATETIME_DATE_STORAGE_FORMAT: DATETIME_DATETIME_STORAGE_FORMAT; - $date = new DrupalDateTime($value, DATETIME_STORAGE_TIMEZONE, $storage_format); - if ($date instanceOf DrupalDateTime && !$date->hasErrors()) { - $items[$id][$delta]['date'] = $date; - } - } - } - } -} - /** * Sets a default value for an empty date field. * diff --git a/core/modules/datetime/lib/Drupal/datetime/Plugin/field/field_type/DateTimeItem.php b/core/modules/datetime/lib/Drupal/datetime/Plugin/field/field_type/DateTimeItem.php new file mode 100644 index 00000000000..e3b0190e7ba --- /dev/null +++ b/core/modules/datetime/lib/Drupal/datetime/Plugin/field/field_type/DateTimeItem.php @@ -0,0 +1,140 @@ + 'datetime_iso8601', + 'label' => t('Date value'), + ); + } + + return static::$propertyDefinitions; + } + + /** + * {@inheritdoc} + */ + public static function schema(Field $field) { + return array( + 'columns' => array( + 'value' => array( + 'description' => 'The date value.', + 'type' => 'varchar', + 'length' => 20, + 'not null' => FALSE, + ), + ), + 'indexes' => array( + 'value' => array('value'), + ), + ); + } + + /** + * {@inheritdoc} + */ + public function settingsForm(array $form, array &$form_state) { + $element = array(); + + $element['datetime_type'] = array( + '#type' => 'select', + '#title' => t('Date type'), + '#description' => t('Choose the type of date to create.'), + '#default_value' => $this->getFieldSetting('datetime_type'), + '#options' => array( + 'datetime' => t('Date and time'), + 'date' => t('Date only'), + ), + ); + + return $element; + } + + /** + * {@inheritdoc} + */ + public function instanceSettingsForm(array $form, array &$form_state) { + $element = array(); + + $element['default_value'] = array( + '#type' => 'select', + '#title' => t('Default date'), + '#description' => t('Set a default value for this date.'), + '#default_value' => $this->getFieldSetting('default_value'), + '#options' => array('blank' => t('No default value'), 'now' => t('The current date')), + '#weight' => 1, + ); + + return $element; + } + + /** + * {@inheritdoc} + */ + public function prepareCache() { + // The function generates a Date object for each field early so that it is + // cached in the field cache. This avoids the need to generate the object + // later. The date will be retrieved in UTC, the local timezone adjustment + // must be made in real time, based on the preferences of the site and user. + $value = $this->get('value')->getValue(); + if (!empty($value)) { + $storage_format = $this->getFieldSetting('datetime_type') == 'date' ? DATETIME_DATE_STORAGE_FORMAT : DATETIME_DATETIME_STORAGE_FORMAT; + $date = new DrupalDateTime($value, DATETIME_STORAGE_TIMEZONE, $storage_format); + if ($date instanceOf DrupalDateTime && !$date->hasErrors()) { + $this->set('date', $date); + } + } + } + + /** + * {@inheritdoc} + */ + public function isEmpty() { + $value = $this->get('value')->getValue(); + return $value === NULL || $value === ''; + } + +} diff --git a/core/modules/datetime/lib/Drupal/datetime/Type/DateTimeItem.php b/core/modules/datetime/lib/Drupal/datetime/Type/DateTimeItem.php deleted file mode 100644 index 78c18244722..00000000000 --- a/core/modules/datetime/lib/Drupal/datetime/Type/DateTimeItem.php +++ /dev/null @@ -1,39 +0,0 @@ - 'datetime_iso8601', - 'label' => t('Date value'), - ); - } - return self::$propertyDefinitions; - } -}