You are here

public function DateTimeFormatConstraintValidator::validate in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/datetime/src/Plugin/Validation/Constraint/DateTimeFormatConstraintValidator.php \Drupal\datetime\Plugin\Validation\Constraint\DateTimeFormatConstraintValidator::validate()
  2. 9 core/modules/datetime/src/Plugin/Validation/Constraint/DateTimeFormatConstraintValidator.php \Drupal\datetime\Plugin\Validation\Constraint\DateTimeFormatConstraintValidator::validate()

File

core/modules/datetime/src/Plugin/Validation/Constraint/DateTimeFormatConstraintValidator.php, line 19

Class

DateTimeFormatConstraintValidator
Constraint validator for DateTime items to ensure the format is correct.

Namespace

Drupal\datetime\Plugin\Validation\Constraint

Code

public function validate($item, Constraint $constraint) {

  /** @var \Drupal\datetime\Plugin\Field\FieldType\DateTimeItem $item */
  if (isset($item)) {
    $value = $item
      ->getValue()['value'];
    if (!is_string($value)) {
      $this->context
        ->addViolation($constraint->badType);
    }
    else {
      $datetime_type = $item
        ->getFieldDefinition()
        ->getSetting('datetime_type');
      $format = $datetime_type === DateTimeItem::DATETIME_TYPE_DATE ? DateTimeItemInterface::DATE_STORAGE_FORMAT : DateTimeItemInterface::DATETIME_STORAGE_FORMAT;
      $date = NULL;
      try {
        $date = DateTimePlus::createFromFormat($format, $value, new \DateTimeZone(DateTimeItemInterface::STORAGE_TIMEZONE));
      } catch (\InvalidArgumentException $e) {
        $this->context
          ->addViolation($constraint->badFormat, [
          '@value' => $value,
          '@format' => $format,
        ]);
        return;
      } catch (\UnexpectedValueException $e) {
        $this->context
          ->addViolation($constraint->badValue, [
          '@value' => $value,
          '@format' => $format,
        ]);
        return;
      }
      if ($date === NULL || $date
        ->hasErrors()) {
        $this->context
          ->addViolation($constraint->badFormat, [
          '@value' => $value,
          '@format' => $format,
        ]);
      }
    }
  }
}