You are here

class DateTimeFormatConstraintValidator in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/datetime/src/Plugin/Validation/Constraint/DateTimeFormatConstraintValidator.php \Drupal\datetime\Plugin\Validation\Constraint\DateTimeFormatConstraintValidator

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

Hierarchy

Expanded class hierarchy of DateTimeFormatConstraintValidator

File

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

Namespace

Drupal\datetime\Plugin\Validation\Constraint
View source
class DateTimeFormatConstraintValidator extends ConstraintValidator {

  /**
   * {@inheritdoc}
   */
  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,
          ]);
        }
      }
    }
  }

}

Members