function WorkspaceAssociation::loadAssociatedRevisions

Loads associated revision IDs and populates their static caches.

Parameters

string $workspace_id: The workspace ID to load associations for.

2 calls to WorkspaceAssociation::loadAssociatedRevisions()
WorkspaceAssociation::getAssociatedInitialRevisions in core/modules/workspaces/src/WorkspaceAssociation.php
Retrieves all content revisions that were created in a given workspace.
WorkspaceAssociation::getAssociatedRevisions in core/modules/workspaces/src/WorkspaceAssociation.php
Retrieves all content revisions tracked by a given workspace.

File

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

Class

WorkspaceAssociation
Provides a class for CRUD operations on workspace associations.

Namespace

Drupal\workspaces

Code

protected function loadAssociatedRevisions(string $workspace_id) : void {
  // Only load if the associated revisions cache has not been populated for
  // this workspace. We don't need to check the associated initial revisions
  // cache because they're always populated together.
  if (!isset($this->associatedRevisions[$workspace_id])) {
    // Initialize both caches for this workspace.
    $this->associatedRevisions[$workspace_id] = [];
    $this->associatedInitialRevisions[$workspace_id] = [];
    // Get workspace candidates for regular (non-initial) revisions.
    $workspace_tree = $this->workspaceRepository
      ->loadTree();
    if (isset($workspace_tree[$workspace_id])) {
      $workspace_candidates = array_merge([
        $workspace_id,
      ], $workspace_tree[$workspace_id]['ancestors']);
    }
    else {
      $workspace_candidates = [
        $workspace_id,
      ];
    }
    // Query all the associated revisions.
    $query = $this->database
      ->select(static::REVISION_TABLE);
    $query->fields(static::REVISION_TABLE, [
      'workspace',
      'target_entity_type_id',
      'target_entity_id',
      'target_entity_id_string',
      'target_entity_revision_id',
      'initial_revision',
    ]);
    $query->orderBy('target_entity_type_id')
      ->orderBy('target_entity_revision_id')
      ->condition('workspace', $workspace_candidates, 'IN');
    foreach ($query->execute() as $record) {
      $target_id = $record->{static::getIdField($record->target_entity_type_id)};
      // Always add to associatedRevisions for all workspace candidates.
      $this->associatedRevisions[$workspace_id][$record->target_entity_type_id][$record->target_entity_revision_id] = $target_id;
      // Only add to associatedInitialRevisions if it's an initial revision
      // for the specific workspace.
      if ($record->workspace === $workspace_id && $record->initial_revision) {
        $this->associatedInitialRevisions[$workspace_id][$record->target_entity_type_id][$record->target_entity_revision_id] = $target_id;
      }
    }
  }
}

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