media_avportal-8.x-1.0-beta10/src/Plugin/Validation/Constraint/AvPortalResourceConstraintValidator.php

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

declare(strict_types=1);

namespace Drupal\media_avportal\Plugin\Validation\Constraint;

use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\media_avportal\AvPortalClientInterface;
use Drupal\media_avportal\Plugin\media\Source\MediaAvPortalSourceInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

/**
 * Validates AvPortal resource URLs.
 */
class AvPortalResourceConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {

  /**
   * The AV portal client.
   *
   * @var \Drupal\media_avportal\AvPortalClientInterface
   */
  protected $avPortalClient;

  /**
   * Constructs a new AvPortalResourceConstraintValidator.
   *
   * @param \Drupal\media_avportal\AvPortalClientInterface $avPortalClient
   *   The AV portal client.
   */
  public function __construct(AvPortalClientInterface $avPortalClient) {
    $this->avPortalClient = $avPortalClient;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('media_avportal.client')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function validate($items, Constraint $constraint) {
    /** @var \Drupal\media\MediaInterface $media */
    $media = $items->getEntity();
    /** @var \Drupal\media_avportal\Plugin\media\Source\MediaAvPortalVideoSource $source */
    $source = $media->getSource();

    if (!($source instanceof MediaAvPortalSourceInterface)) {
      throw new \LogicException('Media source must implement ' . MediaAvPortalSourceInterface::class);
    }

    $reference = $source->getSourceFieldValue($media);
    $resource = $this->avPortalClient->getResource($reference);

    if ($resource === NULL) {
      $this->context->addViolation($constraint->message, ['%ref%' => $reference]);
    }
  }

}

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

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