You are here

class BatchProcessor in Automatic Updates 8.2

A batch processor for updates.

Hierarchy

Expanded class hierarchy of BatchProcessor

2 files declare their use of BatchProcessor
UpdateReady.php in src/Form/UpdateReady.php
UpdaterForm.php in src/Form/UpdaterForm.php

File

src/BatchProcessor.php, line 12

Namespace

Drupal\automatic_updates
View source
class BatchProcessor {

  /**
   * Gets the updater service.
   *
   * @return \Drupal\automatic_updates\Updater
   *   The updater service.
   */
  protected static function getUpdater() : Updater {
    return \Drupal::service('automatic_updates.updater');
  }

  /**
   * Records messages from a throwable, then re-throws it.
   *
   * @param \Throwable $error
   *   The caught exception.
   * @param array $context
   *   The current context of the batch job.
   *
   * @throws \Throwable
   *   The caught exception, which will always be re-thrown once its messages
   *   have been recorded.
   */
  protected static function handleException(\Throwable $error, array &$context) : void {
    $error_messages = [
      $error
        ->getMessage(),
    ];
    if ($error instanceof UpdateException) {
      foreach ($error
        ->getValidationResults() as $result) {
        $messages = $result
          ->getMessages();
        if (count($messages) > 1) {
          array_unshift($messages, $result
            ->getSummary());
        }
        $error_messages = array_merge($error_messages, $messages);
      }
    }
    foreach ($error_messages as $error_message) {
      $context['results']['errors'][] = $error_message;
    }
    throw $error;
  }

  /**
   * Calls the updater's begin() method.
   *
   * @param string[] $project_versions
   *   The project versions to be staged in the update, keyed by package name.
   * @param array $context
   *   The current context of the batch job.
   *
   * @see \Drupal\automatic_updates\Updater::begin()
   */
  public static function begin(array $project_versions, array &$context) : void {
    try {
      static::getUpdater()
        ->begin($project_versions);
    } catch (\Throwable $e) {
      static::handleException($e, $context);
    }
  }

  /**
   * Calls the updater's stageVersions() method.
   *
   * @param array $context
   *   The current context of the batch job.
   *
   * @see \Drupal\automatic_updates\Updater::stage()
   */
  public static function stage(array &$context) : void {
    try {
      static::getUpdater()
        ->stage();
    } catch (\Throwable $e) {
      static::handleException($e, $context);
    }
  }

  /**
   * Calls the updater's commit() method.
   *
   * @param array $context
   *   The current context of the batch job.
   *
   * @see \Drupal\automatic_updates\Updater::commit()
   */
  public static function commit(array &$context) : void {
    try {
      static::getUpdater()
        ->commit();
    } catch (\Throwable $e) {
      static::handleException($e, $context);
    }
  }

  /**
   * Calls the updater's clean() method.
   *
   * @param array $context
   *   The current context of the batch job.
   *
   * @see \Drupal\automatic_updates\Updater::clean()
   */
  public static function clean(array &$context) : void {
    try {
      static::getUpdater()
        ->clean();
    } catch (\Throwable $e) {
      static::handleException($e, $context);
    }
  }

  /**
   * Finishes the stage batch job.
   *
   * @param bool $success
   *   Indicate that the batch API tasks were all completed successfully.
   * @param array $results
   *   An array of all the results.
   * @param array $operations
   *   A list of the operations that had not been completed by the batch API.
   */
  public static function finishStage(bool $success, array $results, array $operations) : ?RedirectResponse {
    if ($success) {
      return new RedirectResponse(Url::fromRoute('automatic_updates.confirmation_page', [], [
        'absolute' => TRUE,
      ])
        ->toString());
    }
    static::handleBatchError($results);
    return NULL;
  }

  /**
   * Finishes the commit batch job.
   *
   * @param bool $success
   *   Indicate that the batch API tasks were all completed successfully.
   * @param array $results
   *   An array of all the results.
   * @param array $operations
   *   A list of the operations that had not been completed by the batch API.
   */
  public static function finishCommit(bool $success, array $results, array $operations) : ?RedirectResponse {
    if ($success) {
      \Drupal::messenger()
        ->addMessage('Update complete!');

      // @todo redirect to update.php?
      return new RedirectResponse(Url::fromRoute('update.status', [], [
        'absolute' => TRUE,
      ])
        ->toString());
    }
    static::handleBatchError($results);
    return NULL;
  }

  /**
   * Handles a batch job that finished with errors.
   *
   * @param array $results
   *   The batch results.
   */
  protected static function handleBatchError(array $results) : void {
    if (isset($results['errors'])) {
      foreach ($results['errors'] as $error) {
        \Drupal::messenger()
          ->addError($error);
      }
    }
    else {
      \Drupal::messenger()
        ->addError("Update error");
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BatchProcessor::begin public static function Calls the updater's begin() method.
BatchProcessor::clean public static function Calls the updater's clean() method.
BatchProcessor::commit public static function Calls the updater's commit() method.
BatchProcessor::finishCommit public static function Finishes the commit batch job.
BatchProcessor::finishStage public static function Finishes the stage batch job.
BatchProcessor::getUpdater protected static function Gets the updater service.
BatchProcessor::handleBatchError protected static function Handles a batch job that finished with errors.
BatchProcessor::handleException protected static function Records messages from a throwable, then re-throws it.
BatchProcessor::stage public static function Calls the updater's stageVersions() method.