diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc index a45a0e3..0893649 100644 --- a/core/modules/system/system.admin.inc +++ b/core/modules/system/system.admin.inc @@ -886,6 +886,7 @@ function system_modules($form, $form_state = array()) { } } } + $extra['filename'] = $filename; $form['modules'][$module->info['package']][$filename] = _system_modules_build_row($module->info, $extra); } @@ -917,6 +918,9 @@ function system_modules($form, $form_state = array()) { '#value' => t('Save configuration'), ); $form['#action'] = url('admin/modules/list/confirm'); + $form['#attached'] = array( + 'js' => array(drupal_get_path('module', 'system') . '/system.js'), + ); return $form; } @@ -999,6 +1003,10 @@ function _system_modules_build_row($info, $extra) { '#type' => 'checkbox', '#title' => t('Enable'), '#default_value' => $extra['enabled'], + '#attributes' => array( + 'data-module' => $extra['filename'], + 'data-requires' => implode(',', array_keys($extra['requires'])), + ), ); if ($extra['disabled']) { $form['enable']['#disabled'] = TRUE; diff --git a/core/modules/system/system.js b/core/modules/system/system.js index f4bdc6d..2ee9268 100644 --- a/core/modules/system/system.js +++ b/core/modules/system/system.js @@ -137,4 +137,48 @@ Drupal.behaviors.pageCache = { } }; +/** + * Display an alert for dependant modules. + */ +Drupal.behaviors.moduleDependencies = { + attach: function (context, settings) { + var $modules = $("input[data-module]"); + $("input[data-requires!='']").bind('click', function () { + var $that = $(this); + if ($that.attr('checked')) { + var $dependencies = Drupal.system.getDependencies($that.attr('data-requires').split(',')); + if ($dependencies.length) { + var message = Drupal.formatPlural($dependencies.length, "There is 1 dependent module, enable?", "There are @count dependent modules, enable?"); + if (confirm(message)) { + $dependencies.click() + } + else { + $that.attr('checked', false); + } + } + } + }); + } +}; + +Drupal.system = { + /** + * Returns a jQuery collection of unchecked inputs from the dependency list + * + * @param $module + */ + getDependencies: function (list) { + var $modules = $("input[data-module]").filter(function () { + var $that = $(this); + var required = $.inArray($that.attr('data-module'), list) !== -1; + var notEnabled = true; + if (required) { + notEnabled = !$that.attr('checked'); + } + return required && notEnabled; + }); + return $modules; + } +}; + })(jQuery);