maestro.install in Maestro 3.x
Same filename and directory in other branches
Install, update and uninstall functions for the Maestro module.
File
maestro.installView source
<?php
/**
* @file
* Install, update and uninstall functions for the Maestro module.
*/
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\views\Entity\View;
use Symfony\Component\Yaml\Yaml;
use Drupal\maestro\Engine\MaestroEngine;
/**
* Update 8001 - Create maestro_process_status entity.
*/
function maestro_update_8001() {
// Check if the table exists first. If not, then create the entity.
if (\Drupal::service('database')
->schema()
->tableExists('maestro_process_status') === FALSE) {
\Drupal::entityTypeManager()
->clearCachedDefinitions();
\Drupal::entityDefinitionUpdateManager()
->installEntityType(\Drupal::entityTypeManager()
->getDefinition('maestro_process_status'));
// Now add the required variables to each of the templates. Existing in-production templates will not be affected.
$templates = MaestroEngine::getTemplates();
foreach ($templates as $template) {
$variables = $template->variables;
if (!array_key_exists('workflow_timeline_stage_count', $variables)) {
$template->variables['workflow_timeline_stage_count'] = [
'variable_id' => 'workflow_timeline_stage_count',
'variable_value' => '',
];
}
if (!array_key_exists('workflow_current_stage', $variables)) {
$template->variables['workflow_current_stage'] = [
'variable_id' => 'workflow_current_stage',
'variable_value' => '',
];
}
if (!array_key_exists('workflow_current_stage_message', $variables)) {
$template->variables['workflow_current_stage_message'] = [
'variable_id' => 'workflow_current_stage_message',
'variable_value' => '',
];
}
$template
->save();
}
}
else {
return 'Process Status entity already exists';
}
}
/**
* Update 8002 - Add timestamp field to maestro_process_status entity.
*/
function maestro_update_8002() {
if (!\Drupal::entityDefinitionUpdateManager()
->getFieldStorageDefinition('completed', 'maestro_process_status')) {
$storage_definition = BaseFieldDefinition::create('integer')
->setLabel(t('Completed'))
->setDescription(t('The time that the task associated to this status was completed.'))
->setSettings([
'default_value' => '0',
]);
\Drupal::entityDefinitionUpdateManager()
->installFieldStorageDefinition('completed', 'maestro_process_status', 'maestro_process_status', $storage_definition);
}
else {
return 'Completed field already exists in maestro_process_status';
}
}
/**
* Update 8003 - Create maestro_entity_identifiers entity.
*/
function maestro_update_8003() {
// Check if the table exists first. If not, then create the entity.
if (\Drupal::service('database')
->schema()
->tableExists('maestro_entity_identifiers') === FALSE) {
\Drupal::entityTypeManager()
->clearCachedDefinitions();
\Drupal::entityDefinitionUpdateManager()
->installEntityType(\Drupal::entityTypeManager()
->getDefinition('maestro_entity_identifiers'));
// Now to update the new entity identifiers entity with any existing entity_identifiers data.
// we will assume that all of the identifiers have an entity type of 'node'.
$query = \Drupal::entityQuery('maestro_process_variables')
->condition('variable_name', 'entity_identifiers');
$entityIDs = $query
->execute();
foreach ($entityIDs as $entity_id) {
$record = \Drupal::entityTypeManager()
->getStorage('maestro_process_variables')
->load($entity_id);
if ($record) {
// Inject into the new maestro_entity_identifiers entity.
if ($record->variable_value
->getString() != '') {
// Parse out the entity entries.
$arr = explode(',', $record->variable_value
->getString());
foreach ($arr as $eids) {
$entry = explode(':', $eids);
$entityType = $entry[0];
$uniqueID = $entry[1];
$entityID = $entry[2];
$values = [
'process_id' => $record->process_id
->getString(),
'unique_id' => $uniqueID,
'entity_type' => $entityType,
'entity_id' => $entityID,
// we're forcing it to node as this is all we've had implemented as of this writing.
'bundle' => 'node',
];
$new_entry = \Drupal::entityTypeManager()
->getStorage('maestro_entity_identifiers')
->create($values);
$new_entry
->save();
}
}
}
}
}
else {
return 'Entity Identifiers entity already exists';
}
}
/**
* Update 8004 - Create new view for Maestro Completed Tasks.
*/
function maestro_update_8004() {
$message = NULL;
if (\Drupal::moduleHandler()
->moduleExists('views') && !View::load('maestro_completed_tasks')) {
$config_path = drupal_get_path('module', 'maestro') . '/config/install/views.view.maestro_completed_tasks.yml';
$data = Yaml::parse(file_get_contents($config_path));
\Drupal::configFactory()
->getEditable('views.view.maestro_completed_tasks')
->setData($data)
->save(TRUE);
$message = 'The new Maestro Completed Tasks view has been created.';
}
else {
$message = 'Not creating the Maestro Completed Tasks view since it already exists.';
}
return $message;
}
/**
* Update 8005 - Create new view for Maestro Entity Identifiers "Items Attached to Workflow" and configure each template to use 2 views.
*/
function maestro_update_8005() {
$message = NULL;
if (\Drupal::moduleHandler()
->moduleExists('views') && !View::load('maestro_entity_identifiers')) {
$config_path = drupal_get_path('module', 'maestro') . '/config/install/views.view.maestro_entity_identifiers.yml';
$data = Yaml::parse(file_get_contents($config_path));
\Drupal::configFactory()
->getEditable('views.view.maestro_entity_identifiers')
->setData($data)
->save(TRUE);
$message = 'The new Maestro Entity Identifiers view for the Task Console has been created.';
}
else {
$message = 'Not creating the Maestro Entity Identifiers "Items Attached to Workflow" view since it already exists.';
}
\Drupal::entityTypeManager()
->clearCachedDefinitions();
$templates = MaestroEngine::getTemplates();
foreach ($templates as $template) {
$template->views_attached = [
'maestro_completed_tasks' => [
'view_machine_name' => 'maestro_completed_tasks',
'view_weight' => -9,
'view_display' => 'default;Master',
],
'maestro_entity_identifiers' => [
'view_machine_name' => 'maestro_entity_identifiers',
'view_weight' => -10,
'view_display' => 'taskconsole_display;Task Console Display',
],
];
$template
->save();
}
return $message;
}
Functions
Name | Description |
---|---|
maestro_update_8001 | Update 8001 - Create maestro_process_status entity. |
maestro_update_8002 | Update 8002 - Add timestamp field to maestro_process_status entity. |
maestro_update_8003 | Update 8003 - Create maestro_entity_identifiers entity. |
maestro_update_8004 | Update 8004 - Create new view for Maestro Completed Tasks. |
maestro_update_8005 | Update 8005 - Create new view for Maestro Entity Identifiers "Items Attached to Workflow" and configure each template to use 2 views. |