diff --git a/features.module b/features.module index 86a8a58..2ebbdfa 100644 --- a/features.module +++ b/features.module @@ -278,6 +278,7 @@ function features_help($path, $arg) { function features_modules_disabled($modules) { // Find any features modules that were disabled. if ($modules = array_intersect(array_keys(features_get_features()), $modules)) { + features_reset_all(); foreach ($modules as $module) { features_disable_feature($module); } @@ -290,6 +291,7 @@ function features_modules_disabled($modules) { function features_modules_enabled($modules) { // Find any features modules that were enabled. if ($modules = array_intersect(array_keys(features_get_features()), $modules)) { + features_reset_all(); foreach ($modules as $module) { features_enable_feature($module); } @@ -351,7 +353,7 @@ function features_include_defaults($components = NULL, $reset = FALSE) { } // Use all include components if none are explicitly specified. else { - $components = $include_components; + $components = array_keys($include_components); } foreach ($components as $component) { if (isset($include_components[$component]) && (!isset($included[$component]) || $reset)) { @@ -894,3 +896,22 @@ function features_hook_info() { ); return array_fill_keys($hooks, array('group' => 'features')); } + +/** + * Resets static caches and rebuilds defaults. + */ +function features_reset_all() { + module_load_include('inc', 'features', 'features.export'); + + // Reset modules cache. + features_get_info('module', NULL, TRUE); + + // Reset components registry cache. + drupal_static('features_get_components', NULL, TRUE); + drupal_static('features_get_components_by_key', NULL, TRUE); + + // Reset components registry cache. + features_include(TRUE); + features_include_defaults(NULL, TRUE); +} +