You are here

trait QueryTrait in Multiversion 8

Same name and namespace in other branches
  1. 8.2 src/Entity/Query/QueryTrait.php \Drupal\multiversion\Entity\Query\QueryTrait

@property $entityTypeId @property $entityTypeManager @property $condition

Hierarchy

  • trait \Drupal\multiversion\Entity\Query\QueryTrait
1 file declares its use of QueryTrait
Query.php in src/Entity/Query/Sql/Query.php

File

src/Entity/Query/QueryTrait.php, line 12

Namespace

Drupal\multiversion\Entity\Query
View source
trait QueryTrait {

  /**
   * @var null|int
   */
  protected $workspaceId = NULL;

  /**
   * @var boolean
   */
  protected $isDeleted = FALSE;

  /**
   * @param int $id
   *
   * @return \Drupal\multiversion\Entity\Query\QueryTrait
   */
  public function useWorkspace($id) {
    $this->workspaceId = $id;
    return $this;
  }

  /**
   * @see \Drupal\multiversion\Entity\Query\QueryInterface::isDeleted()
   */
  public function isDeleted() {
    $this->isDeleted = TRUE;
    return $this;
  }

  /**
   * @see \Drupal\multiversion\Entity\Query\QueryInterface::isNotDeleted()
   */
  public function isNotDeleted() {
    $this->isDeleted = FALSE;
    return $this;
  }
  public function prepare() {
    parent::prepare();
    $entity_type = $this->entityTypeManager
      ->getDefinition($this->entityTypeId);
    $enabled = \Drupal::state()
      ->get('multiversion.migration_done.' . $this
      ->getEntityTypeId(), FALSE);

    // Add necessary conditions just when the storage class is defined by the
    // Multiversion module. This is needed when uninstalling Multiversion.
    if (is_subclass_of($entity_type
      ->getStorageClass(), ContentEntityStorageInterface::class) && $enabled) {
      $revision_key = $entity_type
        ->getKey('revision');
      $revision_query = FALSE;
      foreach ($this->condition
        ->conditions() as $condition) {
        if ($condition['field'] == $revision_key) {
          $revision_query = TRUE;
        }
      }

      // Set the workspace condition.
      if ($workspace_id = $this
        ->getWorkspaceId()) {
        $this
          ->condition('workspace', $workspace_id);
      }

      // Loading a revision is explicit. So when we try to load one we should do
      // so without a condition on the deleted flag.
      if (!$revision_query) {
        $this
          ->condition('_deleted', (int) $this->isDeleted);
      }
    }
    return $this;
  }

  /**
   * Helper method to get the workspace ID to query.
   */
  protected function getWorkspaceId() {
    if ($this->workspaceId) {
      return $this->workspaceId;
    }
    if ($workspace = \Drupal::service('workspace.manager')
      ->getActiveWorkspace()) {
      return $workspace
        ->id();
    }
    return NULL;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
QueryTrait::$isDeleted protected property
QueryTrait::$workspaceId protected property
QueryTrait::getWorkspaceId protected function Helper method to get the workspace ID to query.
QueryTrait::isDeleted public function
QueryTrait::isNotDeleted public function
QueryTrait::prepare public function
QueryTrait::useWorkspace public function