class Workspace
Same name in other branches
- 9 core/modules/workspaces/src/Entity/Workspace.php \Drupal\workspaces\Entity\Workspace
- 8.9.x core/modules/workspaces/src/Entity/Workspace.php \Drupal\workspaces\Entity\Workspace
- 10 core/modules/workspaces/src/Entity/Workspace.php \Drupal\workspaces\Entity\Workspace
The workspace entity class.
Hierarchy
- class \Drupal\Core\Entity\EntityBase implements \Drupal\Core\Entity\EntityInterface uses \Drupal\Core\Cache\RefinableCacheableDependencyTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait
- class \Drupal\Core\Entity\ContentEntityBase extends \Drupal\Core\Entity\EntityBase implements \Drupal\Core\Entity\IteratorAggregate, \Drupal\Core\Entity\ContentEntityInterface, \Drupal\Core\TypedData\TranslationStatusInterface uses \Drupal\Core\Entity\EntityChangesDetectionTrait, \Drupal\Core\Entity\SynchronizableEntityTrait
- class \Drupal\workspaces\Entity\Workspace extends \Drupal\Core\Entity\ContentEntityBase implements \Drupal\workspaces\WorkspaceInterface uses \Drupal\Core\Entity\EntityChangedTrait, \Drupal\user\EntityOwnerTrait
- class \Drupal\Core\Entity\ContentEntityBase extends \Drupal\Core\Entity\EntityBase implements \Drupal\Core\Entity\IteratorAggregate, \Drupal\Core\Entity\ContentEntityInterface, \Drupal\Core\TypedData\TranslationStatusInterface uses \Drupal\Core\Entity\EntityChangesDetectionTrait, \Drupal\Core\Entity\SynchronizableEntityTrait
Expanded class hierarchy of Workspace
31 files declare their use of Workspace
- ActiveWorkspaceUpdateTest.php in core/
modules/ workspaces/ tests/ src/ Functional/ UpdateSystem/ ActiveWorkspaceUpdateTest.php - EntityWorkspaceConflictConstraintValidatorTest.php in core/
modules/ workspaces/ tests/ src/ Kernel/ EntityWorkspaceConflictConstraintValidatorTest.php - PathWorkspacesTest.php in core/
modules/ workspaces/ tests/ src/ Functional/ PathWorkspacesTest.php - TestWorkspaceNegotiator.php in core/
modules/ workspaces/ tests/ modules/ workspace_update_test/ src/ Negotiator/ TestWorkspaceNegotiator.php - WorkspaceAccessTest.php in core/
modules/ workspaces/ tests/ src/ Kernel/ WorkspaceAccessTest.php
84 string references to 'Workspace'
- 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::entityInsert in core/
modules/ workspaces/ src/ Hook/ EntityOperations.php - Implements hook_entity_insert().
- EntityOperations::entityPredelete in core/
modules/ workspaces/ src/ Hook/ EntityOperations.php - Implements hook_entity_predelete().
- EntityOperations::entityPresave in core/
modules/ workspaces/ src/ Hook/ EntityOperations.php - Implements hook_entity_presave().
File
-
core/
modules/ workspaces/ src/ Entity/ Workspace.php, line 27
Namespace
Drupal\workspaces\EntityView 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['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 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');
// Disable the currently active workspace if it has been deleted.
if ($workspace_manager->hasActiveWorkspace() && in_array($workspace_manager->getActiveWorkspace()
->id(), array_keys($entities), TRUE)) {
$workspace_manager->switchToLive();
}
// Ensure that workspace batch purging does not happen inside a workspace.
$workspace_manager->executeOutsideWorkspace(function () use ($workspace_manager, $entities) {
// Add the IDs of the deleted workspaces to the list of workspaces that
// will be purged on cron.
$state = \Drupal::state();
$deleted_workspace_ids = $state->get('workspace.deleted', []);
$deleted_workspace_ids += array_combine(array_keys($entities), array_keys($entities));
$state->set('workspace.deleted', $deleted_workspace_ids);
// Trigger a batch purge to allow empty workspaces to be deleted
// immediately.
$workspace_manager->purgeDeletedWorkspacesBatch();
});
}
}
Members
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.