You are here

public function SiteSettingsReplicator::processBatch in Site Settings and Labels 8

Process callback for the batch set the export form.

Parameters

array $settings: The settings from the export form.

array $context: The batch context.

Throws

\Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException

\Drupal\Component\Plugin\Exception\PluginNotFoundException

\Drupal\Core\Entity\EntityStorageException

File

src/SiteSettingsReplicator.php, line 67

Class

SiteSettingsReplicator
Class SiteSettingsReplicator.

Namespace

Drupal\site_settings

Code

public function processBatch($settings, &$context) {
  if (empty($context['sandbox'])) {

    // Clean settings.
    $settings = $this
      ->cleanSettings($settings);

    // Store data in results for batch finish.
    $context['results']['settings'] = $settings;

    // Set initial batch progress.
    $context['sandbox']['settings'] = $settings;
    $context['sandbox']['progress'] = 0;
    $context['sandbox']['current_id'] = 0;
    $context['sandbox']['max'] = count($settings['values']['new_settings']);
  }
  else {
    $settings = $context['sandbox']['settings'];
  }
  if ($context['sandbox']['max'] == 0) {

    // If we have no settings to process, immediately finish.
    $context['finished'] = 1;
  }
  else {

    // Load the optional services.
    $this->replicateReplicator = \Drupal::service('replicate.replicator');
    $this->fieldToolsFieldCloner = \Drupal::service('field_tools.field_cloner');
    $this->fieldToolsDisplayCloner = \Drupal::service('field_tools.display_cloner');

    // Replicate the next setting.
    $key = $context['sandbox']['progress'];
    $setting = $settings['values']['new_settings'][$key];
    $this
      ->replicateSetting($setting, $settings['values']['setting']);
    $context['results']['current_id'] = $key;
    $context['sandbox']['progress']++;
    $context['sandbox']['current_id'] = $key;

    // Set the current message.
    $context['message'] = $this
      ->t('Processed @num of @total new settings.', [
      '@num' => $context['sandbox']['progress'],
      '@total' => $context['sandbox']['max'],
    ]);

    // Check if we are now finished.
    if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
      $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
    }
  }
}