build_hooks-8.x-2.4/src/Plugin/Validation/Constraint/BuildHooksDeploymentValidator.php

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

namespace Drupal\build_hooks\Plugin\Validation\Constraint;

use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

/**
 * Defines a validator for the BuildHooksEnvironment constraint.
 */
class BuildHooksDeploymentValidator extends ConstraintValidator implements ContainerInjectionInterface {

  /**
   * The entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  private $entityTypeManager;

  /**
   * Creates a new BuildHooksEnvironmentConstraintValidator instance.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager.
   */
  public function __construct(EntityTypeManagerInterface $entity_type_manager) {
    $this->entityTypeManager = $entity_type_manager;
  }

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

  /**
   * {@inheritdoc}
   */
  public function validate($entity, Constraint $constraint) {
    /** @var \Drupal\build_hooks\Entity\DeploymentInterface $entity */
    $deployment_storage = $this->entityTypeManager->getStorage($entity->getEntityTypeId());

    if ($entity->isDeployed()) {
      // Deployed entities don't matter.
      return;
    }

    $query = $deployment_storage->getQuery()
      ->condition('status', 0)
      ->condition('environment', $entity->bundle())
      ->range(0, 1)
      ->accessCheck(FALSE);

    if (!$entity->isNew()) {
      $query->condition('did', $entity->id(), '<>');
    }

    $undeployed = $query->execute();
    if ($undeployed) {
      $existing = $deployment_storage->load(reset($undeployed));
      $this->context->buildViolation($constraint->message, [
        '@label' => $existing->label(),
        ':url' => $existing->toUrl()->toString(),
      ])
        ->atPath('status')
        ->addViolation();
    }
  }

}

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

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