mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-21 03:14:10 +08:00
Implementation of the metadata handler for recipes.
Removing calls to the ContentDefinitionManager::AlterTypeDefinition from Setup. Updating recipe file. --HG-- branch : recipe
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -8,4 +8,21 @@
|
||||
<Tags></Tags>
|
||||
<Version>1.0</Version>
|
||||
</Recipe>
|
||||
|
||||
<Metadata>
|
||||
<Types>
|
||||
<Page ContentTypeSettings.Draftable="True" TypeIndexing.Included="true">
|
||||
<TagsPart />
|
||||
<LocalizationPart />
|
||||
</Page>
|
||||
<BlogPost ContentTypeSettings.Draftable="True" TypeIndexing.Included="true">
|
||||
<CommentsPart />
|
||||
<TagsPart />
|
||||
<LocalizationPart />
|
||||
</BlogPost>
|
||||
</Types>
|
||||
<Parts>
|
||||
<BodyPart BodyPartSettings.FlavorDefault="html" />
|
||||
</Parts>
|
||||
</Metadata>
|
||||
</Orchard>
|
||||
|
@@ -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<IHackInstallationGenerator>();
|
||||
//hackInstallationGenerator.GenerateInstallEvents();
|
||||
|
||||
var contentDefinitionManager = environment.Resolve<IContentDefinitionManager>();
|
||||
//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<IRecipeManager>();
|
||||
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<IExtensionManager>();
|
||||
@@ -344,11 +327,6 @@ Modules are created by other users of Orchard just like you so if you feel up to
|
||||
menuItem.As<MenuPart>().OnMainMenu = true;
|
||||
menuItem.As<MenuItemPart>().Url = "";
|
||||
|
||||
var recipeManager = environment.Resolve<IRecipeManager>();
|
||||
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);
|
||||
|
Reference in New Issue
Block a user