diff options
author | Dries Buytaert <dries@buytaert.net> | 2005-12-08 08:40:10 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2005-12-08 08:40:10 +0000 |
commit | c54234d71a6f1a6857e74ffd1e76e5e0604833de (patch) | |
tree | 05bc03c2079a8760734982ef765677f8c9b9847f /modules/system | |
parent | 7b5a8d936cbc856020318928d50e73078ee4c679 (diff) | |
download | brdo-c54234d71a6f1a6857e74ffd1e76e5e0604833de.tar.gz brdo-c54234d71a6f1a6857e74ffd1e76e5e0604833de.tar.bz2 |
- Patch #40341 by Neil: fixed problems with database schema versions.
- When user #1 creates an account (we can assume this happens only once), system.module's schema version is set to the latest availiable.
- system_get_files_database() now includes a 'schema_version' child of each file object.
- That new information is re-saved when Drupal re-populates the system table.
- An array of newly-enabled modules is built, module_list() is reloaded, and the schema versions of each newly-enabled module are set to the most recent availiable. If the schema version is already set (presumably from a previous installation) it is not changed.
Diffstat (limited to 'modules/system')
-rw-r--r-- | modules/system/system.module | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/modules/system/system.module b/modules/system/system.module index c9b6b5214..94cd94035 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -484,7 +484,7 @@ function system_check_directory($form_element) { */ function system_get_files_database(&$files, $type) { // Extract current files from database. - $result = db_query("SELECT name, type, status, throttle FROM {system} WHERE type = '%s'", $type); + $result = db_query("SELECT name, type, status, throttle, schema_version FROM {system} WHERE type = '%s'", $type); while ($file = db_fetch_object($result)) { if (isset($files[$file->name]) && is_object($files[$file->name])) { foreach ($file as $key => $value) { @@ -892,7 +892,7 @@ function system_modules() { // Update the contents of the system table: db_query("DELETE FROM {system} WHERE name = '%s' AND type = '%s'", $file->name, 'module'); - db_query("INSERT INTO {system} (name, description, type, filename, status, throttle, bootstrap) VALUES ('%s', '%s', '%s', '%s', %d, %d, %d)", $file->name, $file->description, 'module', $file->filename, $file->status, $file->throttle, $bootstrap); + db_query("INSERT INTO {system} (name, description, type, filename, status, throttle, bootstrap, schema_version) VALUES ('%s', '%s', '%s', '%s', %d, %d, %d, %d)", $file->name, $file->description, 'module', $file->filename, $file->status, $file->throttle, $bootstrap, $file->schema_version); } @@ -947,9 +947,13 @@ function theme_system_modules($form) { function system_modules_submit($form_id, $edit) { db_query("UPDATE {system} SET status = 0, throttle = 0 WHERE type = 'module'"); + $new_modules = array(); foreach ($edit['status'] as $key => $choice) { if ($choice) { db_query("UPDATE {system} SET status = 1 WHERE type = 'module' AND name = '%s'", $key); + if (!module_exist($key)) { + $new_modules[] = $key; + } } } @@ -961,7 +965,18 @@ function system_modules_submit($form_id, $edit) { } } + module_list(TRUE, FALSE); menu_rebuild(); + + include './includes/install.inc'; + foreach ($new_modules as $module) { + // Set the installed schema version for newly-enabled modules + $versions = drupal_get_schema_versions($module); + if ($versions !== FALSE && drupal_get_installed_schema_version($module) == 0) { + drupal_set_installed_schema_version($module, max($versions)); + } + } + drupal_set_message(t('The configuration options have been saved.')); drupal_goto('admin/modules'); } |