You are here

public function EntityWorkspaceConflictConstraintValidator::validate in Workspace 8.2

File

src/Plugin/Validation/Constraint/EntityWorkspaceConflictConstraintValidator.php, line 57

Class

EntityWorkspaceConflictConstraintValidator
Validates the EntityWorkspaceConflict constraint.

Namespace

Drupal\workspace\Plugin\Validation\Constraint

Code

public function validate($entity, Constraint $constraint) {

  /** @var \Drupal\Core\Entity\EntityInterface $entity */
  if (isset($entity) && !$entity
    ->isNew()) {

    /** @var \Drupal\workspace\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();
    }
  }
}