function yamaps_add_columns_to_schema in Yandex.Maps 8
1 call to yamaps_add_columns_to_schema()
- yamaps_update_8101 in ./yamaps.install
- Adds "line" data column.
File
- ./yamaps.install, line 22
- Contains yamaps.install.
Code
function yamaps_add_columns_to_schema($columns_to_add) {
$field_type = 'yamaps';
$field_type_manager = \Drupal::service('plugin.manager.field.field_type');
$map_definition = $field_type_manager
->getDefinition($field_type);
$map_item_class = $map_definition['class'];
$schema = \Drupal::database()
->schema();
$entity_type_manager = \Drupal::entityTypeManager();
$entity_field_manager = \Drupal::service('entity_field.manager');
$entity_field_map = $entity_field_manager
->getFieldMapByFieldType($field_type);
$entity_storage_schema_sql = \Drupal::keyValue('entity.storage_schema.sql');
$entity_definitions_installed = \Drupal::keyValue('entity.definitions.installed');
$processed_fields = [];
foreach ($entity_field_map as $entity_type_id => $field_map) {
$entity_storage = $entity_type_manager
->getStorage($entity_type_id);
if (!$entity_storage instanceof SqlContentEntityStorage) {
continue;
}
$entity_type = $entity_type_manager
->getDefinition($entity_type_id);
$field_storage_definitions = $entity_field_manager
->getFieldStorageDefinitions($entity_type_id);
$table_mapping = $entity_storage
->getTableMapping($field_storage_definitions);
foreach (array_intersect_key($field_storage_definitions, $field_map) as $field_storage_definition) {
$field_name = $field_storage_definition
->getName();
try {
$table = $table_mapping
->getFieldTableName($field_name);
} catch (SqlContentEntityStorageException $e) {
continue;
}
$revision_table = NULL;
if ($entity_type
->isRevisionable() && $field_storage_definition
->isRevisionable()) {
if ($table_mapping
->requiresDedicatedTableStorage($field_storage_definition)) {
$revision_table = $table_mapping
->getDedicatedRevisionTableName($field_storage_definition);
}
elseif ($table_mapping
->allowsSharedTableStorage($field_storage_definition)) {
$revision_table = $entity_type
->getRevisionDataTable() ?: $entity_type
->getRevisionTable();
}
}
$schema_key = "{$entity_type_id}.field_schema_data.{$field_name}";
$field_schema_data = $entity_storage_schema_sql
->get($schema_key);
$processed_fields[] = [
$entity_type_id,
$field_name,
];
foreach ($columns_to_add as $column_id) {
$column = $table_mapping
->getFieldColumnName($field_storage_definition, $column_id);
$field_schema = $map_item_class::schema($field_storage_definition);
$spec = $field_schema['columns'][$column_id];
$spec['initial'] = '';
$schema
->addField($table, $column, $spec);
if ($revision_table) {
$schema
->addField($revision_table, $column, $spec);
}
if ($field_schema_data) {
$field_schema_data[$table]['fields'][$column] = $field_schema['columns'][$column_id];
$field_schema_data[$table]['fields'][$column]['not null'] = FALSE;
if ($revision_table) {
$field_schema_data[$revision_table]['fields'][$column] = $field_schema['columns'][$column_id];
$field_schema_data[$revision_table]['fields'][$column]['not null'] = FALSE;
}
}
}
if ($field_schema_data) {
$entity_storage_schema_sql
->set($schema_key, $field_schema_data);
}
if ($table_mapping
->allowsSharedTableStorage($field_storage_definition)) {
$key = "{$entity_type_id}.field_storage_definitions";
if ($definitions = $entity_definitions_installed
->get($key)) {
$definitions[$field_name] = $field_storage_definition;
$entity_definitions_installed
->set($key, $definitions);
}
}
}
}
}