ModuleUpdater

  1. drupal
    1. 7 modules/system/system.updater.inc

Class for updating modules using FileTransfer classes via authorize.php.

Hierarchy

Functions & methods

NameDescription
ModuleUpdater::canUpdate
ModuleUpdater::canUpdateDirectoryDetermine if the Updater can handle the project provided in $directory. Overrides DrupalUpdaterInterface::canUpdateDirectory
ModuleUpdater::getInstallDirectoryReturn the directory where a module should be installed. Overrides DrupalUpdaterInterface::getInstallDirectory
ModuleUpdater::getSchemaUpdatesReturn available database schema updates one a new version is installed.
ModuleUpdater::isInstalledChecks if the project is installed. Overrides DrupalUpdaterInterface::isInstalled
ModuleUpdater::postInstallTasksReturn an array of links to pages that should be visited post operation. Overrides Updater::postInstallTasks
ModuleUpdater::postUpdateTasksReturn an array of links to pages that should be visited post operation. Overrides Updater::postUpdateTasks
Updater::factoryReturn an Updater of the appropriate type depending on the source.
Updater::findInfoFileFigure out what the most important (or only) info file is in a directory.
Updater::getBackupDirReturn the full path to a directory where backups should be written.
Updater::getInstallArgsStore the default parameters for the Updater.
Updater::getProjectNameGet the name of the project directory (basename).
Updater::getProjectTitleReturn the project name from a Drupal info file.
Updater::getUpdaterFromDirectoryDetermine which Updater class can operate on the given directory.
Updater::installInstalls a Drupal project, returns a list of next actions.
Updater::makeBackupPerform a backup.
Updater::makeWorldReadableEnsure that a given directory is world readable.
Updater::postInstallPerform actions after installation.
Updater::postUpdatePerform actions after new code is updated.
Updater::prepareInstallDirectoryMake sure the installation parent directory exists and is writable.
Updater::updateUpdates a Drupal project, returns a list of next actions.
Updater::__construct

Properties

NameDescription
Updater::$source

File

modules/system/system.updater.inc, line 12
Subclasses of the Updater class to update Drupal core knows how to update. At this time, only modules and themes are supported.

View source
class ModuleUpdater extends Updater implements DrupalUpdaterInterface {

  /**
   * Return the directory where a module should be installed.
   *
   * If the module is already installed, drupal_get_path() will return
   * a valid path and we should install it there (although we need to use an
   * absolute path, so we prepend DRUPAL_ROOT). If we're installing a new
   * module, we always want it to go into sites/all/modules, since that's
   * where all the documentation recommends users install their modules, and
   * there's no way that can conflict on a multi-site installation, since
   * the Update manager won't let you install a new module if it's already
   * found on your system, and if there was a copy in sites/all, we'd see it.
   */
  public function getInstallDirectory() {
    if ($relative_path = drupal_get_path('module', $this->name)) {
      $relative_path = dirname($relative_path);
    }
    else {
      $relative_path = 'sites/all/modules';
    }
    return DRUPAL_ROOT . '/' . $relative_path;
  }

  public function isInstalled() {
    return (bool) drupal_get_path('module', $this->name);
  }

  public static function canUpdateDirectory($directory) {
    if (file_scan_directory($directory, '/.*\.module$/')) {
      return TRUE;
    }
    return FALSE;
  }

  public static function canUpdate($project_name) {
    return (bool) drupal_get_path('module', $project_name);
  }

  /**
   * Return available database schema updates one a new version is installed.
   */
  public function getSchemaUpdates() {
    require_once DRUPAL_ROOT . '/includes/install.inc';
    require_once DRUPAL_ROOT . '/includes/update.inc';

    if (_update_get_project_type($project) != 'module') {
      return array();
    }
    module_load_include('install', $project);

    if (!$updates = drupal_get_schema_versions($project)) {
      return array();
    }
    $updates_to_run = array();
    $modules_with_updates = update_get_update_list();
    if ($updates = $modules_with_updates[$project]) {
      if ($updates['start']) {
        return $updates['pending'];
      }
    }
    return array();
  }

  public function postInstallTasks() {
    return array(
      l(t('Enable newly added modules'), 'admin/modules'),
      l(t('Administration pages'), 'admin'),
    );
  }

  public function postUpdateTasks() {
    // We don't want to check for DB updates here, we do that once for all
    // updated modules on the landing page.
  }

}
Login or register to post comments