/**
* 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