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
<   
---
> 
