moduleExists('workspace')) { $requirements['workspace_incompatibility'] = [ 'severity' => REQUIREMENT_ERROR, 'description' => t('Workspaces can not be installed when the contributed Workspace module is also installed. See the upgrade path page for more information on how to upgrade.', [ ':link' => 'https://www.drupal.org/node/2987783', ]), ]; } } return $requirements; } /** * Implements hook_module_preinstall(). */ function workspaces_module_preinstall($module) { if ($module !== 'workspaces') { return; } /** @var \Drupal\workspaces\WorkspaceManagerInterface $workspace_manager */ $workspace_manager = \Drupal::service('workspaces.manager'); $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager(); foreach ($entity_definition_update_manager->getEntityTypes() as $entity_type) { if ($workspace_manager->isEntityTypeSupported($entity_type)) { $entity_type->setRevisionMetadataKey('workspace', 'workspace'); $entity_definition_update_manager->updateEntityType($entity_type); } } } /** * Implements hook_install(). */ function workspaces_install() { // Set the owner of these default workspaces to be first user which which has // the 'administrator' role. This way we avoid hard coding user ID 1 for sites // that prefer to not give it any special meaning. $admin_roles = \Drupal::entityTypeManager()->getStorage('user_role')->getQuery() ->condition('is_admin', TRUE) ->execute(); if (!empty($admin_roles)) { $query = \Drupal::entityTypeManager()->getStorage('user')->getQuery() ->accessCheck(FALSE) ->condition('roles', $admin_roles, 'IN') ->condition('status', 1) ->sort('uid', 'ASC') ->range(0, 1); $result = $query->execute(); } // Default to user ID 1 if we could not find any other administrator users. $owner_id = !empty($result) ? reset($result) : 1; // Create a 'stage' workspace by default. Workspace::create([ 'id' => 'stage', 'label' => 'Stage', 'uid' => $owner_id, ])->save(); } /** * Implements hook_schema(). */ function workspaces_schema() { $schema['workspace_association'] = [ 'description' => 'Stores the association between entity revisions and their workspace.', 'fields' => [ 'workspace' => [ 'type' => 'varchar_ascii', 'length' => 128, 'not null' => TRUE, 'default' => '', 'description' => 'The workspace ID.', ], 'target_entity_type_id' => [ 'type' => 'varchar_ascii', 'length' => EntityTypeInterface::ID_MAX_LENGTH, 'not null' => TRUE, 'default' => '', 'description' => 'The ID of the associated entity type.', ], 'target_entity_id' => [ 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'description' => 'The ID of the associated entity.', ], 'target_entity_revision_id' => [ 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'description' => 'The revision ID of the associated entity.', ], ], 'indexes' => [ 'target_entity_revision_id' => ['target_entity_revision_id'], ], 'primary key' => ['workspace', 'target_entity_type_id', 'target_entity_id'], ]; return $schema; } /** * Implements hook_update_last_removed(). */ function workspaces_update_last_removed() { return 8803; }