Adding lazy update of patterns. Code optimizations.

Commented out the migration patterns upgrade code.
This commit is contained in:
Skrypt
2015-06-14 21:18:57 -04:00
parent 6e3d00b2d9
commit 34ddbbd371
6 changed files with 68 additions and 57 deletions

View File

@@ -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 {

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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();

View File

@@ -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++;
}

View File

@@ -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()