You are here

function lingotek_update_8215 in Lingotek Translation 8.2

Remove old unused Lingotek metadata fields from content entities.

File

./lingotek.install, line 721
Install, update and uninstall functions for the Lingotek module.

Code

function lingotek_update_8215() {
  $fields = [
    'lingotek_document_id',
    'lingotek_hash',
    'lingotek_profile',
    'lingotek_translation_source',
    'lingotek_translation_status',
    'lingotek_translation_created',
    'lingotek_translation_changed',
  ];

  /** @var \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface $entity_definition_update_manager */
  $connection = \Drupal::database();
  $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
  $entity_type_manager = \Drupal::entityTypeManager();
  $entities = $entity_type_manager
    ->getDefinitions();
  foreach ($entities as $entity_type_id => $entity_type) {
    foreach ($fields as $field) {
      if ($field_definition = $entity_definition_update_manager
        ->getFieldStorageDefinition($field, $entity_type_id)) {
        try {

          // Data was migrated in lingotek_update_8011, we can delete values from
          // columns or tables without looking behind now.
          if ($field !== 'lingotek_translation_status') {
            $connection
              ->update($entity_type
              ->getDataTable())
              ->fields([
              $field => NULL,
            ])
              ->execute();
            $message = new FormattableMarkup('%field_name values deleted for entity %entity_type_id', [
              '%field_name' => $field,
              '%entity_type_id' => $entity_type_id,
            ]);
            \Drupal::messenger()
              ->addWarning($message);
            \Drupal::logger('lingotek')
              ->warning($message);
          }
          else {
            $data_table_name = _lingotek_get_deleted_translation_status_data_table_name($entity_type_id);
            $tables = [
              $data_table_name,
            ];
            if ($entity_type
              ->isRevisionable()) {
              $revision_table_name = _lingotek_get_deleted_translation_status_revision_table_name($entity_type_id);
              $tables[] = $revision_table_name;
            }
            foreach ($tables as $table_name) {
              $connection
                ->schema()
                ->dropTable($table_name);
              $message = new FormattableMarkup('%table deleted for updating entity %entity_type_id field %field_name', [
                '%table' => $table_name,
                '%field_name' => $field,
                '%entity_type_id' => $entity_type_id,
              ]);
              \Drupal::messenger()
                ->addWarning($message);
              \Drupal::logger('lingotek')
                ->warning($message);
            }
          }
        } catch (\Exception $e) {
          $error = new FormattableMarkup('%field_name values deletion previous to field deletion failed for entity %entity_type_id with message: %message', [
            '%field_name' => $field,
            '%entity_type_id' => $entity_type_id,
            '%message' => $e
              ->getMessage(),
          ]);
          \Drupal::messenger()
            ->addError($error);
          \Drupal::logger('lingotek')
            ->error($error);
        }
        try {
          $entity_definition_update_manager
            ->uninstallFieldStorageDefinition($field_definition);
          \Drupal::messenger()
            ->addStatus(new FormattableMarkup('%field_name deleted for entity %entity_type_id', [
            '%field_name' => $field,
            '%entity_type_id' => $entity_type_id,
          ]));
        } catch (\Exception $e) {
          $error = new FormattableMarkup('%field_name deletion failed for entity %entity_type_id with message: %message', [
            '%field_name' => $field,
            '%entity_type_id' => $entity_type_id,
            '%message' => $e
              ->getMessage(),
          ]);
          \Drupal::messenger()
            ->addError($error);
          \Drupal::logger('lingotek')
            ->error($error);
        }
      }
      else {
        \Drupal::messenger()
          ->addWarning(new FormattableMarkup('%field_name not found in entity %entity_type_id', [
          '%field_name' => $field,
          '%entity_type_id' => $entity_type_id,
        ]));
      }
    }
  }
}