Merge pull request #5720 from jtkech/patch-4

#5715: Feature key checking in CompositionStrategy
This commit is contained in:
Sébastien Ros
2015-08-28 15:42:45 -07:00

View File

@@ -12,6 +12,7 @@ using Orchard.Environment.Extensions;
using Orchard.Environment.Extensions.Helpers; using Orchard.Environment.Extensions.Helpers;
using Orchard.Environment.Extensions.Models; using Orchard.Environment.Extensions.Models;
using Orchard.Environment.ShellBuilders.Models; using Orchard.Environment.ShellBuilders.Models;
using Orchard.Localization;
using Orchard.Logging; using Orchard.Logging;
namespace Orchard.Environment.ShellBuilders { namespace Orchard.Environment.ShellBuilders {
@@ -22,16 +23,18 @@ namespace Orchard.Environment.ShellBuilders {
_extensionManager = extensionManager; _extensionManager = extensionManager;
Logger = NullLogger.Instance; Logger = NullLogger.Instance;
T = NullLocalizer.Instance;
} }
public ILogger Logger { get; set; } public ILogger Logger { get; set; }
public Localizer T { get; set; }
public ShellBlueprint Compose(ShellSettings settings, ShellDescriptor descriptor) { public ShellBlueprint Compose(ShellSettings settings, ShellDescriptor descriptor) {
Logger.Debug("Composing blueprint"); Logger.Debug("Composing blueprint");
var builtinFeatures = BuiltinFeatures().ToList(); var builtinFeatures = BuiltinFeatures().ToList();
var builtinFeatureDescriptors = builtinFeatures.Select(x => x.Descriptor).ToList(); var builtinFeatureDescriptors = builtinFeatures.Select(x => x.Descriptor).ToList();
var availableFeatures = _extensionManager.AvailableFeatures().Concat(builtinFeatureDescriptors).ToDictionary(x => x.Id); var availableFeatures = _extensionManager.AvailableFeatures().Concat(builtinFeatureDescriptors).ToDictionary(x => x.Id, StringComparer.OrdinalIgnoreCase);
var enabledFeatures = _extensionManager.EnabledFeatures(descriptor).Select(x => x.Id).ToList(); var enabledFeatures = _extensionManager.EnabledFeatures(descriptor).Select(x => x.Id).ToList();
var expandedFeatures = ExpandDependencies(availableFeatures, descriptor.Features.Select(x => x.Name)).ToList(); var expandedFeatures = ExpandDependencies(availableFeatures, descriptor.Features.Select(x => x.Name)).ToList();
var autoEnabledDependencyFeatures = expandedFeatures.Except(enabledFeatures).Except(builtinFeatureDescriptors.Select(x => x.Id)).ToList(); var autoEnabledDependencyFeatures = expandedFeatures.Except(enabledFeatures).Except(builtinFeatureDescriptors.Select(x => x.Id)).ToList();
@@ -74,6 +77,11 @@ namespace Orchard.Environment.ShellBuilders {
private IEnumerable<string> ExpandDependenciesInternal(IDictionary<string, FeatureDescriptor> availableFeatures, IEnumerable<string> features) { private IEnumerable<string> ExpandDependenciesInternal(IDictionary<string, FeatureDescriptor> availableFeatures, IEnumerable<string> features) {
foreach (var shellFeature in features) { foreach (var shellFeature in features) {
if (!availableFeatures.ContainsKey(shellFeature)) {
throw new OrchardException(T("The feature {0} is not available", shellFeature));
}
var feature = availableFeatures[shellFeature]; var feature = availableFeatures[shellFeature];
foreach (var childDependency in ExpandDependenciesInternal(availableFeatures, feature.Dependencies)) foreach (var childDependency in ExpandDependenciesInternal(availableFeatures, feature.Dependencies))
@@ -199,4 +207,4 @@ namespace Orchard.Environment.ShellBuilders {
}; };
} }
} }
} }