1 updater.inc public Updater::prepareInstallDirectory(&$filetransfer, $directory)

Make sure the installation parent directory exists and is writable.

Parameters

FileTransfer $filetransfer: Object which is a child of FileTransfer.

string $directory: The installation directory to prepare.

Throws

UpdaterException

File

core/includes/updater.inc, line 370
Classes used for updating various files in the Backdrop webroot. These classes use a FileTransfer object to actually perform the operations. Normally, the FileTransfer is provided when the site owner is redirected to authorize.php as part of a…

Class

Updater
Base class for Updaters used in Backdrop.

Code

public function prepareInstallDirectory(&$filetransfer, $directory) {
  // Make the parent dir writable if need be and create the dir.
  if (!is_dir($directory)) {
    $parent_dir = dirname($directory);
    if (!is_writable($parent_dir)) {
      @chmod($parent_dir, 0755);
      // It is expected that this will fail if the directory is owned by the
      // FTP user. If the FTP user == web server, it will succeed.
      try {
        $filetransfer->createDirectory($directory);
        $this->makeWorldReadable($filetransfer, $directory);
      }
      catch (FileTransferException $e) {
        // Probably still not writable. Try to chmod and do it again.
        // @todo: Make a new exception class so we can catch it differently.
        try {
          $old_perms = substr(sprintf('%o', fileperms($parent_dir)), -4);
          $filetransfer->chmod($parent_dir, 0755);
          $filetransfer->createDirectory($directory);
          $this->makeWorldReadable($filetransfer, $directory);
          // Put the permissions back.
          $filetransfer->chmod($parent_dir, intval($old_perms, 8));
        }
        catch (FileTransferException $e) {
          $message = t($e->getMessage(), $e->arguments);
          $throw_message = t('Unable to create %directory due to the following: %reason', array('%directory' => $directory, '%reason' => $message));
          throw new UpdaterException($throw_message);
        }
      }
      // Put the parent directory back.
      @chmod($parent_dir, 0555);
    }
  }
}