129 lines
3.7 KiB
PHP
129 lines
3.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Contains install, update and uninstall functions for the Workspaces module.
|
|
*/
|
|
|
|
use Drupal\Core\Entity\EntityTypeInterface;
|
|
use Drupal\workspaces\Entity\Workspace;
|
|
|
|
/**
|
|
* Implements hook_requirements().
|
|
*/
|
|
function workspaces_requirements($phase) {
|
|
$requirements = [];
|
|
if ($phase === 'install') {
|
|
if (\Drupal::moduleHandler()->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 <a href=":link">upgrade path</a> 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 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;
|
|
}
|