#21243: Fixing issue with multiple calls to cultrue selector

Taken some of the fixes from jtkech and anoordende

Work Item: 21243
This commit is contained in:
Nicholas Mayne
2015-03-13 17:10:00 +00:00
parent 383e947bf7
commit 6245352da8
4 changed files with 26 additions and 22 deletions

View File

@@ -1,5 +1,4 @@
using System.Web;
using System.Web.Routing;
using Orchard.UI.Admin;
namespace Orchard.Localization {
@@ -9,7 +8,7 @@ namespace Orchard.Localization {
}
internal static bool IsRequestAdmin(HttpContextBase context) {
if (AdminFilter.IsApplied(new RequestContext(context, new RouteData())))
if (AdminFilter.IsApplied(context.Request.RequestContext))
return true;
return false;

View File

@@ -31,7 +31,7 @@ namespace Orchard.Localization.Selectors {
if (context.Request.UrlReferrer != null)
path = context.Request.UrlReferrer.AbsolutePath;
else
path = context.Request.Path;
return null;
}
else {
path = context.Request.Path;

View File

@@ -1,18 +1,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Orchard.Mvc;
namespace Orchard.Localization.Services {
public class CurrentCultureWorkContext : IWorkContextStateProvider {
private readonly ICultureManager _cultureManager;
private readonly IEnumerable<ICultureSelector> _cultureSelectors;
private readonly IHttpContextAccessor _httpContextAccessor;
public CurrentCultureWorkContext(ICultureManager cultureManager) {
_cultureManager = cultureManager;
public CurrentCultureWorkContext(IEnumerable<ICultureSelector> cultureSelectors,
IHttpContextAccessor httpContextAccessor) {
_cultureSelectors = cultureSelectors;
_httpContextAccessor = httpContextAccessor;
}
public Func<WorkContext, T> Get<T>(string name) {
if (name == "CurrentCulture") {
return ctx => (T)(object)_cultureManager.GetCurrentCulture(ctx.HttpContext);
var cultureName = GetCurrentCulture();
return ctx => (T)(object)cultureName;
}
return null;
}
private string GetCurrentCulture() {
var httpContext = _httpContextAccessor.Current();
var culture = _cultureSelectors
.Select(c => c.GetCulture(httpContext))
.Where(c => c != null)
.OrderByDescending(c => c.Priority)
.FirstOrDefault(c => !string.IsNullOrEmpty(c.CultureName));
return culture == null ? string.Empty : culture.CultureName;
}
}
}

View File

@@ -60,21 +60,7 @@ namespace Orchard.Localization.Services {
}
public string GetCurrentCulture(HttpContextBase requestContext) {
var requestCulture = _cultureSelectors
.Select(x => x.GetCulture(requestContext))
.Where(x => x != null)
.OrderByDescending(x => x.Priority);
if ( !requestCulture.Any() )
return String.Empty;
foreach (var culture in requestCulture) {
if (!String.IsNullOrEmpty(culture.CultureName)) {
return culture.CultureName;
}
}
return String.Empty;
return _workContextAccessor.GetContext().CurrentCulture;
}
public CultureRecord GetCultureById(int id) {