Index: modules/system/system.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v retrieving revision 1.209 diff -r1.209 system.admin.inc 850c850 < foreach ($storage['more_modules'] as $info) { --- > foreach ($storage['more_required'] as $info) { 876a877,878 > > // Builds list of modules. 878d879 < // If we're not coming from the confirmation form, build the list of modules. 879a881 > // If we're not coming from the confirmation form, build the module list. 887,888c889 < // If we are coming from the confirmation form, fetch < // the modules out of $form_state. --- > // If we coming from the confirmation form, fetch modules from $form_state. 892,893c893 < // Get a list of all modules, it will be used to find which module requires < // which. --- > // Collect data for all modules to be able to determine dependencies. 896,906c896,904 < // The modules to be enabled. < $modules_to_be_enabled = array(); < // The modules to be disabled. < $disable_modules = array(); < // The modules to be installed. < $new_modules = array(); < // Modules that need to be switched on because other modules require them. < $more_modules = array(); < // Go through each module, finding out if we should enable, install, or < // disable it. Also, we find out if there are modules it requires that are < // not enabled. --- > // Sorts modules by weight. > $sort = array(); > foreach (array_keys($modules) as $module) { > $sort[$module] = $files[$module]->sort; > } > array_multisort($sort, $modules); > > // Makes sure all required modules are set to be enabled. > $more_required = array(); 908,909d905 < // If it's enabled, find out whether to just < // enable it, or install it. 911,928c907,915 < if (drupal_get_installed_schema_version($name) == SCHEMA_UNINSTALLED) { < $new_modules[$name] = $name; < } < elseif (!module_exists($name)) { < $modules_to_be_enabled[$name] = $name; < } < // If we're not coming from a confirmation form, search for modules the < // new ones require and see whether there are any that additionally < // need to be switched on. < if (empty($form_state['storage'])) { < foreach ($form['modules'][$module['group']][$name]['#requires'] as $requires => $v) { < if (!$modules[$requires]['enabled']) { < if (!isset($more_modules[$name])) { < $more_modules[$name]['name'] = $files[$name]->info['name']; < } < $more_modules[$name]['requires'][$requires] = $files[$requires]->info['name']; < } < $modules[$requires] = array('group' => $files[$requires]->info['package'], 'enabled' => TRUE); --- > > // Checks that all dependencies are set to be enabled. Stores the ones > // that are not in $dependencies variable so that the user can be alerted > // in the confirmation form that more modules need to be enabled. > $dependencies = array(); > foreach (array_keys($files[$name]->requires) as $required) { > if (!$modules[$required]['enabled']) { > $dependencies[] = $files[$required]->info['name']; > $modules[$required]['enabled'] = 1; 930a918,925 > > // Stores additional modules that need to be enabled in $more_required. > if (!empty($dependencies)) { > $more_required[$name] = array( > 'name' => $files[$name]->info['name'], > 'requires' => $dependencies, > ); > } 933,938c928,932 < // A second loop is necessary, otherwise the modules set to be enabled in the < // previous loop would not be found. < foreach ($modules as $name => $module) { < if (module_exists($name) && !$module['enabled']) { < $disable_modules[$name] = $name; < } --- > > // Redirects to confirmation form if more modules need to be enabled. > if (!empty($more_required) && !isset($form_state['values']['confirm'])) { > $form_state['storage'] = array('more_required' => $more_required, 'modules' => $modules); > return; 940,957c934,943 < if ($more_modules) { < // If we need to switch on more modules because other modules require < // them and they haven't confirmed, don't process the submission yet. Store < // the form submission data needed later. < if (!isset($form_state['values']['confirm'])) { < $form_state['storage'] = array('more_modules' => $more_modules, 'modules' => $modules); < return; < } < // Otherwise, install or enable the modules. < else { < foreach ($form_state['storage']['more_modules'] as $info) { < foreach ($info['requires'] as $requires => $name) { < if (drupal_get_installed_schema_version($name) == SCHEMA_UNINSTALLED) { < $new_modules[$name] = $name; < } < else { < $modules_to_be_enabled[$name] = $name; < } --- > > // Invokes hook_requirements('install'). If failures are detected, makes sure > // the dependent modules aren't installed either. > foreach ($modules as $name => $module) { > // Only invoke hook_requirements() on modules that are going to be installed. > if ($module['enabled'] && drupal_get_installed_schema_version($name) == SCHEMA_UNINSTALLED) { > if (!drupal_check_module($name)) { > $modules[$name]['enabled'] = 0; > foreach (array_keys($files[$name]->required_by) as $required_by) { > $modules[$required_by] = 0; 962,965d947 < // Now we have installed every module as required (either by the user or < // because other modules require them) so we don't need the temporary < // storage anymore. < unset($form_state['storage']); 967c949,954 < $old_module_list = module_list(); --- > // Initializes array of actions. > $actions = array( > 'enable' => array(), > 'disable' => array(), > 'install' => array(), > ); 969,993c956,963 < // Enable the modules needing enabling. < if (!empty($modules_to_be_enabled)) { < $sort = array(); < foreach ($modules_to_be_enabled as $module) { < $sort[$module] = $files[$module]->sort; < } < array_multisort($sort, $modules_to_be_enabled); < module_enable($modules_to_be_enabled); < } < // Disable the modules that need disabling. < if (!empty($disable_modules)) { < $sort = array(); < foreach ($disable_modules as $module) { < $sort[$module] = $files[$module]->sort; < } < array_multisort($sort, $disable_modules); < module_disable($disable_modules); < } < < // Install new modules. < if (!empty($new_modules)) { < $sort = array(); < foreach ($new_modules as $key => $module) { < if (!drupal_check_module($module)) { < unset($new_modules[$key]); --- > // Builds arrays of modules that need to be enabled, disabled, and installed. > foreach ($modules as $name => $module) { > if ($module['enabled']) { > if (drupal_get_installed_schema_version($name) == SCHEMA_UNINSTALLED) { > $actions['install'][] = $name; > } > elseif (!module_exists($name)) { > $actions['enable'][] = $name; 995d964 < $sort[$module] = $files[$module]->sort; 997,998c966,968 < array_multisort($sort, $new_modules); < drupal_install_modules($new_modules); --- > elseif (module_exists($name)) { > $actions['disable'][] = $name; > } 1001,1002c971,983 < $current_module_list = module_list(TRUE); < if ($old_module_list != $current_module_list) { --- > // Gets list of modules prior to install process, unsets $form_state['storage'] > // so we don't get redirected back to the confirmation form. > $pre_install_list = module_list(); > unset($form_state['storage']); > > // Installs, enables, and disables modules. > drupal_install_modules($actions['install']); > module_enable($actions['enable']); > module_disable($actions['disable']); > > // Gets module list after install process, displays message if there are changes. > $post_install_list = module_list(TRUE); > if ($pre_install_list != $post_install_list) { 1021c1002 < module_invoke('locale', 'system_update', $new_modules); --- > module_invoke('locale', 'system_update', $actions['install']); 1935c1916 < --- >