mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-20 02:37:55 +08:00
Lombiq Technologies: ORCH-196
This commit is contained in:

committed by
Benedek Farkas

parent
26e7a4d251
commit
cfa335a8cf
@@ -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) + "]")));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user