diff --git a/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs b/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs index 6e172f92c..694308567 100644 --- a/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs +++ b/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs @@ -21,6 +21,7 @@ using Orchard.Mvc.Routes; using Orchard.Extensions; using Orchard.Tests.Environment.TestDependencies; using Orchard.Tests.Stubs; +using Orchard.Extensions.Models; namespace Orchard.Tests.Environment { [TestFixture] @@ -91,7 +92,7 @@ namespace Orchard.Tests.Environment { throw new NotImplementedException(); } - public IEnumerable LoadFeature(string featureName) { + public Feature LoadFeature(string featureName) { throw new NotImplementedException(); } diff --git a/src/Orchard.Tests/Environment/ShellBuilders/DefaultShellContainerFactoryTests.cs b/src/Orchard.Tests/Environment/ShellBuilders/DefaultShellContainerFactoryTests.cs index 4ba58cf65..930963c97 100644 --- a/src/Orchard.Tests/Environment/ShellBuilders/DefaultShellContainerFactoryTests.cs +++ b/src/Orchard.Tests/Environment/ShellBuilders/DefaultShellContainerFactoryTests.cs @@ -15,6 +15,7 @@ using Orchard.Environment.Configuration; using Orchard.Environment.ShellBuilders; using Orchard.Environment.Topology.Models; using Orchard.Extensions; +using Orchard.Extensions.Models; namespace Orchard.Tests.Environment.ShellBuilders { [TestFixture] diff --git a/src/Orchard.Tests/Extensions/ExtensionManagerTests.cs b/src/Orchard.Tests/Extensions/ExtensionManagerTests.cs index c323d38a1..fba445106 100644 --- a/src/Orchard.Tests/Extensions/ExtensionManagerTests.cs +++ b/src/Orchard.Tests/Extensions/ExtensionManagerTests.cs @@ -8,6 +8,7 @@ using Orchard.Extensions.Loaders; using Orchard.Extensions.Models; using Orchard.Tests.Extensions.ExtensionTypes; using Yaml.Grammar; +using Orchard.Extensions.Models; namespace Orchard.Tests.Extensions { [TestFixture] @@ -253,7 +254,7 @@ features: ExtensionManager extensionManager = new ExtensionManager(new []{extensionFolder}, new [] {extensionLoader}); - foreach (var type in extensionManager.LoadFeature("TestFeature")) { + foreach (var type in extensionManager.LoadFeature("TestFeature").Types) { Assert.That(type == typeof(Phi)); } } @@ -276,7 +277,7 @@ features: ExtensionManager extensionManager = new ExtensionManager(new[] { extensionFolder }, new[] { extensionLoader }); - foreach (var type in extensionManager.LoadFeature("TestModule")) { + foreach (var type in extensionManager.LoadFeature("TestModule").Types) { Assert.That(type != typeof(Phi)); Assert.That((type == typeof(Alpha) || (type == typeof(Beta)))); } diff --git a/src/Orchard.Tests/Mvc/Routes/StandardExtensionRouteProviderTests.cs b/src/Orchard.Tests/Mvc/Routes/StandardExtensionRouteProviderTests.cs index 8d7d28883..035ac17ae 100644 --- a/src/Orchard.Tests/Mvc/Routes/StandardExtensionRouteProviderTests.cs +++ b/src/Orchard.Tests/Mvc/Routes/StandardExtensionRouteProviderTests.cs @@ -7,6 +7,7 @@ using NUnit.Framework; using Orchard.Extensions.Models; using Orchard.Mvc.Routes; using Orchard.Extensions; +using Orchard.Extensions.Models; namespace Orchard.Tests.Mvc.Routes { [TestFixture] @@ -63,7 +64,7 @@ namespace Orchard.Tests.Mvc.Routes { throw new NotImplementedException(); } - public IEnumerable LoadFeature(string featureName) { + public Feature LoadFeature(string featureName) { throw new NotImplementedException(); } diff --git a/src/Orchard/Extensions/ExtensionDescriptor.cs b/src/Orchard/Extensions/ExtensionDescriptor.cs new file mode 100644 index 000000000..7c5988498 --- /dev/null +++ b/src/Orchard/Extensions/ExtensionDescriptor.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using Orchard.Extensions.Models; + +namespace Orchard.Extensions { + public class ExtensionDescriptor { + /// + /// Virtual path base, "~/Themes", "~/Modules", or "~/Core" + /// + public string Location { get; set; } + + /// + /// Folder name under virtual path base + /// + public string Name { get; set; } + + /// + /// "Theme" or "Module" + /// + public string ExtensionType { get; set; } + + // extension metadata + public string DisplayName { get; set; } + public string Description { get; set; } + public string Version { get; set; } + public string OrchardVersion { get; set; } + public string Author { get; set; } + public string WebSite { get; set; } + public string Tags { get; set; } + public string AntiForgery { get; set; } + + public IEnumerable Features { get; set; } + } +} diff --git a/src/Orchard/Extensions/ExtensionManager.cs b/src/Orchard/Extensions/ExtensionManager.cs index 06189723e..653dec30c 100644 --- a/src/Orchard/Extensions/ExtensionManager.cs +++ b/src/Orchard/Extensions/ExtensionManager.cs @@ -115,7 +115,7 @@ namespace Orchard.Extensions { return new ShellTopology_Obsolete { Types = types.Where(t => t.IsClass && !t.IsAbstract) }; } - public IEnumerable LoadFeature(string featureName) { + public Feature LoadFeature(string featureName) { string extensionName = GetExtensionForFeature(featureName); if (extensionName == null) throw new ArgumentException(T("Feature ") + featureName + T(" was not found in any of the installed extensions")); var extension = ActiveExtensions().Where(x => x.Descriptor.Name == extensionName).FirstOrDefault(); @@ -131,7 +131,11 @@ namespace Orchard.Extensions { } } - return featureTypes; + return new Feature { + ExtensionName = extensionName, + Name = featureName, + Types = featureTypes + }; } private static string GetSourceFeatureNameForType(Type type, string extensionName) { diff --git a/src/Orchard/Extensions/IExtensionManager.cs b/src/Orchard/Extensions/IExtensionManager.cs index 707d4457d..3e9b79077 100644 --- a/src/Orchard/Extensions/IExtensionManager.cs +++ b/src/Orchard/Extensions/IExtensionManager.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Web; using Orchard.Extensions.Models; @@ -11,7 +10,7 @@ namespace Orchard.Extensions { IEnumerable ActiveExtensions(); ShellTopology_Obsolete GetExtensionsTopology(); - + Feature LoadFeature(string featureName); void InstallExtension(string extensionType, HttpPostedFileBase extensionBundle); void UninstallExtension(string extensionType, string extensionName); } diff --git a/src/Orchard/Extensions/Models/Feature.cs b/src/Orchard/Extensions/Models/Feature.cs index feb996dd6..f4f384582 100644 --- a/src/Orchard/Extensions/Models/Feature.cs +++ b/src/Orchard/Extensions/Models/Feature.cs @@ -3,6 +3,9 @@ using System.Collections.Generic; namespace Orchard.Extensions.Models { public class Feature { + public string ExtensionName { get; set; } + public string Name { get; set; } + public IEnumerable Types { get; set; } public FeatureDescriptor FeatureDescriptor { get; set; } public Extension Extension { get; set; } public IEnumerable ExportedTypes { get; set; } diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index ffc8143d4..9d0c506e3 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -193,6 +193,7 @@ +