diff --git a/hosting.features.inc b/hosting.features.inc index 0cc5a6b..b47f554 100644 --- a/hosting.features.inc +++ b/hosting.features.inc @@ -61,6 +61,30 @@ function hosting_features_form() { return system_settings_form($form); } +function hosting_features_form_validate($form, &$form_state) { + $values = $form_state['values']; + $features = hosting_get_features(TRUE); + foreach ($features as $feature => $info) { + $value = $values[$feature]; + $current = hosting_feature($feature); + variable_set('hosting_feature_' . $feature, $value); + if ($current && !$value) { + if ($module = $features[$feature]['module']) { + foreach(module_list() as $current_module) { + $info = drupal_parse_info_file(drupal_get_path('module', $current_module) . '/' . $current_module . '.info'); + $dependencies = array(); + $dependencies = $info['dependencies']; + if (!empty($dependencies)) { + if (in_array($module, $dependencies)) { + form_set_error('', t("You cannot disable " . $module . " because " . $current_module . " depends on it")); + } + } + } + } + } + } +} + function hosting_features_form_submit($form, &$form_state) { $values = $form_state['values']; $features = hosting_get_features(TRUE); @@ -71,6 +95,21 @@ function hosting_features_form_submit($form, &$form_state) { if ((!$current) && $value) { if ($module = $features[$feature]['module']) { include_once('includes/install.inc'); + // install and enable any dependencies that aren't already enabled + $info = drupal_parse_info_file(drupal_get_path('module', $module) . '/' . $module . '.info'); + if ($info['dependencies']) { + $dependencies = array(); + $dependencies = $info['dependencies']; + foreach ($dependencies as $dependency) { + if (!empty($dependency)) { + if (!module_exists($dependency)) { + drupal_set_message(t("Enabling %module module", array('%module' => $dependency))); + drupal_install_modules(array($dependency)); + module_enable(array($dependency)); + } + } + } + } // turn on module drupal_set_message(t("Enabling %module module", array('%module' => $module))); drupal_install_modules(array($module));