mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-20 18:57:56 +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() {
|
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))
|
||||||
@@ -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."));
|
.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
|
SchemaBuilder.AlterTable("AutoroutePartRecord", table => table
|
||||||
.CreateIndex("IDX_AutoroutePartRecord_DisplayAlias", "DisplayAlias")
|
.CreateIndex("IDX_AutoroutePartRecord_DisplayAlias", "DisplayAlias"));
|
||||||
);
|
|
||||||
|
|
||||||
return 4;
|
CreateCulturePatterns();
|
||||||
|
|
||||||
|
return 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int UpdateFrom1() {
|
public int UpdateFrom1() {
|
||||||
ContentDefinitionManager.AlterPartDefinition("AutoroutePart", part => part
|
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."));
|
.WithDescription("Adds advanced url configuration options to your content type to completely customize the url pattern for a content item."));
|
||||||
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int UpdateFrom2() {
|
public int UpdateFrom2() {
|
||||||
|
|
||||||
SchemaBuilder.AlterTable("AutoroutePartRecord", table => table
|
SchemaBuilder.AlterTable("AutoroutePartRecord", table => table
|
||||||
.CreateIndex("IDX_AutoroutePartRecord_DisplayAlias", "DisplayAlias")
|
.CreateIndex("IDX_AutoroutePartRecord_DisplayAlias", "DisplayAlias"));
|
||||||
);
|
|
||||||
|
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int UpdateFrom3() {
|
public int UpdateFrom3() {
|
||||||
|
|
||||||
SchemaBuilder.AlterTable("AutoroutePartRecord", table => table
|
SchemaBuilder.AlterTable("AutoroutePartRecord", table => table
|
||||||
.AddColumn<bool>("UseCulturePattern", c => c.WithDefault(false))
|
.AddColumn<bool>("UseCulturePattern", c => c.WithDefault(false)));
|
||||||
);
|
|
||||||
|
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int UpdateFrom4() {
|
public int UpdateFrom4() {
|
||||||
// Adding some culture neutral patterns if they don't exist
|
CreateCulturePatterns();
|
||||||
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) + "]")
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 5;
|
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