function Updater::update

Same name in other branches
  1. 9 core/lib/Drupal/Core/Updater/Updater.php \Drupal\Core\Updater\Updater::update()
  2. 8.9.x core/lib/Drupal/Core/Updater/Updater.php \Drupal\Core\Updater\Updater::update()
  3. 10 core/lib/Drupal/Core/Updater/Updater.php \Drupal\Core\Updater\Updater::update()
  4. 11.x core/lib/Drupal/Core/Updater/Updater.php \Drupal\Core\Updater\Updater::update()

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

Parameters

FileTransfer $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

File

includes/updater.inc, line 230

Class

Updater
Base class for Updaters used in Drupal.

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 sites/all, it will not be
        // deleted. It will be installed in sites/default as that will override
        // the sites/all 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),
        )));
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.