function WorkspaceTracker::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 WorkspaceTrackerInterface::getEntityTrackingWorkspaceIds
1 call to WorkspaceTracker::getEntityTrackingWorkspaceIds()
- WorkspaceTracker::trackEntity in core/
modules/ workspaces/ src/ WorkspaceTracker.php - Updates or creates the association for a given entity and a workspace.
File
-
core/
modules/ workspaces/ src/ WorkspaceTracker.php, line 292
Class
- WorkspaceTracker
- Provides a class for CRUD operations on workspace associations.
Namespace
Drupal\workspacesCode
public function getEntityTrackingWorkspaceIds(RevisionableInterface $entity, bool $latest_revision = FALSE) : array {
$id_field = static::getIdField($entity->getEntityTypeId());
$query = $this->database
->select(static::TABLE, 'wa')
->fields('wa', [
'workspace',
])
->condition('[wa].[target_entity_type_id]', $entity->getEntityTypeId())
->condition("[wa].[{$id_field}]", $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].[{$id_field}]", $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.