From 36d37b859e1dd34a6f865fecc19e2df7e3bd5e15 Mon Sep 17 00:00:00 2001 From: Suha Can Date: Thu, 17 Feb 2011 11:21:46 -0800 Subject: [PATCH] Implementation of the metadata handler for recipes. Removing calls to the ContentDefinitionManager::AlterTypeDefinition from Setup. Updating recipe file. --HG-- branch : recipe --- .../RecipeHandlers/MetaDataRecipeHandler.cs | 27 +++++++++++++---- .../Orchard.Setup/Recipes/blog.recipe.xml | 17 +++++++++++ .../Orchard.Setup/Services/SetupService.cs | 30 +++---------------- 3 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/MetaDataRecipeHandler.cs b/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/MetaDataRecipeHandler.cs index ec48b039b..1dcf5ca99 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/MetaDataRecipeHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/MetaDataRecipeHandler.cs @@ -1,4 +1,6 @@ using System; +using System.Xml; +using Orchard.ContentManagement.MetaData; using Orchard.Localization; using Orchard.Logging; using Orchard.Recipes.Models; @@ -6,7 +8,12 @@ using Orchard.Recipes.Services; namespace Orchard.Recipes.RecipeHandlers { public class MetadataRecipeHandler : IRecipeHandler { - public MetadataRecipeHandler() { + private readonly IContentDefinitionManager _contentDefinitionManager; + private readonly IContentDefinitionReader _contentDefinitionReader; + + public MetadataRecipeHandler(IContentDefinitionManager contentDefinitionManager, IContentDefinitionReader contentDefinitionReader) { + _contentDefinitionManager = contentDefinitionManager; + _contentDefinitionReader = contentDefinitionReader; Logger = NullLogger.Instance; T = NullLocalizer.Instance; } @@ -32,21 +39,29 @@ namespace Orchard.Recipes.RecipeHandlers { return; } - foreach (var element in recipeContext.RecipeStep.Step.Elements()) { - switch (element.Name.LocalName) { + foreach (var metadataElement in recipeContext.RecipeStep.Step.Elements()) { + switch (metadataElement.Name.LocalName) { case "Types": - // alter type's definition. + foreach (var element in metadataElement.Elements()) { + var typeElement = element; + var typeName = XmlConvert.DecodeName(element.Name.LocalName); + _contentDefinitionManager.AlterTypeDefinition(typeName, alteration => _contentDefinitionReader.Merge(typeElement, alteration)); + } break; case "Parts": // create dynamic part. + foreach (var element in metadataElement.Elements()) { + var partElement = element; + var partName = XmlConvert.DecodeName(element.Name.LocalName); + _contentDefinitionManager.AlterPartDefinition(partName, alteration => _contentDefinitionReader.Merge(partElement, alteration)); + } break; default: - Logger.Error("Unrecognized element {0} encountered in step Metadata. Skipping.", element.Name.LocalName); + Logger.Error("Unrecognized element {0} encountered in step Metadata. Skipping.", metadataElement.Name.LocalName); break; } } - // alter definitions. recipeContext.Executed = true; } } diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Recipes/blog.recipe.xml b/src/Orchard.Web/Modules/Orchard.Setup/Recipes/blog.recipe.xml index d43197008..5dc5db4aa 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Recipes/blog.recipe.xml +++ b/src/Orchard.Web/Modules/Orchard.Setup/Recipes/blog.recipe.xml @@ -8,4 +8,21 @@ 1.0 + + + + + + + + + + + + + + + + + diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs index d9a3eddd4..be08206c2 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs @@ -4,10 +4,7 @@ using System.Linq; using System.Security.Cryptography; using System.Web; using Orchard.ContentManagement; -using Orchard.ContentManagement.MetaData; using Orchard.Core.Common.Models; -using Orchard.Core.Common.Settings; -using Orchard.Core.Contents.Extensions; using Orchard.Core.Navigation.Models; using Orchard.Core.Routable.Models; using Orchard.Core.Settings.Descriptor.Records; @@ -21,7 +18,6 @@ using Orchard.Environment.Extensions; using Orchard.Environment.ShellBuilders; using Orchard.Environment.Descriptor; using Orchard.Environment.Descriptor.Models; -using Orchard.Indexing; using Orchard.Localization; using Orchard.Localization.Services; using Orchard.Recipes.Models; @@ -251,23 +247,10 @@ namespace Orchard.Setup.Services { //var hackInstallationGenerator = environment.Resolve(); //hackInstallationGenerator.GenerateInstallEvents(); - var contentDefinitionManager = environment.Resolve(); - //todo: (heskew) pull these definitions (and initial content creation) out into a distribution configuration when we have that capability - contentDefinitionManager.AlterTypeDefinition("BlogPost", cfg => cfg - .WithPart("CommentsPart") - .WithPart("TagsPart") - .WithPart("LocalizationPart") - .Draftable() - .Indexed() - ); - contentDefinitionManager.AlterTypeDefinition("Page", cfg => cfg - .WithPart("TagsPart") - .WithPart("LocalizationPart") - .Draftable() - .Indexed() - ); - contentDefinitionManager.AlterPartDefinition("BodyPart", cfg => cfg - .WithSetting("BodyPartSettings.FlavorDefault", BodyPartSettings.FlavorDefaultDefault)); + var recipeManager = environment.Resolve(); + if (context.Recipe != null) { + recipeManager.Execute(Recipes().Where(r => r.Name == context.Recipe).FirstOrDefault()); + } // If "Orchard.Widgets" is enabled, setup default layers and widgets var extensionManager = environment.Resolve(); @@ -344,11 +327,6 @@ Modules are created by other users of Orchard just like you so if you feel up to menuItem.As().OnMainMenu = true; menuItem.As().Url = ""; - var recipeManager = environment.Resolve(); - if (context.Recipe != null) { - recipeManager.Execute(Recipes().Where(r => r.Name == context.Recipe).FirstOrDefault()); - } - //null check: temporary fix for running setup in command line if (HttpContext.Current != null) { authenticationService.SignIn(user, true);