diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Drivers/AutoroutePartDriver.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Drivers/AutoroutePartDriver.cs index 647dd7ca2..ef7adcd15 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Drivers/AutoroutePartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Drivers/AutoroutePartDriver.cs @@ -94,10 +94,10 @@ namespace Orchard.Autoroute.Drivers { // if the content type has no defaultPattern for autoroute, then use a default one if (!settings.DefaultPatterns.Any(x => String.Equals(x.Culture, itemCulture, StringComparison.OrdinalIgnoreCase))) { - //if we are in the default culture check the old setting + // 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"]; + if (!String.IsNullOrWhiteSpace(settings.DefaultPatternIndex)) { + var patternIndex = settings.DefaultPatternIndex; settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = patternIndex, Culture = itemCulture }); } else { settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = itemCulture }); diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs index 13c102dbe..df0f07afc 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs @@ -67,7 +67,8 @@ namespace Orchard.Autoroute.Services { } if (settings.UseCulturePattern) { - //if we are creating from a form post we use the form value for culture + // TODO: Refactor the below so that we don't need to know about Request.Form["Localization.SelectedCulture"]. + // If we are creating from a form post we use the form value for culture. HttpContextBase context = _httpContextAccessor.Current(); if (!String.IsNullOrEmpty(context.Request.Form["Localization.SelectedCulture"])) { itemCulture = context.Request.Form["Localization.SelectedCulture"].ToString(); @@ -140,9 +141,8 @@ namespace Orchard.Autoroute.Services { var settings = GetTypePartSettings(contentType).GetModel(); 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 + var patternIndex = settings.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)); diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Settings/AutorouteSettings.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Settings/AutorouteSettings.cs index b3263425e..4fa5578a3 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Settings/AutorouteSettings.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Settings/AutorouteSettings.cs @@ -22,6 +22,7 @@ namespace Orchard.Autoroute.Settings { AutomaticAdjustmentOnEdit = false; PatternDefinitions = "[]"; DefaultPatternDefinitions = "[]"; + DefaultPatternIndex = null; } public bool PerItemConfiguration { get; set; } @@ -31,6 +32,7 @@ namespace Orchard.Autoroute.Settings { public bool? IsDefault { get; set; } public List SiteCultures { get; set; } public string DefaultSiteCulture { get; set; } + public string DefaultPatternIndex { get; set; } /// /// A serialized Json array of objects @@ -102,6 +104,7 @@ namespace Orchard.Autoroute.Settings { builder.WithSetting("AutorouteSettings.AutomaticAdjustmentOnEdit", AutomaticAdjustmentOnEdit.ToString(CultureInfo.InvariantCulture)); builder.WithSetting("AutorouteSettings.PatternDefinitions", PatternDefinitions); builder.WithSetting("AutorouteSettings.DefaultPatternDefinitions", DefaultPatternDefinitions); + builder.WithSetting("AutorouteSettings.DefaultPatternIndex", DefaultPatternIndex); } } } diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Settings/AutorouteSettingsEvents.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Settings/AutorouteSettingsEvents.cs index 609cf7b09..70db8b820 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Settings/AutorouteSettingsEvents.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Settings/AutorouteSettingsEvents.cs @@ -70,8 +70,9 @@ namespace Orchard.Autoroute.Settings { 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"]; + var defaultPatternIndex = settings.DefaultPatternIndex; + if (!String.IsNullOrWhiteSpace(defaultPatternIndex)) { + var patternIndex = defaultPatternIndex; settings.DefaultPatterns.Add(new DefaultPattern { Culture = settings.DefaultSiteCulture, PatternIndex = patternIndex }); } else { settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = culture });