/web/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php
https://gitlab.com/andecode/theme-spark · PHP · 139 lines · 78 code · 18 blank · 43 comment · 6 complexity · 7e03ecd4c8b922aca43956e6053e75ef MD5 · raw file
- <?php
- namespace Drupal\datetime\Plugin\Field\FieldType;
- use Drupal\Core\Field\FieldDefinitionInterface;
- use Drupal\Core\Field\FieldStorageDefinitionInterface;
- use Drupal\Core\Form\FormStateInterface;
- use Drupal\Core\TypedData\DataDefinition;
- use Drupal\Core\Field\FieldItemBase;
- /**
- * Plugin implementation of the 'datetime' field type.
- *
- * @FieldType(
- * id = "datetime",
- * label = @Translation("Date"),
- * description = @Translation("Create and store date values."),
- * default_widget = "datetime_default",
- * default_formatter = "datetime_default",
- * list_class = "\Drupal\datetime\Plugin\Field\FieldType\DateTimeFieldItemList",
- * constraints = {"DateTimeFormat" = {}}
- * )
- */
- class DateTimeItem extends FieldItemBase implements DateTimeItemInterface {
- /**
- * {@inheritdoc}
- */
- public static function defaultStorageSettings() {
- return [
- 'datetime_type' => 'datetime',
- ] + parent::defaultStorageSettings();
- }
- /**
- * Value for the 'datetime_type' setting: store only a date.
- */
- const DATETIME_TYPE_DATE = 'date';
- /**
- * Value for the 'datetime_type' setting: store a date and time.
- */
- const DATETIME_TYPE_DATETIME = 'datetime';
- /**
- * {@inheritdoc}
- */
- public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
- $properties['value'] = DataDefinition::create('datetime_iso8601')
- ->setLabel(t('Date value'))
- ->setRequired(TRUE);
- $properties['date'] = DataDefinition::create('any')
- ->setLabel(t('Computed date'))
- ->setDescription(t('The computed DateTime object.'))
- ->setComputed(TRUE)
- ->setClass('\Drupal\datetime\DateTimeComputed')
- ->setSetting('date source', 'value');
- return $properties;
- }
- /**
- * {@inheritdoc}
- */
- public static function schema(FieldStorageDefinitionInterface $field_definition) {
- return [
- 'columns' => [
- 'value' => [
- 'description' => 'The date value.',
- 'type' => 'varchar',
- 'length' => 20,
- ],
- ],
- 'indexes' => [
- 'value' => ['value'],
- ],
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) {
- $element = [];
- $element['datetime_type'] = [
- '#type' => 'select',
- '#title' => t('Date type'),
- '#description' => t('Choose the type of date to create.'),
- '#default_value' => $this->getSetting('datetime_type'),
- '#options' => [
- static::DATETIME_TYPE_DATETIME => t('Date and time'),
- static::DATETIME_TYPE_DATE => t('Date only'),
- ],
- '#disabled' => $has_data,
- ];
- return $element;
- }
- /**
- * {@inheritdoc}
- */
- public static function generateSampleValue(FieldDefinitionInterface $field_definition) {
- $type = $field_definition->getSetting('datetime_type');
- // Just pick a date in the past year. No guidance is provided by this Field
- // type.
- $timestamp = REQUEST_TIME - mt_rand(0, 86400 * 365);
- if ($type == DateTimeItem::DATETIME_TYPE_DATE) {
- $values['value'] = gmdate(static::DATE_STORAGE_FORMAT, $timestamp);
- }
- else {
- $values['value'] = gmdate(static::DATETIME_STORAGE_FORMAT, $timestamp);
- }
- return $values;
- }
- /**
- * {@inheritdoc}
- */
- public function isEmpty() {
- $value = $this->get('value')->getValue();
- return $value === NULL || $value === '';
- }
- /**
- * {@inheritdoc}
- */
- public function onChange($property_name, $notify = TRUE) {
- // Enforce that the computed date is recalculated.
- if ($property_name == 'value') {
- $this->date = NULL;
- }
- parent::onChange($property_name, $notify);
- }
- }