/** * Add activity ratio. */ function add_activity_ratio() { /** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $schema_repository */ $schema_repository = \Drupal::service('entity.last_installed_schema.repository'); /** @var Drupal\Core\Entity\EntityTypeBundleInfo $entity_bundle_info */ $entity_bundle_info = \Drupal::service('entity_type.bundle.info'); /** @var Drupal\Core\Entity\EntityFieldManager $entity_field_manager */ $entity_field_manager = \Drupal::service('entity_field.manager'); $definitions = \Drupal::entityTypeManager()->getDefinitions(); $entities = []; foreach ($definitions as $entity_type_id => $definition) { if (!$definition instanceof ConfigEntityType) { $entities[] = $entity_type_id; } } $spec = [ 'type' => 'numeric', 'unsigned' => TRUE, 'precision' => 5, 'scale' => 2, ]; $database = \Drupal::database(); $schema = $database->schema(); foreach ($entities as $entity_type_id) { $bundles = $entity_bundle_info->getBundleInfo($entity_type_id); foreach ($bundles as $bundle_id => $bundle) { $field_definitions = $entity_field_manager->getFieldDefinitions($entity_type_id, $bundle_id); foreach ($field_definitions as $field_definition) { if ($field_definition->getType() === 'pos_nace_field_type') { /** @var Drupal\field\Entity\FieldStorageConfig $storage */ $storage = $field_definition->getFieldStorageDefinition(); $storage->setSetting('activity_ratio', FALSE); $key_value = \Drupal::keyValue('entity.storage_schema.sql'); $key_name = $entity_type_id . '.field_schema_data.' . $field_definition->getName(); $storage_schema = $key_value->get($key_name); if ($storage instanceof FieldStorageConfig || $storage->isMultiple()) { foreach ([ $entity_type_id . '__' . $field_definition->getName(), $entity_type_id . '_revision' . '__' . $field_definition->getName(), ] as $table) { $field_name = $field_definition->getName(); if ($schema->tableExists($table) && !$schema->fieldExists($table, $field_name . '_activity_ratio')) { $schema->addField($table, $field_name . '_activity_ratio', $spec); } } } else { $table = $entity_type_id . '_field_data'; $field_name = $field_definition->getName(); if ($schema->tableExists($table) && !$schema->fieldExists($table, $field_name . '__activity_ratio')) { $schema->changeField($table, $field_name, $field_name . '__value', [ 'type' => 'varchar', 'length' => 255, 'binary' => FALSE, ]); $schema->addField($table, $field_name . '__activity_ratio', $spec); $storage_schema[$table]['fields'][$field_name . '__value'] = [ 'type' => 'varchar', 'length' => 255, 'binary' => FALSE, ]; if (isset($storage_schema[$table]['fields'][$field_name])) { unset($storage_schema[$table]['fields'][$field_name]); } $storage_schema[$table]['fields'][$field_name . '__activity_ratio'] = $spec; } } $schema_repository->setLastInstalledFieldStorageDefinition($storage); $key_value->set($key_name, $storage_schema); } } } } }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter