contacts_events-8.x-1.x-dev/src/Plugin/Validation/Constraint/BookingWindowsUniqueConstraintValidator.php

src/Plugin/Validation/Constraint/BookingWindowsUniqueConstraintValidator.php
<?php

namespace Drupal\contacts_events\Plugin\Validation\Constraint;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

/**
 * Validates that a booking window is unique.
 */
class BookingWindowsUniqueConstraintValidator extends ConstraintValidator {

  /**
   * {@inheritdoc}
   */
  public function validate($items, Constraint $constraint) {
    /** @var \Drupal\contacts_events\Plugin\Field\FieldType\BookingWindowsItemList $items */
    // Track existing labels and cut offs.
    $properties = [
      'id' => 'messageId',
      'label' => 'messageLabel',
      'cut_off' => 'messageCutOff',
      'cut_off_confirmed' => 'messageCutOff',
    ];
    $existing = array_fill_keys(array_keys($properties), []);
    $errors = [];

    // Loop over each item and property.
    foreach ($items as $item) {
      foreach ($properties as $property => $message) {
        // If it already exists, track for an error.
        if (in_array($item->{$property}, $existing[$property])) {
          $errors[$message] = $message;
        }
        // Otherwise track the value.
        else {
          $existing[$property][] = $item->{$property};
        }
      }
    }

    foreach ($errors as $message) {
      $this->context->addViolation($constraint->{$message});
    }
  }

}

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

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