summaryrefslogtreecommitdiff
path: root/modules/system/system.module
diff options
context:
space:
mode:
Diffstat (limited to 'modules/system/system.module')
-rw-r--r--modules/system/system.module19
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');
}