time_field-8.x-1.13/src/Plugin/Field/FieldType/TimeFieldItemList.php

src/Plugin/Field/FieldType/TimeFieldItemList.php
<?php

namespace Drupal\time_field\Plugin\Field\FieldType;

use Drupal\Core\Entity\FieldableEntityInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\Form\FormStateInterface;

/**
 * Represents a configurable entity time field.
 */
class TimeFieldItemList extends FieldItemList {

  /**
   * Defines the default value as now.
   */
  const DEFAULT_VALUE_NOW = 'now';

  /**
   * {@inheritdoc}
   */
  public function defaultValuesForm(array &$form, FormStateInterface $form_state) {
    $element = parent::defaultValuesForm($form, $form_state);
    if (empty($this->getFieldDefinition()->getDefaultValueCallback())) {
      $default_value = $this->getFieldDefinition()->getDefaultValueLiteral();
      $element['use_current_time'] = [
        '#type' => 'checkbox',
        '#title' => $this->t('Current time'),
        '#description' => $this->t('Use current time as the default value.'),
        '#default_value' => isset($default_value[0]) && $default_value[0] === static::DEFAULT_VALUE_NOW,
      ];
    }
    return $element;
  }

  /**
   * {@inheritdoc}
   */
  public function defaultValuesFormSubmit(array $element, array &$form, FormStateInterface $form_state) {
    if ($form_state->getValue(['default_value_input', 'use_current_time'])) {
      return [static::DEFAULT_VALUE_NOW];
    }
    return parent::defaultValuesFormSubmit($element, $form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public static function processDefaultValue($default_value, FieldableEntityInterface $entity, FieldDefinitionInterface $definition) {
    $default_value = parent::processDefaultValue($default_value, $entity, $definition);
    if (isset($default_value[0]) && $default_value[0] === static::DEFAULT_VALUE_NOW) {
      $default_value[0] = \Drupal::time()->getRequestTime() - strtotime('today midnight');
    }
    return $default_value;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc