function WorkspaceAssociation::getEntityTrackingWorkspaceIds

Same name and namespace in other branches
  1. 9 core/modules/workspaces/src/WorkspaceAssociation.php \Drupal\workspaces\WorkspaceAssociation::getEntityTrackingWorkspaceIds()
  2. 8.9.x core/modules/workspaces/src/WorkspaceAssociation.php \Drupal\workspaces\WorkspaceAssociation::getEntityTrackingWorkspaceIds()
  3. 11.x core/modules/workspaces/src/WorkspaceAssociation.php \Drupal\workspaces\WorkspaceAssociation::getEntityTrackingWorkspaceIds()

Gets a list of workspace IDs in which an entity is tracked.

Parameters

\Drupal\Core\Entity\RevisionableInterface $entity: An entity object.

bool $latest_revision: (optional) Whether to return only the workspaces in which the latest revision of the entity is tracked. Defaults to FALSE.

Return value

string[] An array of workspace IDs where the given entity is tracked, or an empty array if it is not tracked anywhere.

Overrides WorkspaceAssociationInterface::getEntityTrackingWorkspaceIds

1 call to WorkspaceAssociation::getEntityTrackingWorkspaceIds()
WorkspaceAssociation::trackEntity in core/modules/workspaces/src/WorkspaceAssociation.php
Updates or creates the association for a given entity and a workspace.

File

core/modules/workspaces/src/WorkspaceAssociation.php, line 333

Class

WorkspaceAssociation
Provides a class for CRUD operations on workspace associations.

Namespace

Drupal\workspaces

Code

public function getEntityTrackingWorkspaceIds(RevisionableInterface $entity, bool $latest_revision = FALSE) {
  $query = $this->database
    ->select(static::TABLE, 'wa')
    ->fields('wa', [
    'workspace',
  ])
    ->condition('[wa].[target_entity_type_id]', $entity->getEntityTypeId())
    ->condition('[wa].[target_entity_id]', $entity->id());
  // Use a self-join to get only the workspaces in which the latest revision
  // of the entity is tracked.
  if ($latest_revision) {
    $inner_select = $this->database
      ->select(static::TABLE, 'wai')
      ->condition('[wai].[target_entity_type_id]', $entity->getEntityTypeId())
      ->condition('[wai].[target_entity_id]', $entity->id());
    $inner_select->addExpression('MAX([wai].[target_entity_revision_id])', 'max_revision_id');
    $query->join($inner_select, 'waj', '[wa].[target_entity_revision_id] = [waj].[max_revision_id]');
  }
  $result = $query->execute()
    ->fetchCol();
  // Return early if the entity is not tracked in any workspace.
  if (empty($result)) {
    return [];
  }
  // Return workspace IDs sorted in tree order.
  $tree = $this->workspaceRepository
    ->loadTree();
  return array_keys(array_intersect_key($tree, array_flip($result)));
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.