diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Services/ModuleService.cs b/src/Orchard.Web/Modules/Orchard.Modules/Services/ModuleService.cs index c0b9a84a3..8bdc2e0a2 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/Services/ModuleService.cs +++ b/src/Orchard.Web/Modules/Orchard.Modules/Services/ModuleService.cs @@ -58,16 +58,18 @@ namespace Orchard.Modules.Services { public void EnableFeatures(IEnumerable features, bool force) { var shellDescriptor = _shellDescriptorManager.GetShellDescriptor(); var enabledFeatures = shellDescriptor.Features.ToList(); + var availableFeatures = GetAvailableFeatures().ToList(); - var featuresToEnable = - features.Select(s => EnableFeature(s, GetAvailableFeatures(), force)). - SelectMany(ies => ies.Select(s => s)); + var featuresToEnable = features + .Select(s => EnableFeature(s, availableFeatures, force)).ToList() + .SelectMany(ies => ies.Select(s => s)); if (featuresToEnable.Count() == 0) return; foreach (var featureToEnable in featuresToEnable) { - enabledFeatures.Add(new ShellFeature {Name = featureToEnable}); + var feature = featureToEnable; + enabledFeatures.Add(new ShellFeature { Name = feature }); Services.Notifier.Information(T("{0} was enabled", featureToEnable)); } @@ -84,9 +86,9 @@ namespace Orchard.Modules.Services { var enabledFeatures = shellDescriptor.Features.ToList(); var availableFeatures = GetAvailableFeatures().ToList(); - var featuresToDisable = - features.Select(s => DisableFeature(s, availableFeatures, force)).SelectMany( - ies => ies.Select(s => s)); + var featuresToDisable = features + .Select(s => DisableFeature(s, availableFeatures, force)).ToList() + .SelectMany(ies => ies.Select(s => s)); if (featuresToDisable.Count() == 0) return; diff --git a/src/Orchard/Environment/State/ShellStateCoordinator.cs b/src/Orchard/Environment/State/ShellStateCoordinator.cs index 03e8eb20d..de48f7727 100644 --- a/src/Orchard/Environment/State/ShellStateCoordinator.cs +++ b/src/Orchard/Environment/State/ShellStateCoordinator.cs @@ -171,7 +171,8 @@ namespace Orchard.Environment.State { } // raise install and enabled states in order - foreach (var entry in allEntries.Where(entry => IsRising(entry.FeatureState))) { + foreach (var entry in allEntries.Reverse().Where(entry => IsRising(entry.FeatureState))) + { if (entry.FeatureState.InstallState == ShellFeatureState.State.Rising) { Logger.Information("Installing feature '{0}'", entry.Feature.Descriptor.Id); _featureEvents.Installing(entry.Feature);