Further Drupal 8.6.4 changes. Some core files were not committed before a commit...
[yaffs-website] / web / core / modules / workspaces / src / Plugin / Validation / Constraint / EntityWorkspaceConflictConstraintValidator.php
1 <?php
2
3 namespace Drupal\workspaces\Plugin\Validation\Constraint;
4
5 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
6 use Drupal\Core\Entity\EntityTypeManagerInterface;
7 use Drupal\workspaces\WorkspaceManagerInterface;
8 use Symfony\Component\DependencyInjection\ContainerInterface;
9 use Symfony\Component\Validator\Constraint;
10 use Symfony\Component\Validator\ConstraintValidator;
11
12 /**
13  * Validates the EntityWorkspaceConflict constraint.
14  */
15 class EntityWorkspaceConflictConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
16
17   /**
18    * The entity type manager.
19    *
20    * @var \Drupal\Core\Entity\EntityTypeManagerInterface
21    */
22   protected $entityTypeManager;
23
24   /**
25    * The workspace manager service.
26    *
27    * @var \Drupal\workspaces\WorkspaceManagerInterface
28    */
29   protected $workspaceManager;
30
31   /**
32    * Constructs an EntityUntranslatableFieldsConstraintValidator object.
33    *
34    * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
35    *   The entity type manager service.
36    * @param \Drupal\workspaces\WorkspaceManagerInterface $workspace_manager
37    *   The workspace manager service.
38    */
39   public function __construct(EntityTypeManagerInterface $entity_type_manager, WorkspaceManagerInterface $workspace_manager) {
40     $this->entityTypeManager = $entity_type_manager;
41     $this->workspaceManager = $workspace_manager;
42   }
43
44   /**
45    * {@inheritdoc}
46    */
47   public static function create(ContainerInterface $container) {
48     return new static(
49       $container->get('entity_type.manager'),
50       $container->get('workspaces.manager')
51     );
52   }
53
54   /**
55    * {@inheritdoc}
56    */
57   public function validate($entity, Constraint $constraint) {
58     /** @var \Drupal\Core\Entity\EntityInterface $entity */
59     if (isset($entity) && !$entity->isNew()) {
60       /** @var \Drupal\workspaces\WorkspaceAssociationStorageInterface $workspace_association_storage */
61       $workspace_association_storage = $this->entityTypeManager->getStorage('workspace_association');
62       $workspace_ids = $workspace_association_storage->getEntityTrackingWorkspaceIds($entity);
63       $active_workspace = $this->workspaceManager->getActiveWorkspace();
64
65       if ($workspace_ids && !in_array($active_workspace->id(), $workspace_ids, TRUE)) {
66         // An entity can only be edited in one workspace.
67         $workspace_id = reset($workspace_ids);
68         $workspace = $this->entityTypeManager->getStorage('workspace')->load($workspace_id);
69
70         $this->context->buildViolation($constraint->message)
71           ->setParameter('%label', $workspace->label())
72           ->addViolation();
73       }
74     }
75   }
76
77 }