mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Merge pull request #5720 from jtkech/patch-4
#5715: Feature key checking in CompositionStrategy
This commit is contained in:
@@ -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 {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user