ConfigImporterFieldPurger::initializeSandbox

protected static ConfigImporterFieldPurger::initializeSandbox(array &$context, ConfigImporter $config_importer)

Initializes the batch context sandbox for processing field deletions.

This calculates the number of steps necessary to purge all the field data and saves data for later use.

Parameters

array $context: The batch context.

\Drupal\Core\Config\ConfigImporter $config_importer: The config importer.

File

core/modules/field/src/ConfigImporterFieldPurger.php, line 65

Class

ConfigImporterFieldPurger
Processes field purges before a configuration synchronization.

Namespace

Drupal\field

Code

protected static function initializeSandbox(array &$context, ConfigImporter $config_importer) {
  $context['sandbox']['field']['purge_batch_size'] = \Drupal::config('field.settings')->get('purge_batch_size');
  // Save the future list of installed extensions to limit the amount of times
  // the configuration is read from disk.
  $context['sandbox']['field']['extensions'] = $config_importer->getStorageComparer()->getSourceStorage()->read('core.extension');

  $context['sandbox']['field']['steps_to_delete'] = 0;
  $fields = static::getFieldStoragesToPurge($context['sandbox']['field']['extensions'], $config_importer->getUnprocessedConfiguration('delete'));
  foreach ($fields as $field) {
    $row_count = \Drupal::entityManager()->getStorage($field->getTargetEntityTypeId())
      ->countFieldData($field);
    if ($row_count > 0) {
      // The number of steps to delete each field is determined by the
      // purge_batch_size setting. For example if the field has 9 rows and the
      // batch size is 10 then this will add 1 step to $number_of_steps.
      $how_many_steps = ceil($row_count / $context['sandbox']['field']['purge_batch_size']);
      $context['sandbox']['field']['steps_to_delete'] += $how_many_steps;
    }
  }
  // Each field possibly needs one last field_purge_batch() call to remove the
  // last field and the field storage itself.
  $context['sandbox']['field']['steps_to_delete'] += count($fields);

  $context['sandbox']['field']['current_progress'] = 0;
}
doc_Drupal
2016-10-29 08:53:44
Comments
Leave a Comment

Please login to continue.