Adding migration of AutorouteSettings.DefaultPatternIndex to AutorouteSettings.DefaultPatternDefinitions

This commit is contained in:
Skrypt
2015-06-07 18:14:12 -04:00
parent a721352797
commit f8ab1c509e
2 changed files with 30 additions and 4 deletions

View File

@@ -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.Core.Contents.Extensions;
using Orchard.Data.Migration; using Orchard.Data.Migration;
using System.Collections.Generic;
namespace Orchard.Autoroute { namespace Orchard.Autoroute {
public class Migrations : DataMigrationImpl { 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() { public int Create() {
SchemaBuilder.CreateTable("AutoroutePartRecord", SchemaBuilder.CreateTable("AutoroutePartRecord",
table => table table => table
.ContentPartVersionRecord() .ContentPartVersionRecord()
.Column<string>("CustomPattern", c => c.WithLength(2048)) .Column<string>("CustomPattern", c => c.WithLength(2048))
.Column<bool>("UseCustomPattern", c=> c.WithDefault(false)) .Column<bool>("UseCustomPattern", c => c.WithDefault(false))
.Column<string>("DisplayAlias", c => c.WithLength(2048))); .Column<string>("DisplayAlias", c => c.WithLength(2048)));
ContentDefinitionManager.AlterPartDefinition("AutoroutePart", part => part ContentDefinitionManager.AlterPartDefinition("AutoroutePart", part => part
@@ -44,6 +59,15 @@ namespace Orchard.Autoroute {
.AddColumn<bool>("UseCulturePattern", c => c.WithDefault(false)) .AddColumn<bool>("UseCulturePattern", c => c.WithDefault(false))
); );
// populate the AutorouteSettings.DefaultPatternDefinitions AutoroutePart settings
foreach (var autoroutePart in _contentManager.Query<AutoroutePart, AutoroutePartRecord>().List()) {
var settings = autoroutePart.Settings.GetModel<AutorouteSettings>();
string patternIndex = autoroutePart.Settings["AutorouteSettings.DefaultPatternIndex"];
settings.DefaultPatterns = new List<DefaultPattern> { new DefaultPattern { PatternIndex = patternIndex, Culture = "" } };
ContentDefinitionManager.AlterTypeDefinition(autoroutePart.TypeDefinition.Name, builder => builder.WithPart("AutoroutePart", settings.Build));
}
return 4; return 4;
} }
} }

View File

@@ -140,8 +140,10 @@ namespace Orchard.Autoroute.Services {
var settings = GetTypePartSettings(contentType).GetModel<AutorouteSettings>(); var settings = GetTypePartSettings(contentType).GetModel<AutorouteSettings>();
// return a default pattern if set // return a default pattern if set
if (settings.Patterns.Any(x => x.Culture == culture)) { var patternCultureSearch = settings.Patterns.Any(x => x.Culture == culture) ? culture : null;
return settings.Patterns.Where(x => x.Culture == culture).ElementAt(Convert.ToInt32(settings.DefaultPatterns.Where(x => x.Culture == culture).FirstOrDefault().PatternIndex)); 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 // return a default pattern if none is defined