101 lines
2.8 KiB
PHP
101 lines
2.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Contains install, update and uninstall functions for the Workspaces module.
|
|
*/
|
|
|
|
use Drupal\Core\Entity\EntityTypeInterface;
|
|
|
|
/**
|
|
* Implements hook_schema().
|
|
*/
|
|
function workspaces_schema(): array {
|
|
$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,
|
|
'default' => 0,
|
|
'description' => 'The ID of the associated entity.',
|
|
],
|
|
'target_entity_id_string' => [
|
|
'type' => 'varchar_ascii',
|
|
'length' => 128,
|
|
'not null' => TRUE,
|
|
'default' => '',
|
|
'description' => 'The string ID of the associated entity.',
|
|
],
|
|
'target_entity_revision_id' => [
|
|
'type' => 'int',
|
|
'unsigned' => TRUE,
|
|
'not null' => TRUE,
|
|
'description' => 'The revision ID of the associated entity.',
|
|
],
|
|
],
|
|
'primary key' => ['workspace', 'target_entity_type_id', 'target_entity_id', 'target_entity_id_string'],
|
|
'indexes' => [
|
|
'target_entity_revision_id' => ['target_entity_revision_id'],
|
|
],
|
|
];
|
|
|
|
return $schema;
|
|
}
|
|
|
|
/**
|
|
* Implements hook_update_last_removed().
|
|
*/
|
|
function workspaces_update_last_removed(): int {
|
|
return 8803;
|
|
}
|
|
|
|
/**
|
|
* Update workspace associations to support entity types with string IDs.
|
|
*/
|
|
function workspaces_update_11101(): void {
|
|
$schema = \Drupal::database()->schema();
|
|
|
|
$target_id_spec = [
|
|
'type' => 'int',
|
|
'unsigned' => TRUE,
|
|
'not null' => TRUE,
|
|
'default' => 0,
|
|
'description' => 'The ID of the associated entity.',
|
|
];
|
|
$schema->changeField('workspace_association', 'target_entity_id', 'target_entity_id', $target_id_spec);
|
|
|
|
$target_id_string_spec = [
|
|
'type' => 'varchar_ascii',
|
|
'length' => 128,
|
|
'not null' => TRUE,
|
|
'default' => '',
|
|
'description' => 'The string ID of the associated entity.',
|
|
];
|
|
$schema->addField('workspace_association', 'target_entity_id_string', $target_id_string_spec, [
|
|
'primary key' => ['workspace', 'target_entity_type_id', 'target_entity_id', 'target_entity_id_string'],
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Install the new Workspaces UI module.
|
|
*/
|
|
function workspaces_update_11102(): void {
|
|
\Drupal::service('module_installer')->install(['workspaces_ui']);
|
|
}
|