mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
[Fixes ##7430] Added support for culture neutral patterns (#7449)
Fixes ##7430
This commit is contained in:
committed by
Sébastien Ros
parent
a7f51c13d4
commit
6f3193e52b
@@ -1,10 +1,20 @@
|
|||||||
using Orchard.ContentManagement.MetaData;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Orchard.Autoroute.Models;
|
||||||
|
using Orchard.Autoroute.Settings;
|
||||||
|
using Orchard.ContentManagement.MetaData;
|
||||||
using Orchard.Core.Contents.Extensions;
|
using Orchard.Core.Contents.Extensions;
|
||||||
using Orchard.Data.Migration;
|
using Orchard.Data.Migration;
|
||||||
|
using Orchard.Localization.Services;
|
||||||
|
|
||||||
namespace Orchard.Autoroute
|
namespace Orchard.Autoroute {
|
||||||
{
|
|
||||||
public class Migrations : DataMigrationImpl {
|
public class Migrations : DataMigrationImpl {
|
||||||
|
private readonly ICultureManager _cultureManager;
|
||||||
|
|
||||||
|
public Migrations(ICultureManager cultureManager) {
|
||||||
|
_cultureManager = cultureManager;
|
||||||
|
}
|
||||||
|
|
||||||
public int Create() {
|
public int Create() {
|
||||||
SchemaBuilder.CreateTable("AutoroutePartRecord",
|
SchemaBuilder.CreateTable("AutoroutePartRecord",
|
||||||
@@ -49,5 +59,46 @@ namespace Orchard.Autoroute
|
|||||||
|
|
||||||
return 4;
|
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) + "]")
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -50,19 +50,24 @@ namespace Orchard.Autoroute.Providers.ContentDefinition {
|
|||||||
|
|
||||||
public void ContentPartAttached(ContentPartAttachedContext context) {
|
public void ContentPartAttached(ContentPartAttachedContext context) {
|
||||||
if (context.ContentPartName == "AutoroutePart") {
|
if (context.ContentPartName == "AutoroutePart") {
|
||||||
//Create pattern and default pattern for each culture installed
|
// Create pattern and default pattern for each culture installed and for the neutral culture
|
||||||
|
|
||||||
//get cultures
|
// Get cultures
|
||||||
var SiteCultures = _cultureManager.ListCultures().ToList();
|
var SiteCultures = _cultureManager.ListCultures().ToList();
|
||||||
|
|
||||||
//Create Patterns and DefaultPatterns
|
// Adding a null culture for the culture neutral pattern
|
||||||
|
List<string> cultures = new List<string>();
|
||||||
|
cultures.Add(null);
|
||||||
|
cultures.AddRange(SiteCultures);
|
||||||
|
|
||||||
|
// Create Patterns and DefaultPatterns
|
||||||
var settings = new AutorouteSettings {
|
var settings = new AutorouteSettings {
|
||||||
Patterns = new List<RoutePattern>()
|
Patterns = new List<RoutePattern>()
|
||||||
};
|
};
|
||||||
|
|
||||||
List<RoutePattern> newPatterns = new List<RoutePattern>();
|
List<RoutePattern> newPatterns = new List<RoutePattern>();
|
||||||
List<DefaultPattern> newDefaultPatterns = new List<DefaultPattern>();
|
List<DefaultPattern> newDefaultPatterns = new List<DefaultPattern>();
|
||||||
foreach (string culture in SiteCultures) {
|
foreach (string culture in cultures) {
|
||||||
newPatterns.Add(new RoutePattern {
|
newPatterns.Add(new RoutePattern {
|
||||||
Name = "Title",
|
Name = "Title",
|
||||||
Description = "my-title",
|
Description = "my-title",
|
||||||
|
|||||||
@@ -135,35 +135,47 @@ namespace Orchard.Autoroute.Services {
|
|||||||
|
|
||||||
public RoutePattern GetDefaultPattern(string contentType, string culture) {
|
public RoutePattern GetDefaultPattern(string contentType, string culture) {
|
||||||
var settings = GetTypePartSettings(contentType).GetModel<AutorouteSettings>();
|
var settings = GetTypePartSettings(contentType).GetModel<AutorouteSettings>();
|
||||||
var defaultPattern = settings.DefaultPatterns.FirstOrDefault(x => x.Culture == culture);
|
|
||||||
var defaultPatternIndex = defaultPattern != null ? defaultPattern.PatternIndex : "0";
|
|
||||||
|
|
||||||
if (String.IsNullOrWhiteSpace(defaultPatternIndex))
|
if (settings.UseCulturePattern) {
|
||||||
defaultPatternIndex = "0";
|
var defaultPatternIndex = "0";
|
||||||
|
|
||||||
if (!settings.DefaultPatterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
if (!settings.DefaultPatterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
||||||
var patternIndex = String.IsNullOrWhiteSpace(settings.DefaultPatternIndex) ? "0" : settings.DefaultPatternIndex;
|
// If no default pattern exists for the language return the default culture neutral pattern if it exists, else a generic pattern
|
||||||
// Lazy updating from old setting.
|
if (settings.Patterns.Any(x => String.IsNullOrEmpty(x.Culture))) {
|
||||||
if (String.Equals(culture, _cultureManager.GetSiteCulture(), StringComparison.OrdinalIgnoreCase)) {
|
defaultPatternIndex = GetDefaultPatternIndex(contentType, null);
|
||||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = patternIndex, Culture = culture });
|
return settings.Patterns.Where(x => String.IsNullOrEmpty(x.Culture)).ElementAt(Convert.ToInt32(defaultPatternIndex));
|
||||||
return settings.Patterns.Where(x => x.Culture == null).ElementAt(Convert.ToInt32(defaultPatternIndex));
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = culture });
|
|
||||||
return new RoutePattern { Name = "Title", Description = "my-title", Pattern = "{Content.Slug}", Culture = culture };
|
return new RoutePattern { Name = "Title", Description = "my-title", Pattern = "{Content.Slug}", Culture = culture };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return a default pattern if set.
|
// If patterns for the specified culture exist search one of them, else search a culture neutral pattern
|
||||||
var patternCultureSearch = settings.Patterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase)) ? culture : null;
|
var patternCultureSearch = settings.Patterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase)) ? culture : null;
|
||||||
|
defaultPatternIndex = GetDefaultPatternIndex(contentType, patternCultureSearch);
|
||||||
|
|
||||||
if (settings.Patterns.Any()) {
|
if (settings.Patterns.Any()) {
|
||||||
if (settings.Patterns.Where(x => x.Culture == patternCultureSearch).ElementAt(Convert.ToInt32(defaultPatternIndex)) != null) {
|
if (settings.Patterns.Where(x => x.Culture == patternCultureSearch).ElementAt(Convert.ToInt32(defaultPatternIndex)) != null) {
|
||||||
return settings.Patterns.Where(x => x.Culture == patternCultureSearch).ElementAt(Convert.ToInt32(defaultPatternIndex));
|
return settings.Patterns.Where(x => x.Culture == patternCultureSearch).ElementAt(Convert.ToInt32(defaultPatternIndex));
|
||||||
};
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Using the culture neutral pattern
|
||||||
|
if (settings.Patterns.Any(x => String.IsNullOrEmpty(x.Culture))) {
|
||||||
|
var defaultPatternIndex = GetDefaultPatternIndex(contentType, null);
|
||||||
|
|
||||||
|
// If no default culture neutral pattern exist use the default pattern
|
||||||
|
if (!settings.DefaultPatterns.Any(x => String.IsNullOrEmpty(x.Culture))) {
|
||||||
|
var patternIndex = String.IsNullOrWhiteSpace(settings.DefaultPatternIndex) ? "0" : settings.DefaultPatternIndex;
|
||||||
|
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = patternIndex, Culture = null });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return a default pattern if none is defined.
|
return settings.Patterns.Where(x => String.IsNullOrEmpty(x.Culture)).ElementAt(Convert.ToInt32(defaultPatternIndex));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return a default pattern if none is defined
|
||||||
return new RoutePattern { Name = "Title", Description = "my-title", Pattern = "{Content.Slug}", Culture = culture };
|
return new RoutePattern { Name = "Title", Description = "my-title", Pattern = "{Content.Slug}", Culture = culture };
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,6 +234,23 @@ namespace Orchard.Autoroute.Services {
|
|||||||
return contentDefinition.Parts.First(x => x.PartDefinition.Name == "AutoroutePart").Settings;
|
return contentDefinition.Parts.First(x => x.PartDefinition.Name == "AutoroutePart").Settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetDefaultPatternIndex(string contentType, string culture) {
|
||||||
|
var settings = GetTypePartSettings(contentType).GetModel<AutorouteSettings>();
|
||||||
|
|
||||||
|
DefaultPattern defaultPattern = null;
|
||||||
|
if (String.IsNullOrEmpty(culture))
|
||||||
|
defaultPattern = settings.DefaultPatterns.FirstOrDefault(x => String.IsNullOrEmpty(x.Culture));
|
||||||
|
else
|
||||||
|
defaultPattern = settings.DefaultPatterns.FirstOrDefault(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
|
var defaultPatternIndex = defaultPattern != null ? defaultPattern.PatternIndex : "0";
|
||||||
|
|
||||||
|
if (String.IsNullOrWhiteSpace(defaultPatternIndex))
|
||||||
|
defaultPatternIndex = "0";
|
||||||
|
|
||||||
|
return defaultPatternIndex;
|
||||||
|
}
|
||||||
|
|
||||||
private static int? GetSlugVersion(string path, string potentialConflictingPath) {
|
private static int? GetSlugVersion(string path, string potentialConflictingPath) {
|
||||||
int v;
|
int v;
|
||||||
var slugParts = potentialConflictingPath.Split(new[] { path }, StringSplitOptions.RemoveEmptyEntries);
|
var slugParts = potentialConflictingPath.Split(new[] { path }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|||||||
@@ -28,56 +28,55 @@ namespace Orchard.Autoroute.Settings {
|
|||||||
|
|
||||||
var settings = definition.Settings.GetModel<AutorouteSettings>();
|
var settings = definition.Settings.GetModel<AutorouteSettings>();
|
||||||
|
|
||||||
//get cultures
|
// Get cultures
|
||||||
settings.SiteCultures = _cultureManager.ListCultures().ToList();
|
settings.SiteCultures = _cultureManager.ListCultures().ToList();
|
||||||
//get default site culture
|
// Get default site culture
|
||||||
settings.DefaultSiteCulture = _cultureManager.GetSiteCulture();
|
settings.DefaultSiteCulture = _cultureManager.GetSiteCulture();
|
||||||
|
|
||||||
//if a culture is not set on the pattern we set it to the default site culture for backward compatibility
|
// Adding Patterns for the UI
|
||||||
if (!settings.Patterns.Any(x => String.Equals(x.Culture, settings.DefaultSiteCulture, StringComparison.OrdinalIgnoreCase))) {
|
|
||||||
foreach (RoutePattern pattern in settings.Patterns.Where(x => String.IsNullOrWhiteSpace(x.Culture))) {
|
|
||||||
settings.Patterns.Where(x => x.GetHashCode() == pattern.GetHashCode()).FirstOrDefault().Culture = settings.DefaultSiteCulture;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Adding Patterns for the UI
|
|
||||||
List<RoutePattern> newPatterns = new List<RoutePattern>();
|
List<RoutePattern> newPatterns = new List<RoutePattern>();
|
||||||
|
|
||||||
|
// Adding a null culture for the culture neutral pattern
|
||||||
|
List<string> cultures = new List<string>();
|
||||||
|
cultures.Add(null);
|
||||||
|
cultures.AddRange(settings.SiteCultures);
|
||||||
|
|
||||||
int current = 0;
|
int current = 0;
|
||||||
foreach (string culture in settings.SiteCultures) {
|
foreach (string culture in cultures) {
|
||||||
|
// Adding all existing patterns for the culture
|
||||||
foreach (RoutePattern routePattern in settings.Patterns.Where(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
foreach (RoutePattern routePattern in settings.Patterns.Where(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
||||||
if (settings.Patterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
|
||||||
newPatterns.Add(settings.Patterns[current]);
|
newPatterns.Add(settings.Patterns[current]);
|
||||||
} else {
|
|
||||||
newPatterns.Add(new RoutePattern {
|
|
||||||
Name = "Title",
|
|
||||||
Description = "my-title",
|
|
||||||
Pattern = "{Content.Slug}",
|
|
||||||
Culture = settings.DefaultSiteCulture
|
|
||||||
});
|
|
||||||
}
|
|
||||||
current++;
|
current++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//We add a pattern for each culture if there is none
|
// Adding a pattern for each culture if there is none
|
||||||
if (!settings.Patterns.Where(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase)).Any()) {
|
if (!settings.Patterns.Where(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase)).Any()) {
|
||||||
newPatterns.Add(new RoutePattern { Culture = culture, Name = "Title", Description = "my-title", Pattern = "{Content.Slug}" });
|
newPatterns.Add(new RoutePattern { Culture = culture, Name = "Title", Description = "my-title", Pattern = "{Content.Slug}" });
|
||||||
}
|
}
|
||||||
|
|
||||||
//we add a new empty line for each culture
|
// Adding a new empty line for each culture
|
||||||
newPatterns.Add(new RoutePattern { Culture = culture, Name = null, Description = null, Pattern = null });
|
newPatterns.Add(new RoutePattern { Culture = culture, Name = null, Description = null, Pattern = null });
|
||||||
|
|
||||||
// if the content type has no defaultPattern for autoroute, then assign one
|
// If the content type has no defaultPattern for autoroute, assign one
|
||||||
if (!settings.DefaultPatterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
bool defaultPatternExists = false;
|
||||||
//if we are in the default culture check the old setting
|
if (String.IsNullOrEmpty(culture))
|
||||||
|
defaultPatternExists = settings.DefaultPatterns.Any(x => String.IsNullOrEmpty(x.Culture));
|
||||||
|
else
|
||||||
|
defaultPatternExists = settings.DefaultPatterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
|
if (!defaultPatternExists) {
|
||||||
|
// If in the default culture check the old setting
|
||||||
if (String.Equals(culture, _cultureManager.GetSiteCulture(), StringComparison.OrdinalIgnoreCase)) {
|
if (String.Equals(culture, _cultureManager.GetSiteCulture(), StringComparison.OrdinalIgnoreCase)) {
|
||||||
var defaultPatternIndex = settings.DefaultPatternIndex;
|
var defaultPatternIndex = settings.DefaultPatternIndex;
|
||||||
if (!String.IsNullOrWhiteSpace(defaultPatternIndex)) {
|
if (!String.IsNullOrWhiteSpace(defaultPatternIndex)) {
|
||||||
var patternIndex = defaultPatternIndex;
|
var patternIndex = defaultPatternIndex;
|
||||||
settings.DefaultPatterns.Add(new DefaultPattern { Culture = settings.DefaultSiteCulture, PatternIndex = patternIndex });
|
settings.DefaultPatterns.Add(new DefaultPattern { Culture = settings.DefaultSiteCulture, PatternIndex = patternIndex });
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = culture });
|
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = culture });
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = culture });
|
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = culture });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -96,25 +95,51 @@ namespace Orchard.Autoroute.Settings {
|
|||||||
Patterns = new List<RoutePattern>()
|
Patterns = new List<RoutePattern>()
|
||||||
};
|
};
|
||||||
|
|
||||||
//get cultures
|
// Get cultures
|
||||||
settings.SiteCultures = _cultureManager.ListCultures().ToList();
|
settings.SiteCultures = _cultureManager.ListCultures().ToList();
|
||||||
|
|
||||||
if (updateModel.TryUpdateModel(settings, "AutorouteSettings", null, null)) {
|
if (updateModel.TryUpdateModel(settings, "AutorouteSettings", null, null)) {
|
||||||
//TODO need to add validations client and/or server side here
|
//TODO need to add validations client and/or server side here
|
||||||
// remove empty patterns
|
|
||||||
|
// If some default pattern is an empty pattern set it to the first pattern for the language
|
||||||
|
List<DefaultPattern> newDefaultPatterns = new List<DefaultPattern>();
|
||||||
|
|
||||||
|
foreach (var defaultPattern in settings.DefaultPatterns) {
|
||||||
|
RoutePattern correspondingPattern = null;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(defaultPattern.Culture))
|
||||||
|
correspondingPattern = settings.Patterns.Where(x => String.IsNullOrEmpty(x.Culture)).ElementAt(Convert.ToInt32(defaultPattern.PatternIndex));
|
||||||
|
else
|
||||||
|
correspondingPattern = settings.Patterns.Where(x => String.Equals(x.Culture, defaultPattern.Culture, StringComparison.OrdinalIgnoreCase)).ElementAt(Convert.ToInt32(defaultPattern.PatternIndex));
|
||||||
|
|
||||||
|
if (String.IsNullOrWhiteSpace(correspondingPattern.Name) && String.IsNullOrWhiteSpace(correspondingPattern.Pattern) && String.IsNullOrWhiteSpace(correspondingPattern.Description))
|
||||||
|
newDefaultPatterns.Add(new DefaultPattern { Culture = defaultPattern.Culture, PatternIndex = "0" });
|
||||||
|
else
|
||||||
|
newDefaultPatterns.Add(defaultPattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
settings.DefaultPatterns = newDefaultPatterns;
|
||||||
|
|
||||||
|
// Remove empty patterns
|
||||||
var patterns = settings.Patterns;
|
var patterns = settings.Patterns;
|
||||||
patterns.RemoveAll(p => String.IsNullOrWhiteSpace(p.Name) && String.IsNullOrWhiteSpace(p.Pattern) && String.IsNullOrWhiteSpace(p.Description));
|
patterns.RemoveAll(p => String.IsNullOrWhiteSpace(p.Name) && String.IsNullOrWhiteSpace(p.Pattern) && String.IsNullOrWhiteSpace(p.Description));
|
||||||
|
|
||||||
//If there is no default pattern for each culture we set default ones
|
// Adding a null culture for the culture neutral pattern
|
||||||
|
List<string> cultures = new List<string>();
|
||||||
|
cultures.Add(null);
|
||||||
|
cultures.AddRange(settings.SiteCultures);
|
||||||
|
|
||||||
|
//If there is no pattern for some culture create a default one
|
||||||
List<RoutePattern> newPatterns = new List<RoutePattern>();
|
List<RoutePattern> newPatterns = new List<RoutePattern>();
|
||||||
int current = 0;
|
int current = 0;
|
||||||
foreach (string culture in settings.SiteCultures) {
|
foreach (string culture in cultures) {
|
||||||
if (settings.Patterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
if (settings.Patterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
||||||
foreach (RoutePattern routePattern in settings.Patterns.Where(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
foreach (RoutePattern routePattern in settings.Patterns.Where(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
||||||
newPatterns.Add(settings.Patterns[current]);
|
newPatterns.Add(settings.Patterns[current]);
|
||||||
current++;
|
current++;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
newPatterns.Add(new RoutePattern {
|
newPatterns.Add(new RoutePattern {
|
||||||
Name = "Title",
|
Name = "Title",
|
||||||
Description = "my-title",
|
Description = "my-title",
|
||||||
@@ -128,7 +153,7 @@ namespace Orchard.Autoroute.Settings {
|
|||||||
|
|
||||||
settings.Patterns = newPatterns;
|
settings.Patterns = newPatterns;
|
||||||
|
|
||||||
// update the settings builder
|
// Update the settings builder
|
||||||
settings.Build(builder);
|
settings.Build(builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
@model Orchard.Autoroute.Settings.AutorouteSettings
|
@model Orchard.Autoroute.Settings.AutorouteSettings
|
||||||
@using Orchard.Utility.Extensions;
|
|
||||||
|
|
||||||
@{
|
@{
|
||||||
Script.Require("AutorouteBrowser");
|
Script.Require("AutorouteBrowser");
|
||||||
Style.Require("AutorouteSettings");
|
Style.Require("AutorouteSettings");
|
||||||
|
|
||||||
int patternCount = 0;
|
int patternCount = 0;
|
||||||
int patternCultureCount = 0;
|
int patternCultureCount = 0;
|
||||||
|
|
||||||
|
List<string> cultures = new List<string>();
|
||||||
|
cultures.Add(null);
|
||||||
|
cultures.AddRange(Model.SiteCultures);
|
||||||
}
|
}
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div>
|
<div>
|
||||||
@@ -40,10 +44,10 @@
|
|||||||
int i = 1;
|
int i = 1;
|
||||||
string cssClass = "";
|
string cssClass = "";
|
||||||
}
|
}
|
||||||
<li class="first selected"><a class="culture" href="#cat-@Model.DefaultSiteCulture">@Model.DefaultSiteCulture</a></li>
|
<li class="first selected"><a class="culture" href="#cat-culture-neutral">@T("All cultures")</a></li>
|
||||||
@foreach (var culture in Model.SiteCultures) {
|
@foreach (var culture in cultures) {
|
||||||
if (culture != Model.DefaultSiteCulture) {
|
if (!String.IsNullOrEmpty(culture)) {
|
||||||
cssClass = i == Model.SiteCultures.Count - 1 ? "last" : "middle";
|
cssClass = i == cultures.Count - 1 ? "last" : "middle";
|
||||||
<li class="@cssClass" style="@(Model.UseCulturePattern == false ? "display:none;" : "")"><a class="culture" href="#cat-@culture">@culture</a></li>
|
<li class="@cssClass" style="@(Model.UseCulturePattern == false ? "display:none;" : "")"><a class="culture" href="#cat-@culture">@culture</a></li>
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@@ -51,8 +55,8 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div id="content">
|
<div id="content">
|
||||||
@foreach (var culture in Model.SiteCultures) {
|
@foreach (var culture in cultures) {
|
||||||
<fieldset id="cat-@culture" class="items @(culture == Model.DefaultSiteCulture ? "default" : "")" style="@(culture == Model.DefaultSiteCulture ? "display:block;" : "display:none;")">
|
<fieldset id="cat-@(String.IsNullOrEmpty(culture) ? "culture-neutral" : culture)" class="items @(String.IsNullOrEmpty(culture) ? "default" : "")" style="@(String.IsNullOrEmpty(culture) ? "display:block;" : "display:none;")">
|
||||||
<table class="autoroute-settings-patterns">
|
<table class="autoroute-settings-patterns">
|
||||||
<tr>
|
<tr>
|
||||||
<th class="autoroute-settings-default">@T("Default")</th>
|
<th class="autoroute-settings-default">@T("Default")</th>
|
||||||
@@ -63,7 +67,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
@for (int index = 0; index < Model.Patterns.Where(x => x.Culture == culture).Count(); index++) {
|
@for (int index = 0; index < Model.Patterns.Where(x => x.Culture == culture).Count(); index++) {
|
||||||
<tr>
|
<tr>
|
||||||
<td>@Html.RadioButtonFor(m => m.DefaultPatterns[Model.SiteCultures.IndexOf(culture)].Culture, culture + "|" + patternCultureCount, patternCultureCount.ToString() == Model.DefaultPatterns[Model.SiteCultures.IndexOf(culture)].PatternIndex ? new { @checked = "checked" } : null)</td>
|
<td>@Html.RadioButtonFor(m => m.DefaultPatterns[cultures.IndexOf(culture)].Culture, culture + "|" + patternCultureCount, patternCultureCount.ToString() == Model.DefaultPatterns[cultures.IndexOf(culture)].PatternIndex ? new { @checked = "checked" } : null)</td>
|
||||||
<td>@Html.TextBoxFor(m => m.Patterns[patternCount].Name, new { @class = "text" })</td>
|
<td>@Html.TextBoxFor(m => m.Patterns[patternCount].Name, new { @class = "text" })</td>
|
||||||
<td>@Html.TextBoxFor(m => m.Patterns[patternCount].Pattern, new { @class = "tokenized text" })</td>
|
<td>@Html.TextBoxFor(m => m.Patterns[patternCount].Pattern, new { @class = "tokenized text" })</td>
|
||||||
<td>@Html.TextBoxFor(m => m.Patterns[patternCount].Description, new { @class = "text" })</td>
|
<td>@Html.TextBoxFor(m => m.Patterns[patternCount].Description, new { @class = "text" })</td>
|
||||||
|
|||||||
Reference in New Issue
Block a user