function _multiversion_add_workspace_field_in_url_alias_table in Multiversion 8
Add workspace field in url_alias table.
Parameters
bool $install:
Throws
\Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
2 calls to _multiversion_add_workspace_field_in_url_alias_table()
- multiversion_install in ./
multiversion.install - Implements hook_install().
- multiversion_update_8108 in ./
multiversion.install - Add workspace field in url_alias table.
File
- ./
multiversion.module, line 669
Code
function _multiversion_add_workspace_field_in_url_alias_table($install = FALSE) {
$database = \Drupal::database();
$schema = $database
->schema();
$table = 'url_alias';
$field = 'workspace';
if (!$schema
->fieldExists($table, $field)) {
$spec = [
'description' => 'The workspace the alias belongs to.',
'type' => 'int',
'unsigned' => TRUE,
'default' => $install ? 1 : 0,
'size' => 'normal',
];
$schema
->addField($table, $field, $spec);
}
$table_data = $database
->select($table)
->fields($table)
->execute()
->fetchAll();
$entity_type_manager = \Drupal::entityTypeManager();
$entity_type_manager
->clearCachedDefinitions();
$entity_ids = [];
foreach ($table_data as $row) {
$row_data = (array) $row;
$source_elements = explode('/', $row_data['source']);
if (!empty($source_elements[1]) && !empty($source_elements[2]) && is_numeric($source_elements[2])) {
if ($entity_type_manager
->getDefinition($source_elements[1], FALSE)) {
$entity_ids[$source_elements[1]][$row_data['pid']] = $source_elements[2];
}
}
}
$workspaces = Workspace::loadMultiple();
foreach ($workspaces as $workspace_id => $workspace) {
foreach ($entity_ids as $entity_type_id => $ids) {
$storage = $entity_type_manager
->getStorage($entity_type_id);
if ($storage instanceof ContentEntityStorageInterface) {
$storage
->useWorkspace($workspace_id);
$entities = $storage
->loadMultiple($ids);
$storage
->useWorkspace(NULL);
}
if (empty($entities)) {
continue;
}
foreach ($ids as $pid => $entity_id) {
if (in_array($entity_id, array_keys($entities))) {
$database
->update($table)
->fields([
$field => $workspace_id,
])
->condition('pid', $pid)
->execute();
}
}
}
}
}