public function Updater::update

Updates a Drupal project and returns a list of next actions.

Parameters

Drupal\Core\FileTransfer\FileTransferInterface $filetransfer: Object that is a child of FileTransfer. Used for moving files to the server.

array $overrides: An array of settings to override defaults; see self::getInstallArgs().

Return value

array An array of links which the user may need to complete the update

Throws

Drupal\Core\Updater\UpdaterException

Drupal\Core\Updater\UpdaterFileTransferException

File

drupal/core/lib/Drupal/Core/Updater/Updater.php, line 183
Definition of Drupal\Core\Updater\Updater.

Class

Updater
Defines the base class for Updaters used in Drupal.

Namespace

Drupal\Core\Updater

Code

public function update(&$filetransfer, $overrides = array()) {
  try {

    // Establish arguments with possible overrides.
    $args = $this
      ->getInstallArgs($overrides);

    // Take a Backup.
    if ($args['make_backup']) {
      $this
        ->makeBackup($args['install_dir'], $args['backup_dir']);
    }
    if (!$this->name) {

      // This is bad, don't want to delete the install directory.
      throw new UpdaterException(t('Fatal error in update, cowardly refusing to wipe out the install directory.'));
    }

    // Make sure the installation parent directory exists and is writable.
    $this
      ->prepareInstallDirectory($filetransfer, $args['install_dir']);

    // Note: If the project is installed in the top-level, it will not be
    // deleted. It will be installed in sites/default as that will override
    // the top-level reference and not break other sites which are using it.
    if (is_dir($args['install_dir'] . '/' . $this->name)) {

      // Remove the existing installed file.
      $filetransfer
        ->removeDirectory($args['install_dir'] . '/' . $this->name);
    }

    // Copy the directory in place.
    $filetransfer
      ->copyDirectory($this->source, $args['install_dir']);

    // Make sure what we just installed is readable by the web server.
    $this
      ->makeWorldReadable($filetransfer, $args['install_dir'] . '/' . $this->name);

    // Run the updates.
    // @todo Decide if we want to implement this.
    $this
      ->postUpdate();

    // For now, just return a list of links of things to do.
    return $this
      ->postUpdateTasks();
  } catch (FileTransferException $e) {
    throw new UpdaterFileTransferException(t('File Transfer failed, reason: !reason', array(
      '!reason' => strtr($e
        ->getMessage(), $e->arguments),
    )));
  }
}