Autoroute migrations: Consolidate UpdateFrom4 changes into Create (#8217), fixes #8198

Lombiq Technologies: ORCH-196
This commit is contained in:
eszterkoczak
2019-05-26 13:53:07 +02:00
committed by Benedek Farkas
parent 26e7a4d251
commit cfa335a8cf

View File

@@ -17,8 +17,7 @@ namespace Orchard.Autoroute {
}
public int Create() {
SchemaBuilder.CreateTable("AutoroutePartRecord",
table => table
SchemaBuilder.CreateTable("AutoroutePartRecord", table => table
.ContentPartVersionRecord()
.Column<string>("CustomPattern", c => c.WithLength(2048))
.Column<bool>("UseCustomPattern", c => c.WithDefault(false))
@@ -30,75 +29,75 @@ namespace Orchard.Autoroute {
.WithDescription("Adds advanced url configuration options to your content type to completely customize the url pattern for a content item."));
SchemaBuilder.AlterTable("AutoroutePartRecord", table => table
.CreateIndex("IDX_AutoroutePartRecord_DisplayAlias", "DisplayAlias")
);
.CreateIndex("IDX_AutoroutePartRecord_DisplayAlias", "DisplayAlias"));
return 4;
CreateCulturePatterns();
return 5;
}
public int UpdateFrom1() {
ContentDefinitionManager.AlterPartDefinition("AutoroutePart", part => part
.WithDescription("Adds advanced url configuration options to your content type to completely customize the url pattern for a content item."));
return 2;
}
public int UpdateFrom2() {
SchemaBuilder.AlterTable("AutoroutePartRecord", table => table
.CreateIndex("IDX_AutoroutePartRecord_DisplayAlias", "DisplayAlias")
);
.CreateIndex("IDX_AutoroutePartRecord_DisplayAlias", "DisplayAlias"));
return 3;
}
public int UpdateFrom3() {
SchemaBuilder.AlterTable("AutoroutePartRecord", table => table
.AddColumn<bool>("UseCulturePattern", c => c.WithDefault(false))
);
.AddColumn<bool>("UseCulturePattern", c => c.WithDefault(false)));
return 4;
}
public int UpdateFrom4() {
// Adding some culture neutral patterns if they don't exist
var autoroutePartDefinitions = ContentDefinitionManager.ListTypeDefinitions()
.Where(t => t.Parts.Any(p => p.PartDefinition.Name.Equals(typeof(AutoroutePart).Name)))
.Select(s => new { contentTypeName = s.Name, autoroutePart = s.Parts.First(x => x.PartDefinition.Name == "AutoroutePart") });
foreach (var partDefinition in autoroutePartDefinitions) {
var settingsDictionary = partDefinition.autoroutePart.Settings;
var settings = settingsDictionary.GetModel<AutorouteSettings>();
if (!settings.Patterns.Any(x => String.IsNullOrWhiteSpace(x.Culture))) {
string siteCulture = _cultureManager.GetSiteCulture();
List<string> newPatterns = new List<string>();
if (settings.Patterns.Any(x => String.Equals(x.Culture, siteCulture, StringComparison.OrdinalIgnoreCase))) {
var siteCulturePatterns = settings.Patterns.Where(x => String.Equals(x.Culture, siteCulture, StringComparison.OrdinalIgnoreCase)).ToList();
foreach (RoutePattern pattern in siteCulturePatterns) {
newPatterns.Add(String.Format("{{\"Name\":\"{0}\",\"Pattern\":\"{1}\",\"Description\":\"{2}\"}}", pattern.Name, pattern.Pattern, pattern.Description));
}
}
else {
newPatterns.Add(String.Format("{{\"Name\":\"{0}\",\"Pattern\":\"{1}\",\"Description\":\"{2}\"}}", "Title", "{Content.Slug}", "my-title"));
}
if (settingsDictionary.ContainsKey("AutorouteSettings.PatternDefinitions")) {
string oldPatterns = settingsDictionary["AutorouteSettings.PatternDefinitions"];
if (oldPatterns.StartsWith("[") && oldPatterns.EndsWith("]"))
newPatterns.Add(oldPatterns.Substring(1, oldPatterns.Length - 2));
}
ContentDefinitionManager.AlterTypeDefinition(partDefinition.contentTypeName, cfg => cfg
.WithPart("AutoroutePart", builder => builder
.WithSetting("AutorouteSettings.PatternDefinitions", "[" + String.Join(",", newPatterns) + "]")
));
}
}
CreateCulturePatterns();
return 5;
}
private void CreateCulturePatterns() {
var autoroutePartDefinitions = ContentDefinitionManager.ListTypeDefinitions()
.Where(type => type.Parts.Any(p => p.PartDefinition.Name == nameof(AutoroutePart)))
.Select(type => new { ContentTypeName = type.Name, AutoroutePart = type.Parts.First(x => x.PartDefinition.Name == nameof(AutoroutePart)) });
foreach (var partDefinition in autoroutePartDefinitions) {
var settingsDictionary = partDefinition.AutoroutePart.Settings;
var settings = settingsDictionary.GetModel<AutorouteSettings>();
if (!settings.Patterns.Any(pattern => string.IsNullOrWhiteSpace(pattern.Culture))) {
var siteCulture = _cultureManager.GetSiteCulture();
List<string> newPatterns = new List<string>();
var siteCulturePatterns = settings.Patterns
.Where(pattern => string.Equals(pattern.Culture, siteCulture, StringComparison.OrdinalIgnoreCase)).ToList();
if (siteCulturePatterns.Any()) {
foreach (RoutePattern pattern in siteCulturePatterns) {
newPatterns.Add($"{{\"Name\":\"{pattern.Name}\",\"Pattern\":\"{pattern.Pattern}\",\"Description\":\"{pattern.Description}\"}}");
}
}
else {
newPatterns.Add("{{\"Name\":\"Title\",\"Pattern\":\"{Content.Slug}\",\"Description\":\"my-title\"}}");
}
if (settingsDictionary.TryGetValue("AutorouteSettings.PatternDefinitions", out var oldPatterns) &&
oldPatterns.StartsWith("[") && oldPatterns.EndsWith("]")) {
newPatterns.Add(oldPatterns.Substring(1, oldPatterns.Length - 2));
}
ContentDefinitionManager.AlterTypeDefinition(partDefinition.ContentTypeName, type => type
.WithPart(nameof(AutoroutePart), builder => builder
.WithSetting("AutorouteSettings.PatternDefinitions", "[" + string.Join(",", newPatterns) + "]")));
}
}
}
}
}