class Workspace

The workspace entity class.

Attributes

#[ContentEntityType(id: 'workspace', label: new TranslatableMarkup('Workspace'), label_collection: new TranslatableMarkup('Workspaces'), label_singular: new TranslatableMarkup('workspace'), label_plural: new TranslatableMarkup('workspaces'), entity_keys: [ 'id' => 'id', 'revision' => 'revision_id', 'uuid' => 'uuid', 'label' => 'label', 'uid' => 'uid', 'owner' => 'uid', ], handlers: [ 'list_builder' => WorkspaceListBuilder::class, 'view_builder' => WorkspaceViewBuilder::class, 'access' => WorkspaceAccessControlHandler::class, 'views_data' => EntityViewsData::class, 'route_provider' => [ 'html' => AdminHtmlRouteProvider::class, ], 'form' => [ 'default' => WorkspaceForm::class, 'add' => WorkspaceForm::class, 'edit' => WorkspaceForm::class, 'delete' => WorkspaceDeleteForm::class, 'activate' => WorkspaceActivateForm::class, ], 'workspace' => IgnoredWorkspaceHandler::class, ], links: [ 'canonical' => '/admin/config/workflow/workspaces/manage/{workspace}', 'add-form' => '/admin/config/workflow/workspaces/add', 'edit-form' => '/admin/config/workflow/workspaces/manage/{workspace}/edit', 'delete-form' => '/admin/config/workflow/workspaces/manage/{workspace}/delete', 'activate-form' => '/admin/config/workflow/workspaces/manage/{workspace}/activate', 'collection' => '/admin/config/workflow/workspaces', ], admin_permission: 'administer workspaces', base_table: 'workspace', data_table: 'workspace_field_data', revision_table: 'workspace_revision', revision_data_table: 'workspace_field_revision', label_count: [ 'singular' => '@count workspace', 'plural' => '@count workspaces', ], field_ui_base_route: 'entity.workspace.collection')]

Hierarchy

Expanded class hierarchy of Workspace

32 files declare their use of Workspace
ActiveWorkspaceUpdateTest.php in core/modules/workspaces/tests/src/Functional/UpdateSystem/ActiveWorkspaceUpdateTest.php
ContentImportTest.php in core/tests/Drupal/FunctionalTests/DefaultContent/ContentImportTest.php
EntityWorkspaceConflictConstraintValidatorTest.php in core/modules/workspaces/tests/src/Kernel/EntityWorkspaceConflictConstraintValidatorTest.php
FormOperations.php in core/modules/workspaces/src/Hook/FormOperations.php
WorkspaceAccessTest.php in core/modules/workspaces/tests/src/Kernel/WorkspaceAccessTest.php

... See full list

93 string references to 'Workspace'
48475954-e878-439c-9d3d-226724a44269.yml in core/tests/fixtures/default_content/node/48475954-e878-439c-9d3d-226724a44269.yml
core/tests/fixtures/default_content/node/48475954-e878-439c-9d3d-226724a44269.yml
ActiveWorkspaceCheck::access in core/modules/workspaces/src/Access/ActiveWorkspaceCheck.php
Checks access.
ActiveWorkspaceCheckTest::providerTestAccess in core/modules/workspaces/tests/src/Unit/ActiveWorkspaceCheckTest.php
Provides data for the testAccess method.
EntityOperations::entityPredelete in core/modules/workspaces/src/Hook/EntityOperations.php
Implements hook_entity_predelete().
EntityOperations::entityQueryTagLatestTranslatedAffectedRevisionAlter in core/modules/workspaces/src/Hook/EntityOperations.php
Implements hook_entity_query_tag__TAG_alter() for 'latest_translated_affected_revision'.

... See full list

File

core/modules/workspaces/src/Entity/Workspace.php, line 31

Namespace

Drupal\workspaces\Entity
View source
class Workspace extends ContentEntityBase implements WorkspaceInterface {
  use EntityChangedTrait;
  use EntityOwnerTrait;
  
  /**
   * {@inheritdoc}
   */
  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
    $fields = parent::baseFieldDefinitions($entity_type);
    $fields += static::ownerBaseFieldDefinitions($entity_type);
    $fields['id'] = BaseFieldDefinition::create('string')->setLabel(new TranslatableMarkup('Workspace ID'))
      ->setDescription(new TranslatableMarkup('The workspace ID.'))
      ->setSetting('max_length', 128)
      ->setRequired(TRUE)
      ->addConstraint('UniqueField')
      ->addConstraint('DeletedWorkspace')
      ->addPropertyConstraints('value', [
      'Regex' => [
        'pattern' => '/^[a-z0-9_]+$/',
      ],
    ]);
    $fields['label'] = BaseFieldDefinition::create('string')->setLabel(new TranslatableMarkup('Workspace name'))
      ->setDescription(new TranslatableMarkup('The workspace name.'))
      ->setRevisionable(TRUE)
      ->setSetting('max_length', 128)
      ->setRequired(TRUE);
    $fields['uid']->setLabel(new TranslatableMarkup('Owner'))
      ->setDescription(new TranslatableMarkup('The workspace owner.'))
      ->setDisplayOptions('form', [
      'type' => 'entity_reference_autocomplete',
      'weight' => 5,
    ])
      ->setDisplayConfigurable('form', TRUE);
    $fields['parent'] = BaseFieldDefinition::create('entity_reference')->setLabel(new TranslatableMarkup('Parent'))
      ->setDescription(new TranslatableMarkup('The parent workspace.'))
      ->setSetting('target_type', 'workspace')
      ->setReadOnly(TRUE)
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayOptions('form', [
      'type' => 'options_select',
      'weight' => 10,
    ]);
    $fields['provider'] = BaseFieldDefinition::create('string')->setLabel(new TranslatableMarkup('Provider'))
      ->setDescription(new TranslatableMarkup('The workspace provider.'))
      ->setSetting('max_length', 128)
      ->setRequired(TRUE)
      ->setReadOnly(TRUE)
      ->setDefaultValue(DefaultWorkspaceProvider::getId())
      ->setDisplayConfigurable('form', FALSE)
      ->setDisplayConfigurable('view', FALSE);
    $fields['changed'] = BaseFieldDefinition::create('changed')->setLabel(new TranslatableMarkup('Changed'))
      ->setDescription(new TranslatableMarkup('The time that the workspace was last edited.'))
      ->setRevisionable(TRUE);
    $fields['created'] = BaseFieldDefinition::create('created')->setLabel(new TranslatableMarkup('Created'))
      ->setDescription(new TranslatableMarkup('The time that the workspace was created.'));
    return $fields;
  }
  
  /**
   * {@inheritdoc}
   */
  public function publish() {
    return \Drupal::service('workspaces.operation_factory')->getPublisher($this)
      ->publish();
  }
  
  /**
   * {@inheritdoc}
   */
  public function getCreatedTime() {
    return $this->get('created')->value;
  }
  
  /**
   * {@inheritdoc}
   */
  public function setCreatedTime($created) {
    return $this->set('created', (int) $created);
  }
  
  /**
   * {@inheritdoc}
   */
  public function hasParent() {
    return !$this->get('parent')
      ->isEmpty();
  }
  
  /**
   * {@inheritdoc}
   */
  public function getProvider() : WorkspaceProviderInterface {
    /** @var \Drupal\workspaces\Provider\WorkspaceProviderCollector $provider_collector */
    $provider_collector = \Drupal::service(WorkspaceProviderCollector::class);
    return $provider_collector->getProvider($this->get('provider')->value);
  }
  
  /**
   * {@inheritdoc}
   */
  public function postSave(EntityStorageInterface $storage, $update = TRUE) : void {
    parent::postSave($storage, $update);
    // When a new workspace has been saved, we need to copy all the associations
    // of its parent.
    if (!$update && $this->hasParent()) {
      \Drupal::service('workspaces.tracker')->initializeWorkspace($this);
    }
    \Drupal::service('workspaces.repository')->resetCache();
  }
  
  /**
   * {@inheritdoc}
   */
  public static function preDelete(EntityStorageInterface $storage, array $entities) {
    parent::preDelete($storage, $entities);
    $workspace_tree = \Drupal::service('workspaces.repository')->loadTree();
    // Ensure that workspaces that have descendants can not be deleted.
    foreach ($entities as $entity) {
      if (!empty($workspace_tree[$entity->id()]['descendants'])) {
        throw new \InvalidArgumentException("The {$entity->label()} workspace can not be deleted because it has child workspaces.");
      }
    }
  }
  
  /**
   * {@inheritdoc}
   */
  public static function postDelete(EntityStorageInterface $storage, array $entities) {
    parent::postDelete($storage, $entities);
    /** @var \Drupal\workspaces\WorkspaceManagerInterface $workspace_manager */
    $workspace_manager = \Drupal::service('workspaces.manager');
    /** @var \Drupal\workspaces\WorkspaceTrackerInterface $workspace_tracker */
    $workspace_tracker = \Drupal::service('workspaces.tracker');
    // Gather the list of deleted workspace IDs, since the passed-in array is
    // not required to be keyed by them.
    $workspaces_ids = array_map(fn($entity) => $entity->id(), $entities);
    // Disable the currently active workspace if it has been deleted.
    if ($workspace_manager->hasActiveWorkspace() && in_array($workspace_manager->getActiveWorkspace()
      ->id(), $workspaces_ids, TRUE)) {
      $workspace_manager->switchToLive();
    }
    // Non-empty workspaces will have to go through the revision purging process
    // from \Drupal\workspaces\Hook\WorkspacesHooks::cron().
    $workspace_ids_to_purge = [];
    foreach ($workspaces_ids as $workspace_id) {
      if ($workspace_tracker->getTrackedEntities($workspace_id)) {
        $workspace_ids_to_purge[$workspace_id] = $workspace_id;
      }
    }
    if ($workspace_ids_to_purge) {
      $state = \Drupal::state();
      $deleted_workspace_ids = $state->get('workspace.deleted', []);
      $state->set('workspace.deleted', $deleted_workspace_ids + $workspace_ids_to_purge);
      // Trigger a batch purge to allow workspaces with few revisions to be
      // deleted immediately.
      // @todo This is temporary until batch purging is converted to use queues.
      // @see https://www.drupal.org/i/3553654
      \Drupal::service(WorkspacesHooks::class)->cron();
    }
  }

}

Members

Title Sort descending Modifiers Object type Summary Member alias Overriden Title Overrides
CacheableDependencyTrait::$cacheContexts protected property Cache contexts.
CacheableDependencyTrait::$cacheMaxAge protected property Cache max-age.
CacheableDependencyTrait::$cacheTags protected property Cache tags.
CacheableDependencyTrait::setCacheability protected function Sets cacheability; useful for value object constructors.
ContentEntityBase::$activeLangcode protected property Language code identifying the entity active language.
ContentEntityBase::$defaultLangcode protected property Local cache for the default language code.
ContentEntityBase::$defaultLangcodeKey protected property The default langcode entity key.
ContentEntityBase::$enforceDefaultTranslation protected property Override the result of isDefaultTranslation().
ContentEntityBase::$enforceRevisionTranslationAffected protected property Whether the revision translation affected flag has been enforced.
ContentEntityBase::$entityKeys protected property Holds untranslatable entity keys such as the ID, bundle, and revision ID.
ContentEntityBase::$fieldDefinitions protected property Local cache for field definitions.
ContentEntityBase::$fields protected property The array of fields, each being an instance of FieldItemListInterface.
ContentEntityBase::$fieldsToSkipFromTranslationChangesCheck protected static property Local cache for fields to skip from the checking for translation changes.
ContentEntityBase::$isDefaultRevision protected property Indicates whether this is the default revision.
ContentEntityBase::$langcodeKey protected property The language entity key.
ContentEntityBase::$languages protected property Local cache for the available language objects.
ContentEntityBase::$loadedRevisionId protected property The loaded revision ID before the new revision was set.
ContentEntityBase::$newRevision protected property Boolean indicating whether a new revision should be created on save.
ContentEntityBase::$revisionTranslationAffectedKey protected property The revision translation affected entity key.
ContentEntityBase::$translatableEntityKeys protected property Holds translatable entity keys such as the label.
ContentEntityBase::$translationInitialize protected property A flag indicating whether a translation object is being initialized.
ContentEntityBase::$translations protected property An array of entity translation metadata.
ContentEntityBase::$validated protected property Whether entity validation was performed.
ContentEntityBase::$validationRequired protected property Whether entity validation is required before saving the entity.
ContentEntityBase::$values protected property The plain data values of the contained fields.
ContentEntityBase::access public function Overrides EntityBase::access 1
ContentEntityBase::addTranslation public function Overrides TranslatableInterface::addTranslation
ContentEntityBase::bundle public function Overrides EntityBase::bundle
ContentEntityBase::bundleFieldDefinitions public static function Overrides FieldableEntityInterface::bundleFieldDefinitions 5
ContentEntityBase::clearTranslationCache protected function Clears entity translation object cache to remove stale references.
ContentEntityBase::create public static function Overrides EntityBase::create
ContentEntityBase::createDuplicate public function Overrides EntityBase::createDuplicate 1
ContentEntityBase::get public function Overrides FieldableEntityInterface::get
ContentEntityBase::getBundleEntity public function Overrides ContentEntityInterface::getBundleEntity
ContentEntityBase::getEntityKey protected function Gets the value of the given entity key, if defined. 1
ContentEntityBase::getFieldDefinition public function Overrides FieldableEntityInterface::getFieldDefinition
ContentEntityBase::getFieldDefinitions public function Overrides FieldableEntityInterface::getFieldDefinitions
ContentEntityBase::getFields public function Overrides FieldableEntityInterface::getFields
ContentEntityBase::getFieldsToSkipFromTranslationChangesCheck protected function Returns an array of field names to skip in ::hasTranslationChanges. 1
ContentEntityBase::getIterator public function
ContentEntityBase::getLanguages protected function
ContentEntityBase::getLoadedRevisionId public function Overrides RevisionableInterface::getLoadedRevisionId
ContentEntityBase::getRevisionId public function Overrides RevisionableInterface::getRevisionId
ContentEntityBase::getTranslatableFields public function Overrides FieldableEntityInterface::getTranslatableFields
ContentEntityBase::getTranslatedField protected function Gets a translated field.
ContentEntityBase::getTranslation public function Overrides TranslatableInterface::getTranslation
ContentEntityBase::getTranslationLanguages public function Overrides TranslatableInterface::getTranslationLanguages
ContentEntityBase::getTranslationStatus public function Overrides TranslationStatusInterface::getTranslationStatus
ContentEntityBase::getUntranslated public function Overrides TranslatableInterface::getUntranslated
ContentEntityBase::hasField public function Overrides FieldableEntityInterface::hasField
ContentEntityBase::hasTranslation public function Overrides TranslatableInterface::hasTranslation
ContentEntityBase::hasTranslationChanges public function Overrides TranslatableInterface::hasTranslationChanges
ContentEntityBase::id public function Overrides EntityBase::id
ContentEntityBase::initializeTranslation protected function Instantiates a translation object for an existing translation.
ContentEntityBase::isDefaultRevision public function Overrides RevisionableInterface::isDefaultRevision
ContentEntityBase::isDefaultTranslation public function Overrides TranslatableInterface::isDefaultTranslation
ContentEntityBase::isDefaultTranslationAffectedOnly public function Overrides TranslatableRevisionableInterface::isDefaultTranslationAffectedOnly
ContentEntityBase::isLatestRevision public function Overrides RevisionableInterface::isLatestRevision
ContentEntityBase::isLatestTranslationAffectedRevision public function Overrides TranslatableRevisionableInterface::isLatestTranslationAffectedRevision
ContentEntityBase::isNewRevision public function Overrides RevisionableInterface::isNewRevision
ContentEntityBase::isNewTranslation public function Overrides TranslatableInterface::isNewTranslation
ContentEntityBase::isRevisionTranslationAffected public function Overrides TranslatableRevisionableInterface::isRevisionTranslationAffected
ContentEntityBase::isRevisionTranslationAffectedEnforced public function Overrides TranslatableRevisionableInterface::isRevisionTranslationAffectedEnforced
ContentEntityBase::isTranslatable public function Overrides TranslatableInterface::isTranslatable
ContentEntityBase::isValidationRequired public function Overrides FieldableEntityInterface::isValidationRequired
ContentEntityBase::label public function Overrides EntityBase::label 4
ContentEntityBase::language public function Overrides EntityBase::language
ContentEntityBase::onChange public function Overrides FieldableEntityInterface::onChange
ContentEntityBase::postCreate public function Overrides EntityBase::postCreate 1
ContentEntityBase::preSave public function Overrides EntityBase::preSave 8
ContentEntityBase::preSaveRevision public function Overrides RevisionableInterface::preSaveRevision 3
ContentEntityBase::referencedEntities public function Overrides EntityBase::referencedEntities 1
ContentEntityBase::removeTranslation public function Overrides TranslatableInterface::removeTranslation
ContentEntityBase::set public function Overrides FieldableEntityInterface::set
ContentEntityBase::setDefaultLangcode protected function Populates the local cache for the default language code.
ContentEntityBase::setDefaultTranslationEnforced public function Set or clear an override of the isDefaultTranslation() result.
ContentEntityBase::setNewRevision public function Overrides RevisionableInterface::setNewRevision
ContentEntityBase::setRevisionTranslationAffected public function Overrides TranslatableRevisionableInterface::setRevisionTranslationAffected
ContentEntityBase::setRevisionTranslationAffectedEnforced public function Overrides TranslatableRevisionableInterface::setRevisionTranslationAffectedEnforced
ContentEntityBase::setValidationRequired public function Overrides FieldableEntityInterface::setValidationRequired
ContentEntityBase::toArray public function Overrides EntityBase::toArray
ContentEntityBase::updateFieldLangcodes protected function Updates language for already instantiated fields.
ContentEntityBase::updateLoadedRevisionId public function Overrides RevisionableInterface::updateLoadedRevisionId
ContentEntityBase::updateOriginalValues public function Updates the original values with the interim changes.
ContentEntityBase::uuid public function Overrides EntityBase::uuid
ContentEntityBase::validate public function Overrides FieldableEntityInterface::validate 1
ContentEntityBase::wasDefaultRevision public function Overrides RevisionableInterface::wasDefaultRevision
ContentEntityBase::__clone public function Magic method: Implements a deep clone.
ContentEntityBase::__construct public function Overrides EntityBase::__construct
ContentEntityBase::__get public function Implements the magic method for getting object properties. Overrides EntityBase::__get
ContentEntityBase::__isset public function Implements the magic method for isset(). Overrides EntityBase::__isset
ContentEntityBase::__set public function Implements the magic method for setting object properties. Overrides EntityBase::__set
ContentEntityBase::__sleep public function Overrides EntityBase::__sleep
ContentEntityBase::__unset public function Implements the magic method for unset(). Overrides EntityBase::__unset
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function Aliased as: traitSleep 2
DependencySerializationTrait::__wakeup public function 2
EntityBase::$enforceIsNew protected property Boolean indicating whether the entity should be forced to be new.
EntityBase::$entityTypeId protected property The entity type.
EntityBase::$originalEntity protected property The original unchanged entity.
EntityBase::$typedData protected property A typed data object wrapping this entity.
EntityBase::delete public function Overrides EntityInterface::delete 1
EntityBase::enforceIsNew public function Overrides EntityInterface::enforceIsNew
EntityBase::entityTypeBundleInfo protected function Gets the entity type bundle info service.
EntityBase::entityTypeManager protected function Gets the entity type manager.
EntityBase::getCacheContexts public function Overrides CacheableDependencyTrait::getCacheContexts
EntityBase::getCacheMaxAge public function Overrides CacheableDependencyTrait::getCacheMaxAge
EntityBase::getCacheTags public function Overrides CacheableDependencyTrait::getCacheTags
EntityBase::getCacheTagsToInvalidate public function Overrides EntityInterface::getCacheTagsToInvalidate 3
EntityBase::getConfigDependencyKey public function Overrides EntityInterface::getConfigDependencyKey
EntityBase::getConfigDependencyName public function Overrides EntityInterface::getConfigDependencyName 1
EntityBase::getConfigTarget public function Overrides EntityInterface::getConfigTarget 1
EntityBase::getEntityType public function Overrides EntityInterface::getEntityType 1
EntityBase::getEntityTypeId public function Overrides EntityInterface::getEntityTypeId
EntityBase::getListCacheTagsToInvalidate protected function The list cache tags to invalidate for this entity.
EntityBase::getOriginal public function Overrides EntityInterface::getOriginal
EntityBase::getOriginalId public function Overrides EntityInterface::getOriginalId 1
EntityBase::getTypedData public function Overrides EntityInterface::getTypedData
EntityBase::getTypedDataClass private function Returns the typed data class name for this entity.
EntityBase::hasLinkTemplate public function Overrides EntityInterface::hasLinkTemplate
EntityBase::invalidateTagsOnDelete protected static function Invalidates an entity's cache tags upon delete. 1
EntityBase::invalidateTagsOnSave protected function Invalidates an entity's cache tags upon save. 2
EntityBase::isNew public function Overrides EntityInterface::isNew 2
EntityBase::languageManager protected function Gets the language manager.
EntityBase::linkTemplates protected function Gets an array link templates. 1
EntityBase::load public static function Overrides EntityInterface::load
EntityBase::loadMultiple public static function Overrides EntityInterface::loadMultiple
EntityBase::postLoad public static function Overrides EntityInterface::postLoad 3
EntityBase::preCreate public static function Overrides EntityInterface::preCreate 6
EntityBase::save public function Overrides EntityInterface::save 3
EntityBase::setOriginal public function Overrides EntityInterface::setOriginal
EntityBase::setOriginalId public function Overrides EntityInterface::setOriginalId 1
EntityBase::toLink public function Overrides EntityInterface::toLink
EntityBase::toUrl public function Overrides EntityInterface::toUrl 2
EntityBase::uriRelationships public function Overrides EntityInterface::uriRelationships
EntityBase::urlRouteParameters protected function Gets an array of placeholders for this entity. 2
EntityBase::uuidGenerator protected function Gets the UUID generator.
EntityChangedTrait::getChangedTime public function Gets the timestamp of the last entity change for the current translation.
EntityChangedTrait::getChangedTimeAcrossTranslations public function Returns the timestamp of the last entity change across all translations.
EntityChangedTrait::setChangedTime public function Sets the timestamp of the last entity change for the current translation.
EntityChangesDetectionTrait::getFieldsToSkipFromTranslationChangesCheck protected function Returns an array of field names to skip when checking for changes. Aliased as: traitGetFieldsToSkipFromTranslationChangesCheck
EntityOwnerTrait::getDefaultEntityOwner public static function Default value callback for 'owner' base field. 1
EntityOwnerTrait::getOwner public function 1
EntityOwnerTrait::getOwnerId public function
EntityOwnerTrait::ownerBaseFieldDefinitions public static function Returns an array of base field definitions for entity owners.
EntityOwnerTrait::setOwner public function
EntityOwnerTrait::setOwnerId public function
RefinableCacheableDependencyTrait::addCacheableDependency public function 1
RefinableCacheableDependencyTrait::addCacheContexts public function
RefinableCacheableDependencyTrait::addCacheTags public function
RefinableCacheableDependencyTrait::mergeCacheMaxAge public function
SynchronizableEntityTrait::$isSyncing protected property Is entity being created updated or deleted through synchronization process.
SynchronizableEntityTrait::isSyncing public function
SynchronizableEntityTrait::setSyncing public function
TranslationStatusInterface::TRANSLATION_CREATED constant Status code identifying a newly created translation.
TranslationStatusInterface::TRANSLATION_EXISTING constant Status code identifying an existing translation.
TranslationStatusInterface::TRANSLATION_REMOVED constant Status code identifying a removed translation.
Workspace::baseFieldDefinitions public static function Overrides ContentEntityBase::baseFieldDefinitions
Workspace::getCreatedTime public function Overrides WorkspaceInterface::getCreatedTime
Workspace::getProvider public function Overrides WorkspaceInterface::getProvider
Workspace::hasParent public function Overrides WorkspaceInterface::hasParent
Workspace::postDelete public static function Overrides EntityBase::postDelete
Workspace::postSave public function Overrides ContentEntityBase::postSave
Workspace::preDelete public static function Overrides EntityBase::preDelete
Workspace::publish public function Overrides WorkspaceInterface::publish
Workspace::setCreatedTime public function Overrides WorkspaceInterface::setCreatedTime

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