crossword-8.x-1.x-dev/src/Plugin/Validation/Constraint/CrosswordDimensionsValidator.php

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

namespace Drupal\crossword\Plugin\Validation\Constraint;

use Drupal\Core\Entity\EntityTypeManager;
use Drupal\crossword\CrosswordDataServiceInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Validates the crossword size.
 */
class CrosswordDimensionsValidator extends ConstraintValidator implements ContainerInjectionInterface {

  /**
   * Crossword data service.
   *
   * @var \Drupal\crossword\CrosswordDataServiceInterface
   */
  protected $crosswordDataService;

  /**
   * File storage.
   *
   * @var \Drupal\Core\Entity\EntityStorageInterface
   */
  protected $fileStorage;

  /**
   * A logger instance.
   *
   * @var \Psr\Log\LoggerInterface
   */
  protected $logger;

  /**
   * Create an instance of the validator.
   *
   * @param \Drupal\crossword\CrosswordDataServiceInterface $crossword_data_service
   *   The parser manager service.
   * @param \Drupal\Core\Entity\EntityTypeManager $entity_type_manager
   *   Entity type manager.
   * @param \Psr\Log\LoggerInterface $logger
   *   A logger instance.
   */
  public function __construct(CrosswordDataServiceInterface $crossword_data_service, EntityTypeManager $entity_type_manager, LoggerInterface $logger) {
    $this->crosswordDataService = $crossword_data_service;
    $this->fileStorage = $entity_type_manager->getStorage('file');
    $this->logger = $logger;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('crossword.data_service'),
      $container->get('entity_type.manager'),
      $container->get('logger.factory')->get('crossword')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function validate($items, Constraint $constraint) {
    $max_columns = $items->getFieldDefinition()->getSetting('max_columns');
    $min_columns = $items->getFieldDefinition()->getSetting('min_columns');
    $max_rows = $items->getFieldDefinition()->getSetting('max_rows');
    $min_rows = $items->getFieldDefinition()->getSetting('min_rows');

    foreach ($items as $item) {
      if (get_class($item) == "Drupal\Core\TypedData\Plugin\DataType\IntegerData") {
        $file = $this->fileStorage->load($item->getCastedValue());
        // The CrosswordFile validator has already run. That means we can safely
        // rely on the data service.
        $columns = $this->crosswordDataService->getDimensionAcross($file);
        $rows = $this->crosswordDataService->getDimensionDown($file);
        if ($max_columns && $columns > $max_columns) {
          $this->context->addViolation($constraint->tooManyColumns, ['%columns' => $columns, '%allowed' => $max_columns]);
        }
        if ($min_columns && $columns < $min_columns) {
          $this->context->addViolation($constraint->tooFewColumns, ['%columns' => $columns, '%required' => $min_columns]);
        }
        if ($max_rows && $rows > $max_rows) {
          $this->context->addViolation($constraint->tooManyRows, ['%rows' => $rows, '%allowed' => $max_rows]);
        }
        if ($min_rows && $rows < $min_rows) {
          $this->context->addViolation($constraint->tooFewRows, ['%rows' => $rows, '%required' => $min_rows]);
        }
      }
    }
  }

}

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

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