From f8ab1c509ec797d5ce30ae356f9e396b42d63f08 Mon Sep 17 00:00:00 2001 From: Skrypt Date: Sun, 7 Jun 2015 18:14:12 -0400 Subject: [PATCH] Adding migration of AutorouteSettings.DefaultPatternIndex to AutorouteSettings.DefaultPatternDefinitions --- .../Modules/Orchard.Autoroute/Migrations.cs | 28 +++++++++++++++++-- .../Services/AutorouteService.cs | 6 ++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Migrations.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Migrations.cs index e702aefd1..ada4364bd 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Migrations.cs @@ -1,15 +1,30 @@ -using Orchard.ContentManagement.MetaData; +using Orchard.Autoroute.Models; +using Orchard.Autoroute.Services; +using Orchard.Autoroute.Settings; +using Orchard.ContentManagement; +using Orchard.ContentManagement.MetaData; using Orchard.Core.Contents.Extensions; using Orchard.Data.Migration; +using System.Collections.Generic; namespace Orchard.Autoroute { public class Migrations : DataMigrationImpl { + private readonly IAutorouteService _autorouteService; + private readonly IContentManager _contentManager; + + public Migrations( + IAutorouteService autorouteService, + IContentManager contentManager) { + _autorouteService = autorouteService; + _contentManager = contentManager; + } + public int Create() { SchemaBuilder.CreateTable("AutoroutePartRecord", table => table .ContentPartVersionRecord() .Column("CustomPattern", c => c.WithLength(2048)) - .Column("UseCustomPattern", c=> c.WithDefault(false)) + .Column("UseCustomPattern", c => c.WithDefault(false)) .Column("DisplayAlias", c => c.WithLength(2048))); ContentDefinitionManager.AlterPartDefinition("AutoroutePart", part => part @@ -44,6 +59,15 @@ namespace Orchard.Autoroute { .AddColumn("UseCulturePattern", c => c.WithDefault(false)) ); + // populate the AutorouteSettings.DefaultPatternDefinitions AutoroutePart settings + foreach (var autoroutePart in _contentManager.Query().List()) { + var settings = autoroutePart.Settings.GetModel(); + string patternIndex = autoroutePart.Settings["AutorouteSettings.DefaultPatternIndex"]; + settings.DefaultPatterns = new List { new DefaultPattern { PatternIndex = patternIndex, Culture = "" } }; + + ContentDefinitionManager.AlterTypeDefinition(autoroutePart.TypeDefinition.Name, builder => builder.WithPart("AutoroutePart", settings.Build)); + } + return 4; } } diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs index 7d4da146e..9e7fcef8b 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs @@ -140,8 +140,10 @@ namespace Orchard.Autoroute.Services { var settings = GetTypePartSettings(contentType).GetModel(); // return a default pattern if set - if (settings.Patterns.Any(x => x.Culture == culture)) { - return settings.Patterns.Where(x => x.Culture == culture).ElementAt(Convert.ToInt32(settings.DefaultPatterns.Where(x => x.Culture == culture).FirstOrDefault().PatternIndex)); + var patternCultureSearch = settings.Patterns.Any(x => x.Culture == culture) ? culture : null; + var defaultPatternCultureSearch = settings.DefaultPatterns.Any(x => x.Culture == culture) ? culture : ""; + if (settings.Patterns.Where(x => x.Culture == patternCultureSearch).ElementAt(Convert.ToInt32(settings.DefaultPatterns.Where(x => x.Culture == defaultPatternCultureSearch).FirstOrDefault().PatternIndex)) != null) { + return settings.Patterns.Where(x => x.Culture == patternCultureSearch).ElementAt(Convert.ToInt32(settings.DefaultPatterns.Where(x => x.Culture == defaultPatternCultureSearch).FirstOrDefault().PatternIndex)); } // return a default pattern if none is defined