forms_steps-8.x-1.4/forms_steps.install
forms_steps.install
<?php
/**
* @file
* Installation hooks for forms_steps.
*/
use Drupal\Core\Database\Database;
use Drupal\forms_steps\Entity\Workflow;
/**
* Implements hook_update_N().
*
* Update structure of forms_steps config and workflow storage.
*/
function forms_steps_update_8101() {
// We update the configuration of all existing forms_steps.
$config_factory = \Drupal::configFactory();
$formsStepsConfigs = $config_factory->listAll('forms_steps.forms_steps.');
foreach ($formsStepsConfigs as $formsStepsConfig) {
/** @var \Drupal\Core\Config\Config $config */
$config = $config_factory->getEditable($formsStepsConfig);
if ($config) {
$steps = $config->get('steps');
foreach ($steps as $key => $step) {
$steps[$key]['entity_bundle'] = $step['node_type'];
$steps[$key]['entity_type'] = 'node';
unset($steps[$key]['node_type']);
}
$config->set('steps', $steps);
}
$config->save();
}
// Now we transfert all data from nodes to workflow entity.
// Get DB connection.
$cnx = Database::getConnection();
// Check if the table exists first. If not, then create the entity.
if (!$cnx->schema()->tableExists('forms_steps_workflow')) {
\Drupal::entityTypeManager()->clearCachedDefinitions();
\Drupal::entityDefinitionUpdateManager()
->installEntityType(\Drupal::entityTypeManager()->getDefinition('forms_steps_workflow'));
}
// We get all node created with a workflow.
$query = $cnx->select('node_field_data', 'n');
$query->fields(
'n',
[
'nid',
'type',
'field_forms_steps_id',
])
->isNotNull('field_forms_steps_id');
/** @var \Drupal\Core\Database\StatementInterface $records */
$records = $query->execute();
// For each record we create a workflow instance.
foreach ($records as $record) {
$workflow = \Drupal::entityTypeManager()
->getStorage(Workflow::ENTITY_TYPE)
->create([
'instance_id' => $record->field_forms_steps_id,
'entity_type' => 'node',
'bundle' => $record->type,
'step' => '',
'entity_id' => $record->nid,
'form_mode' => '',
'forms_steps' => '',
]);
$workflow->save();
}
// We remove the field_forms_steps_id from node table.
$cnx->update('node_field_data')
->fields(['field_forms_steps_id' => NULL])
->isNotNull('field_forms_steps_id')
->execute();
return t('Forms Steps Node information moved to the new Storage.');
}
