media_directories-2.x-dev/modules/media_directories_ui/src/Plugin/Validation/Constraint/MediaDirectoriesConstraintValidator.php

modules/media_directories_ui/src/Plugin/Validation/Constraint/MediaDirectoriesConstraintValidator.php
<?php

namespace Drupal\media_directories_ui\Plugin\Validation\Constraint;

use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\file\Plugin\Validation\Constraint\BaseFileConstraintValidator;
use Drupal\file\Validation\FileValidatorInterface;
use Drupal\media_directories_ui\MediaDirectoriesUiHelper;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Exception\UnexpectedTypeException;

/**
 * Validates the file with validators specified for it's type.
 */
class MediaDirectoriesConstraintValidator extends BaseFileConstraintValidator implements ContainerInjectionInterface {

  /**
   * The UI helper.
   *
   * @var \Drupal\media_directories_ui\MediaDirectoriesUiHelper
   */
  protected $uiHelper;

  /**
   * The file validator.
   *
   * @var \Drupal\file\Validation\FileValidatorInterface
   */
  protected $fileValidator;

  /**
   * Constructs a new OEmbedResourceConstraintValidator.
   *
   * @param \Drupal\media_directories_ui\MediaDirectoriesUiHelper $ui_helper
   *   The UI helper.
   * @param \Drupal\file\Validation\FileValidatorInterface $file_validator
   *   The file validator.
   */
  public function __construct(MediaDirectoriesUiHelper $ui_helper, FileValidatorInterface $file_validator) {
    $this->uiHelper = $ui_helper;
    $this->fileValidator = $file_validator;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container->get('media_directories_ui.helper'), $container->get('file.validator'));
  }

  /**
   * {@inheritdoc}
   */
  public function validate(mixed $value, Constraint $constraint): void {
    $file = $this->assertValueIsFile($value);
    if (!$constraint instanceof MediaDirectoriesConstraint) {
      throw new UnexpectedTypeException($constraint, MediaDirectoriesConstraint::class);
    }

    /** @var \Drupal\media\Entity\MediaType $media_type */
    $media_type = $this->uiHelper->getMediaType($file);
    if ($media_type != NULL) {
      /** @var \Symfony\Component\Validator\ConstraintViolationListInterface $violations */
      $violations = $this->fileValidator->validate($file, $constraint->validatorsByMediaType[$media_type->id()]);
      foreach ($violations as $violation) {
        $this->context->addViolation($violation, [
          '%files-allowed' => $this->uiHelper->getValidExtensions(),
        ]);
      }
    }
    else {
      $this->context->addViolation($constraint->extensionNotAllowed);
    }
  }

}

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

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