From bc9698212719b16d9f1fe4642b16c4b033328e8f Mon Sep 17 00:00:00 2001 From: geertdoornbos Date: Wed, 20 Jun 2012 15:33:05 -0700 Subject: [PATCH] Adding CurrentCultureFilter implementation --HG-- branch : 1.x --- .../Orchard.Localization.csproj | 2 + .../Projections/CurrentCultureFilter.cs | 45 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/Orchard.Web/Modules/Orchard.Localization/Projections/CurrentCultureFilter.cs diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj b/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj index 23d76e8bd..a9ee78c64 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj +++ b/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj @@ -13,6 +13,7 @@ Orchard.Localization Orchard.Localization v4.0 + false true @@ -53,6 +54,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Projections/CurrentCultureFilter.cs b/src/Orchard.Web/Modules/Orchard.Localization/Projections/CurrentCultureFilter.cs new file mode 100644 index 000000000..e327ddc0c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Localization/Projections/CurrentCultureFilter.cs @@ -0,0 +1,45 @@ +using System; +using Orchard.ContentManagement; +using Orchard.Events; +using Orchard.Localization.Models; +using Orchard.Localization.Services; + +namespace Orchard.Localization.Projections { + public interface IFilterProvider : IEventHandler { + void Describe(dynamic describe); + } + + public class CurrentCultureFilter : IFilterProvider { + private readonly IWorkContextAccessor _workContextAccessor; + private readonly ICultureManager _cultureManager; + + public CurrentCultureFilter(IWorkContextAccessor workContextAccessor, ICultureManager cultureManager) { + _workContextAccessor = workContextAccessor; + _cultureManager = cultureManager; + T = NullLocalizer.Instance; + } + + public Localizer T { get; set; } + + public void Describe(dynamic describe) { + describe.For("Localization", T("Localization"), T("Localization")) + .Element("ForCurrentCulture", T("For current culture"), T("Localized content items for current culture"), + (Action)ApplyFilter, + (Func)DisplayFilter, + null + ); + } + + public void ApplyFilter(dynamic context) { + string currentCulture = _workContextAccessor.GetContext().CurrentCulture; + var currentCultureId = _cultureManager.GetCultureByName(currentCulture).Id; + + var query = (IHqlQuery)context.Query; + context.Query = query.Where(x => x.ContentPartRecord(), x => x.Eq("CultureId", currentCultureId)); + } + + public LocalizedString DisplayFilter(dynamic context) { + return T("For current culture"); + } + } +} \ No newline at end of file