Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / lib / Drupal / Core / Config / Importer / ConfigImporterBatch.php
diff --git a/web/core/lib/Drupal/Core/Config/Importer/ConfigImporterBatch.php b/web/core/lib/Drupal/Core/Config/Importer/ConfigImporterBatch.php
new file mode 100644 (file)
index 0000000..8aee289
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+namespace Drupal\Core\Config\Importer;
+
+use Drupal\Core\Config\ConfigImporter;
+
+/**
+ * Methods for running the ConfigImporter in a batch.
+ *
+ * @see \Drupal\Core\Config\ConfigImporter
+ */
+class ConfigImporterBatch {
+
+  /**
+   * Processes the config import batch and persists the importer.
+   *
+   * @param \Drupal\Core\Config\ConfigImporter $config_importer
+   *   The batch config importer object to persist.
+   * @param string $sync_step
+   *   The synchronization step to do.
+   * @param array $context
+   *   The batch context.
+   */
+  public static function process(ConfigImporter $config_importer, $sync_step, &$context) {
+    if (!isset($context['sandbox']['config_importer'])) {
+      $context['sandbox']['config_importer'] = $config_importer;
+    }
+
+    $config_importer = $context['sandbox']['config_importer'];
+    $config_importer->doSyncStep($sync_step, $context);
+    if ($errors = $config_importer->getErrors()) {
+      if (!isset($context['results']['errors'])) {
+        $context['results']['errors'] = [];
+      }
+      $context['results']['errors'] = array_merge($errors, $context['results']['errors']);
+    }
+  }
+
+  /**
+   * Finish batch.
+   *
+   * This function is a static function to avoid serializing the ConfigSync
+   * object unnecessarily.
+   *
+   * @param bool $success
+   *   Indicate that the batch API tasks were all completed successfully.
+   * @param array $results
+   *   An array of all the results that were updated in update_do_one().
+   * @param array $operations
+   *   A list of the operations that had not been completed by the batch API.
+   */
+  public static function finish($success, $results, $operations) {
+    $messenger = \Drupal::messenger();
+    if ($success) {
+      if (!empty($results['errors'])) {
+        $logger = \Drupal::logger('config_sync');
+        foreach ($results['errors'] as $error) {
+          $messenger->addError($error);
+          $logger->error($error);
+        }
+        $messenger->addWarning(t('The configuration was imported with errors.'));
+      }
+      elseif (!drupal_installation_attempted()) {
+        // Display a success message when not installing Drupal.
+        $messenger->addStatus(t('The configuration was imported successfully.'));
+      }
+    }
+    else {
+      // An error occurred.
+      // $operations contains the operations that remained unprocessed.
+      $error_operation = reset($operations);
+      $message = t('An error occurred while processing %error_operation with arguments: @arguments', ['%error_operation' => $error_operation[0], '@arguments' => print_r($error_operation[1], TRUE)]);
+      $messenger->addError($message);
+    }
+  }
+
+}