entityTypeManager = $entity_type_manager; $this->workspaceManager = $workspace_manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('entity_type.manager'), $container->get('workspaces.manager') ); } /** * {@inheritdoc} */ public function validate($entity, Constraint $constraint) { /** @var \Drupal\Core\Entity\EntityInterface $entity */ if (isset($entity) && !$entity->isNew()) { /** @var \Drupal\workspaces\WorkspaceAssociationStorageInterface $workspace_association_storage */ $workspace_association_storage = $this->entityTypeManager->getStorage('workspace_association'); $workspace_ids = $workspace_association_storage->getEntityTrackingWorkspaceIds($entity); $active_workspace = $this->workspaceManager->getActiveWorkspace(); if ($workspace_ids && !in_array($active_workspace->id(), $workspace_ids, TRUE)) { // An entity can only be edited in one workspace. $workspace_id = reset($workspace_ids); $workspace = $this->entityTypeManager->getStorage('workspace')->load($workspace_id); $this->context->buildViolation($constraint->message) ->setParameter('%label', $workspace->label()) ->addViolation(); } } } }