ultimate_table_field-1.0.0-alpha5/ultimate_table_field.install

ultimate_table_field.install
<?php

/**
 * @file
 * Module install hooks.
 */

use Drupal\field\Entity\FieldConfig;

/**
 * Update existing table field values structure.
 */
function ultimate_table_field_update_10101(&$sandbox) {
  /** @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */
  $entity_type_manager = \Drupal::service('entity_type.manager');
  $entity_type_bundle_info = \Drupal::service('entity_type.bundle.info');
  /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager */
  $entity_field_manager = \Drupal::service('entity_field.manager');
  $entity_types = $entity_type_manager->getDefinitions();

  foreach ($entity_types as $entity_type_id => $entity_type) {
    $bundles = $entity_type_bundle_info->getBundleInfo($entity_type_id);
    foreach ($bundles as $bundle => $bundle_info) {
      try {
        $field_definitions = $entity_field_manager->getFieldDefinitions($entity_type_id, $bundle);
        foreach ($field_definitions as $fieldDefinition) {
          if ($fieldDefinition->getType() === 'ultimate_table') {
            $field_name = $fieldDefinition->getName();
            $ids = $entity_type_manager->getStorage($entity_type_id)
              ->getQuery()
              ->accessCheck(FALSE)
              ->exists($field_name)
              ->execute();
            if (empty($ids)) {
              continue;
            }
            $entities = $entity_type_manager->getStorage($entity_type_id)->loadMultiple($ids);
            foreach ($entities as $entity) {
              $values = $entity->get($field_name)->getValue();
              if (empty($values)) {
                continue;
              }
              $values = array_map(fn($val) => $val['value'][0], $values);
              $values = [
                'value' => reset($values),
              ];
              $entity->set($field_name, $values);
              $entity->save();
            }
          }
        }
      }
      catch (Exception $e) {
      }
    }
  }
}

/**
 * Update existing table field values structure.
 */
function ultimate_table_field_update_10102(&$sandbox) {
  $fields = FieldConfig::loadMultiple();
  $fields = array_filter($fields, fn($field) => $field->getType() === 'ultimate_table');
  $entity_type_manager = Drupal::entityTypeManager();
  Drupal::logger('ultimate_table_field')->notice('Start updating...');
  foreach ($fields as $field_config) {
    $entity_type_id = $field_config->getTargetEntityTypeId();
    $entity_type = $entity_type_manager->getDefinition($entity_type_id);
    if (!$entity_type) {
      continue;
    }
    $bundle_key = $entity_type->getKey('bundle');
    $query = $entity_type_manager->getStorage($entity_type->id())
      ->getQuery()
      ->accessCheck(FALSE)
      ->exists($field_config->getName());
    if (!empty($bundle_key)) {
      $query->condition($bundle_key, $field_config->getTargetBundle());
    }
    $ids = $query->execute();
    if (!empty($ids)) {
      $entities = $entity_type_manager->getStorage($entity_type_id)->loadMultiple($ids);
      foreach ($entities as $entity) {
        $tables_values = $entity->get($field_config->getName())->getValue();
        if (empty($tables_values)) {
          continue;
        }
        foreach ($tables_values as &$table_values) {
          $columns = $table_values['value']['columns'] ?? [];
          $rows = $table_values['value']['rows'] ?? [];
          if (!empty($columns)) {
            foreach ($columns as &$column) {
              if (!empty($column) && is_string($column)) {
                $column = [
                  [
                    'type' => 'text',
                    'text' => $column,
                  ],
                ];
              }
            }
            $table_values['value']['columns'] = $columns;
          }
          if (!empty($rows)) {
            foreach ($rows as &$row) {
              foreach ($row as $j => $data) {
                if ($j !== 0) {
                  continue;
                }
                if (!empty($data) && is_string($data)) {
                  $row[$j] = [
                    [
                      'type' => 'text',
                      'text' => $data,
                    ],
                  ];
                }
              }
            }
            $table_values['value']['rows'] = $rows;
          }
        }
        $entity->set($field_config->getName(), $tables_values);
        $entity->save();
      }
    }
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc