function PrepareModulesEntityUninstallForm::deleteContentEntities

Same name in other branches
  1. 8.9.x core/modules/system/src/Form/PrepareModulesEntityUninstallForm.php \Drupal\system\Form\PrepareModulesEntityUninstallForm::deleteContentEntities()
  2. 10 core/modules/system/src/Form/PrepareModulesEntityUninstallForm.php \Drupal\system\Form\PrepareModulesEntityUninstallForm::deleteContentEntities()
  3. 11.x core/modules/system/src/Form/PrepareModulesEntityUninstallForm.php \Drupal\system\Form\PrepareModulesEntityUninstallForm::deleteContentEntities()

Deletes the content entities of the specified entity type.

@internal This batch callback is only meant to be used by this form.

Parameters

string $entity_type_id: The entity type ID from which data will be deleted.

array|\ArrayAccess $context: The batch context array, passed by reference.

File

core/modules/system/src/Form/PrepareModulesEntityUninstallForm.php, line 206

Class

PrepareModulesEntityUninstallForm
Provides a form removing module content entities data before uninstallation.

Namespace

Drupal\system\Form

Code

public static function deleteContentEntities($entity_type_id, &$context) {
    $storage = \Drupal::entityTypeManager()->getStorage($entity_type_id);
    // Set the entity type ID in the results array so we can access it in the
    // batch finished callback.
    $context['results']['entity_type_id'] = $entity_type_id;
    if (!isset($context['sandbox']['progress'])) {
        $context['sandbox']['progress'] = 0;
        $context['sandbox']['max'] = $storage->getQuery()
            ->accessCheck(FALSE)
            ->count()
            ->execute();
    }
    $entity_type = \Drupal::entityTypeManager()->getDefinition($entity_type_id);
    $entity_ids = $storage->getQuery()
        ->accessCheck(FALSE)
        ->sort($entity_type->getKey('id'), 'ASC')
        ->range(0, 10)
        ->execute();
    if ($entities = $storage->loadMultiple($entity_ids)) {
        $storage->delete($entities);
    }
    // Sometimes deletes cause secondary deletes. For example, deleting a
    // taxonomy term can cause its children to be deleted too.
    $context['sandbox']['progress'] = $context['sandbox']['max'] - $storage->getQuery()
        ->accessCheck(FALSE)
        ->count()
        ->execute();
    // Inform the batch engine that we are not finished and provide an
    // estimation of the completion level we reached.
    if (count($entity_ids) > 0 && $context['sandbox']['progress'] != $context['sandbox']['max']) {
        $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
        $context['message'] = new TranslatableMarkup('Deleting items... Completed @percentage% (@current of @total).', [
            '@percentage' => round(100 * $context['sandbox']['progress'] / $context['sandbox']['max']),
            '@current' => $context['sandbox']['progress'],
            '@total' => $context['sandbox']['max'],
        ]);
    }
    else {
        $context['finished'] = 1;
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.