diff -r 07239de796bb -r e756a8c72c3d cms/drupal/modules/system/system.updater.inc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/drupal/modules/system/system.updater.inc Fri Sep 08 12:04:06 2017 +0200 @@ -0,0 +1,150 @@ +isInstalled() && ($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_filename('module', $this->name, NULL, FALSE); + } + + 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(); + } + + /** + * Returns a list of post install actions. + */ + public function postInstallTasks() { + return array( + l(t('Install another module'), 'admin/modules/install'), + 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. + } + +} + +/** + * Class for updating themes using FileTransfer classes via authorize.php. + */ +class ThemeUpdater extends Updater implements DrupalUpdaterInterface { + + /** + * Return the directory where a theme should be installed. + * + * If the theme 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 + * theme, we always want it to go into sites/all/themes, since that's + * where all the documentation recommends users install their themes, and + * there's no way that can conflict on a multi-site installation, since + * the Update manager won't let you install a new theme 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 ($this->isInstalled() && ($relative_path = drupal_get_path('theme', $this->name))) { + $relative_path = dirname($relative_path); + } + else { + $relative_path = 'sites/all/themes'; + } + return DRUPAL_ROOT . '/' . $relative_path; + } + + public function isInstalled() { + return (bool) drupal_get_filename('theme', $this->name, NULL, FALSE); + } + + static function canUpdateDirectory($directory) { + // This is a lousy test, but don't know how else to confirm it is a theme. + if (file_scan_directory($directory, '/.*\.module$/')) { + return FALSE; + } + return TRUE; + } + + public static function canUpdate($project_name) { + return (bool) drupal_get_path('theme', $project_name); + } + + public function postInstall() { + // Update the system table. + clearstatcache(); + system_rebuild_theme_data(); + + } + + public function postInstallTasks() { + return array( + l(t('Enable newly added themes'), 'admin/appearance'), + l(t('Administration pages'), 'admin'), + ); + } +}