mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Adding lazy update of patterns. Code optimizations.
Commented out the migration patterns upgrade code.
This commit is contained in:
@@ -70,33 +70,41 @@ namespace Orchard.Autoroute.Drivers {
|
||||
if (settings.UseCulturePattern) {
|
||||
//if we are creating from a form post we use the form value for culture
|
||||
HttpContextBase context = _httpContextAccessor.Current();
|
||||
if (context.Request.Form["Localization.SelectedCulture"] != null) {
|
||||
if (!String.IsNullOrEmpty(context.Request.Form["Localization.SelectedCulture"])) {
|
||||
itemCulture = context.Request.Form["Localization.SelectedCulture"].ToString();
|
||||
}
|
||||
}
|
||||
|
||||
//we update the settings assuming that when
|
||||
//pattern culture = null it means culture = default website culture
|
||||
//pattern culture = null or "" it means culture = default website culture
|
||||
//for patterns that we migrated
|
||||
foreach (RoutePattern pattern in settings.Patterns.Where(x => String.IsNullOrEmpty(x.Culture))) {
|
||||
foreach (RoutePattern pattern in settings.Patterns.Where(x => String.IsNullOrWhiteSpace(x.Culture))) {
|
||||
pattern.Culture = _cultureManager.GetSiteCulture(); ;
|
||||
}
|
||||
|
||||
//we do the same for default patterns
|
||||
foreach (DefaultPattern pattern in settings.DefaultPatterns.Where(x => String.IsNullOrEmpty(x.Culture))) {
|
||||
foreach (DefaultPattern pattern in settings.DefaultPatterns.Where(x => String.IsNullOrWhiteSpace(x.Culture))) {
|
||||
pattern.Culture = _cultureManager.GetSiteCulture();
|
||||
}
|
||||
|
||||
// if the content type has no pattern for autoroute, then use a default one
|
||||
if (!settings.Patterns.Any(x => x.Culture == itemCulture)) {
|
||||
settings.AllowCustomPattern = true;
|
||||
settings.AutomaticAdjustmentOnEdit = false;
|
||||
if (!settings.Patterns.Any(x => String.Equals(x.Culture, itemCulture, StringComparison.OrdinalIgnoreCase))) {
|
||||
settings.Patterns = new List<RoutePattern> { new RoutePattern { Name = "Title", Description = "my-title", Pattern = "{Content.Slug}", Culture = itemCulture } };
|
||||
}
|
||||
|
||||
// if the content type has no defaultPattern for autoroute, then use a default one
|
||||
if (!settings.DefaultPatterns.Any(x => x.Culture == itemCulture)) {
|
||||
settings.DefaultPatterns = new List<DefaultPattern> { new DefaultPattern { PatternIndex = "0", Culture = itemCulture } };
|
||||
if (!settings.DefaultPatterns.Any(x => String.Equals(x.Culture, itemCulture, StringComparison.OrdinalIgnoreCase))) {
|
||||
//if we are in the default culture check the old setting
|
||||
if (String.Equals(itemCulture, _cultureManager.GetSiteCulture(), StringComparison.OrdinalIgnoreCase)) {
|
||||
if (!String.IsNullOrEmpty(part.TypePartDefinition.Settings["AutorouteSettings.DefaultPatternIndex"])) {
|
||||
string patternIndex = part.TypePartDefinition.Settings["AutorouteSettings.DefaultPatternIndex"];
|
||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = patternIndex, Culture = itemCulture });
|
||||
} else {
|
||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = itemCulture });
|
||||
}
|
||||
} else {
|
||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = itemCulture });
|
||||
}
|
||||
}
|
||||
|
||||
var viewModel = new AutoroutePartEditViewModel {
|
||||
|
||||
@@ -54,15 +54,15 @@ namespace Orchard.Autoroute {
|
||||
);
|
||||
|
||||
//we set the default pattern index from the deprecated setting
|
||||
foreach (ContentTypeDefinition contentTypeDefinition in ContentDefinitionManager.ListTypeDefinitions()) {
|
||||
foreach (ContentTypePartDefinition contentTypePartDefinition in contentTypeDefinition.Parts.Where(x => x.PartDefinition.Name == "AutoroutePart")) {
|
||||
var settings = contentTypePartDefinition.Settings.GetModel<AutorouteSettings>();
|
||||
string patternIndex = contentTypePartDefinition.Settings["AutorouteSettings.DefaultPatternIndex"];
|
||||
settings.DefaultPatterns = new List<DefaultPattern> { new DefaultPattern { PatternIndex = patternIndex } };
|
||||
//foreach (ContentTypeDefinition contentTypeDefinition in ContentDefinitionManager.ListTypeDefinitions()) {
|
||||
// foreach (ContentTypePartDefinition contentTypePartDefinition in contentTypeDefinition.Parts.Where(x => x.PartDefinition.Name == "AutoroutePart")) {
|
||||
// var settings = contentTypePartDefinition.Settings.GetModel<AutorouteSettings>();
|
||||
// string patternIndex = contentTypePartDefinition.Settings["AutorouteSettings.DefaultPatternIndex"];
|
||||
// settings.DefaultPatterns = new List<DefaultPattern> { new DefaultPattern { PatternIndex = patternIndex } };
|
||||
|
||||
ContentDefinitionManager.AlterTypeDefinition(contentTypeDefinition.Name, builder => builder.WithPart("AutoroutePart", settings.Build));
|
||||
}
|
||||
}
|
||||
// ContentDefinitionManager.AlterTypeDefinition(contentTypeDefinition.Name, builder => builder.WithPart("AutoroutePart", settings.Build));
|
||||
// }
|
||||
//}
|
||||
|
||||
return 4;
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace Orchard.Autoroute.Services {
|
||||
if (settings.UseCulturePattern) {
|
||||
//if we are creating from a form post we use the form value for culture
|
||||
HttpContextBase context = _httpContextAccessor.Current();
|
||||
if (context.Request.Form["Localization.SelectedCulture"] != null) {
|
||||
if (!String.IsNullOrEmpty(context.Request.Form["Localization.SelectedCulture"])) {
|
||||
itemCulture = context.Request.Form["Localization.SelectedCulture"].ToString();
|
||||
}
|
||||
}
|
||||
@@ -139,13 +139,27 @@ namespace Orchard.Autoroute.Services {
|
||||
public RoutePattern GetDefaultPattern(string contentType, string culture) {
|
||||
var settings = GetTypePartSettings(contentType).GetModel<AutorouteSettings>();
|
||||
|
||||
if (!settings.DefaultPatterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
||||
ContentTypeDefinition definition = _contentDefinitionManager.GetTypeDefinition(contentType);
|
||||
var patternIndex = definition.Parts.Where(x => x.PartDefinition.Name == "AutoroutePart").FirstOrDefault().Settings["AutorouteSettings.DefaultPatternIndex"];
|
||||
//lazy updating from old setting
|
||||
if (String.Equals(culture, _cultureManager.GetSiteCulture(), StringComparison.OrdinalIgnoreCase) && !String.IsNullOrWhiteSpace(patternIndex)) {
|
||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = patternIndex, Culture = culture });
|
||||
return settings.Patterns.Where(x => x.Culture == null).ElementAt(Convert.ToInt32(settings.DefaultPatterns.Where(x => x.Culture == culture).FirstOrDefault().PatternIndex));
|
||||
} else {
|
||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = culture });
|
||||
return new RoutePattern { Name = "Title", Description = "my-title", Pattern = "{Content.Slug}", Culture = culture };
|
||||
}
|
||||
}
|
||||
|
||||
// return a default pattern if set
|
||||
var patternCultureSearch = settings.Patterns.Any(x => x.Culture == culture) ? culture : null;
|
||||
var defaultPatternCultureSearch = settings.DefaultPatterns.Any(x => x.Culture == culture) ? culture : null;
|
||||
var patternCultureSearch = settings.Patterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase)) ? culture : null;
|
||||
var defaultPatternCultureSearch = settings.DefaultPatterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase)) ? culture : null;
|
||||
|
||||
if (settings.Patterns.Any()) {
|
||||
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
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Globalization;
|
||||
using System.Linq;
|
||||
using Orchard.ContentManagement.MetaData.Builders;
|
||||
using Orchard.Services;
|
||||
using System;
|
||||
|
||||
namespace Orchard.Autoroute.Settings {
|
||||
|
||||
@@ -65,7 +66,7 @@ namespace Orchard.Autoroute.Settings {
|
||||
//We split the values from the radio button returned values
|
||||
int i = 0;
|
||||
foreach (DefaultPattern defaultPattern in _defaultPatterns) {
|
||||
if (defaultPattern.Culture != null) {
|
||||
if (!String.IsNullOrWhiteSpace(defaultPattern.Culture)) {
|
||||
if (defaultPattern.Culture.Split('|').Count() > 1) {
|
||||
_defaultPatterns[i].PatternIndex = defaultPattern.Culture.Split('|').Last();
|
||||
_defaultPatterns[i].Culture = defaultPattern.Culture.Split('|').First();
|
||||
@@ -82,7 +83,7 @@ namespace Orchard.Autoroute.Settings {
|
||||
//We split the values from the radio button returned values
|
||||
int i = 0;
|
||||
foreach (DefaultPattern defaultPattern in _defaultPatterns) {
|
||||
if (defaultPattern.Culture != null) {
|
||||
if (!String.IsNullOrWhiteSpace(defaultPattern.Culture)) {
|
||||
if (defaultPattern.Culture.Split('|').Count() > 1) {
|
||||
_defaultPatterns[i].PatternIndex = defaultPattern.Culture.Split('|').Last();
|
||||
_defaultPatterns[i].Culture = defaultPattern.Culture.Split('|').First();
|
||||
|
||||
@@ -33,10 +33,9 @@ namespace Orchard.Autoroute.Settings {
|
||||
//get default site culture
|
||||
settings.DefaultSiteCulture = _cultureManager.GetSiteCulture();
|
||||
|
||||
//if a culture is not set on the token we set it to the default site culture for backward compatibility
|
||||
//NOT SURE ABOUT THIS
|
||||
if (!settings.Patterns.Any(x => x.Culture == settings.DefaultSiteCulture)) {
|
||||
foreach (RoutePattern pattern in settings.Patterns.Where(x => x.Culture == null)) {
|
||||
//if a culture is not set on the pattern we set it to the default site culture for backward compatibility
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -45,8 +44,8 @@ namespace Orchard.Autoroute.Settings {
|
||||
List<RoutePattern> newPatterns = new List<RoutePattern>();
|
||||
int current = 0;
|
||||
foreach (string culture in settings.SiteCultures) {
|
||||
foreach (RoutePattern routePattern in settings.Patterns.Where(x => x.Culture == culture)) {
|
||||
if (settings.Patterns.Any(x => x.Culture == culture)) {
|
||||
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]);
|
||||
} else {
|
||||
newPatterns.Add(new RoutePattern {
|
||||
@@ -60,24 +59,26 @@ namespace Orchard.Autoroute.Settings {
|
||||
}
|
||||
|
||||
//We add a pattern for each culture if there is none
|
||||
if (!settings.Patterns.Where(x => x.Culture == culture).Any()) {
|
||||
//We add the default pattern from migrations
|
||||
if (settings.Patterns.Where(x => String.IsNullOrEmpty(x.Culture)).Any()) {
|
||||
//we add the RoutePattern and we set the culture since there is none defined
|
||||
RoutePattern migrationRoutePattern = settings.Patterns.Where(x => String.IsNullOrEmpty(x.Culture)).First();
|
||||
newPatterns.Add(new RoutePattern { Culture = culture, Name = migrationRoutePattern.Name, Description = migrationRoutePattern.Description, Pattern = migrationRoutePattern.Pattern });
|
||||
} else {
|
||||
//we add the default pattern for custom content types or modules that don't define it in their migration
|
||||
newPatterns.Add(new RoutePattern { Culture = culture, Name = "Title", Description = "my-title", Pattern = "{Content.Slug}" });
|
||||
}
|
||||
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}" });
|
||||
}
|
||||
|
||||
//we add a new empty line for each culture
|
||||
newPatterns.Add(new RoutePattern { Culture = culture, Name = null, Description = null, Pattern = null });
|
||||
|
||||
// if the content type has no defaultPattern for autoroute, then assign a the first one we just created
|
||||
if (!settings.DefaultPatterns.Any(x => x.Culture == culture)) {
|
||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = culture });
|
||||
// if the content type has no defaultPattern for autoroute, then assign one
|
||||
if (!settings.DefaultPatterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
||||
//if we are in the default culture check the old setting
|
||||
if (String.Equals(culture, _cultureManager.GetSiteCulture(), StringComparison.OrdinalIgnoreCase)) {
|
||||
if (!String.IsNullOrEmpty(definition.Settings["AutorouteSettings.DefaultPatternIndex"])) {
|
||||
string patternIndex = definition.Settings["AutorouteSettings.DefaultPatternIndex"];
|
||||
settings.DefaultPatterns.Add(new DefaultPattern { Culture = settings.DefaultSiteCulture, PatternIndex = patternIndex });
|
||||
} else {
|
||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = culture });
|
||||
}
|
||||
} else {
|
||||
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = culture });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +109,7 @@ namespace Orchard.Autoroute.Settings {
|
||||
int current = 0;
|
||||
foreach (string culture in settings.SiteCultures) {
|
||||
if (settings.Patterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
||||
foreach (RoutePattern routePattern in settings.Patterns.Where(x => x.Culture == culture)) {
|
||||
foreach (RoutePattern routePattern in settings.Patterns.Where(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
|
||||
newPatterns.Add(settings.Patterns[current]);
|
||||
current++;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
Style.Require("AutorouteSettings");
|
||||
int patternCount = 0;
|
||||
int patternCultureCount = 0;
|
||||
int cultureCount = 0;
|
||||
}
|
||||
<fieldset>
|
||||
<div>
|
||||
@@ -64,7 +63,7 @@
|
||||
</tr>
|
||||
@for (int index = 0; index < Model.Patterns.Where(x => x.Culture == culture).Count(); index++) {
|
||||
<tr>
|
||||
<td>@Html.RadioButtonFor(m => m.DefaultPatterns[cultureCount].Culture, culture + "|" + patternCultureCount, patternCultureCount.ToString() == Model.DefaultPatterns[cultureCount].PatternIndex ? new { @checked = "checked" } : null)</td>
|
||||
<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.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].Description, new { @class = "text" })</td>
|
||||
@@ -76,20 +75,8 @@
|
||||
<tr></tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
cultureCount++;
|
||||
}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Display.TokenHint()
|
||||
|
||||
Reference in New Issue
Block a user