From 23f3f29a4784c20105a6a840bf6c6650cb6fae69 Mon Sep 17 00:00:00 2001 From: Skrypt Date: Sun, 7 Jun 2015 21:12:11 -0400 Subject: [PATCH] Creating Patterns and Default Patterns for each culture installed when attaching an AutoroutePart to a Content Type. Related to issue #5195 --- .../Orchard.Autoroute.csproj | 5 + .../ContentDefinitionEventHandler.cs | 104 ++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 src/Orchard.Web/Modules/Orchard.Autoroute/Providers/ContentDefinition/ContentDefinitionEventHandler.cs diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Orchard.Autoroute.csproj b/src/Orchard.Web/Modules/Orchard.Autoroute/Orchard.Autoroute.csproj index d43de044a..765729df5 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Orchard.Autoroute.csproj +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Orchard.Autoroute.csproj @@ -95,6 +95,10 @@ {475B6C45-B27C-438B-8966-908B9D6D1077} Orchard.Alias + + {0e7646e8-fe8f-43c1-8799-d97860925ec4} + Orchard.ContentTypes + {6F759635-13D7-4E94-BCC9-80445D63F117} Orchard.Tokens @@ -102,6 +106,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Providers/ContentDefinition/ContentDefinitionEventHandler.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Providers/ContentDefinition/ContentDefinitionEventHandler.cs new file mode 100644 index 000000000..15234b71c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Providers/ContentDefinition/ContentDefinitionEventHandler.cs @@ -0,0 +1,104 @@ +using Orchard.Autoroute.Models; +using Orchard.Autoroute.Services; +using Orchard.Autoroute.Settings; +using Orchard.ContentManagement; +using Orchard.ContentManagement.MetaData; +using Orchard.ContentTypes.Events; +using Orchard.Localization.Services; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Orchard.Autoroute.Providers.ContentDefinition { + public class ContentDefinitionEventHandler : IContentDefinitionEventHandler { + private readonly ICultureManager _cultureManager; + private readonly IContentDefinitionManager _contentDefinitionManager; + private readonly IOrchardServices _orchardServices; + private readonly Lazy _autorouteService; + private readonly IContentManager _contentManager; + + public ContentDefinitionEventHandler( + IContentManager contentManager, + Lazy autorouteService, + IOrchardServices orchardServices, + IContentDefinitionManager contentDefinitionManager, + ICultureManager cultureManager) { + _cultureManager = cultureManager; + _contentDefinitionManager = contentDefinitionManager; + _orchardServices = orchardServices; + _autorouteService = autorouteService; + _contentManager = contentManager; + } + + public void ContentTypeCreated(ContentTypeCreatedContext context) { + } + + public void ContentTypeRemoved(ContentTypeRemovedContext context) { + } + + public void ContentTypeImporting(ContentTypeImportingContext context) { + } + + public void ContentTypeImported(ContentTypeImportedContext context) { + } + + public void ContentPartCreated(ContentPartCreatedContext context) { + } + + public void ContentPartRemoved(ContentPartRemovedContext context) { + } + + public void ContentPartAttached(ContentPartAttachedContext context) { + if (context.ContentPartName == "AutoroutePart") { + //Create pattern and default pattern for each culture installed + + //get cultures + var SiteCultures = _cultureManager.ListCultures().ToList(); + + //Create Patterns and DefaultPatterns + var settings = new AutorouteSettings { + Patterns = new List() + }; + + List newPatterns = new List(); + List newDefaultPatterns = new List(); + foreach (string culture in SiteCultures) { + newPatterns.Add(new RoutePattern { + Name = "Title", + Description = "my-title", + Pattern = "{Content.Slug}", + Culture = culture + }); + newDefaultPatterns.Add(new DefaultPattern { + Culture = culture, + PatternIndex = "0" + }); + } + + settings.Patterns = newPatterns; + settings.DefaultPatterns = newDefaultPatterns; + + //Update Settings + _contentDefinitionManager.AlterTypeDefinition(context.ContentTypeName, builder => builder.WithPart("AutoroutePart", settings.Build)); + + //TODO Generate URL's for existing content items + } + } + + public void ContentPartDetached(ContentPartDetachedContext context) { + } + + public void ContentPartImporting(ContentPartImportingContext context) { + } + + public void ContentPartImported(ContentPartImportedContext context) { + } + + public void ContentFieldAttached(ContentFieldAttachedContext context) { + } + + public void ContentFieldDetached(ContentFieldDetachedContext context) { + } + + } +} \ No newline at end of file