From 09c2ae76e44df1cdcc3d1315cd1d57e19d4038d4 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Tue, 26 Aug 2014 10:59:06 -0700 Subject: [PATCH] Adding content filters --- .../Contents/Controllers/AdminController.cs | 17 +++- .../ViewModels/ListContentsViewModel.cs | 2 + .../Core/Contents/Views/Admin/List.cshtml | 7 ++ .../Orchard.Localization.csproj | 1 + .../Services/LocalizationCultureFilter.cs | 25 ++++++ .../Controllers/AdminController.cs | 24 ++++- .../Orchard.Widgets/Orchard.Widgets.csproj | 2 +- .../Orchard.Widgets/Views/Admin/Index.cshtml | 2 +- ...rol.cshtml => WidgetFiltersControl.cshtml} | 88 +++++++++++-------- .../Themes/TheAdmin/Styles/site.css | 3 + .../Services/DefaultCultureFilter.cs | 10 +++ .../Localization/Services/ICultureFilter.cs | 8 ++ src/Orchard/Orchard.Framework.csproj | 2 + 13 files changed, 149 insertions(+), 42 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationCultureFilter.cs rename src/Orchard.Web/Modules/Orchard.Widgets/Views/{WidgetLayersControl.cshtml => WidgetFiltersControl.cshtml} (66%) create mode 100644 src/Orchard/Localization/Services/DefaultCultureFilter.cs create mode 100644 src/Orchard/Localization/Services/ICultureFilter.cs diff --git a/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs b/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs index 84e5dcc5d..ba05d1ba1 100644 --- a/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs +++ b/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs @@ -22,6 +22,7 @@ using Orchard.UI.Navigation; using Orchard.UI.Notify; using Orchard.Settings; using Orchard.Utility.Extensions; +using Orchard.Localization.Services; namespace Orchard.Core.Contents.Controllers { [ValidateInput(false)] @@ -30,6 +31,8 @@ namespace Orchard.Core.Contents.Controllers { private readonly IContentDefinitionManager _contentDefinitionManager; private readonly ITransactionManager _transactionManager; private readonly ISiteService _siteService; + private readonly ICultureManager _cultureManager; + private readonly ICultureFilter _cultureFilter; public AdminController( IOrchardServices orchardServices, @@ -37,12 +40,17 @@ namespace Orchard.Core.Contents.Controllers { IContentDefinitionManager contentDefinitionManager, ITransactionManager transactionManager, ISiteService siteService, - IShapeFactory shapeFactory) { + IShapeFactory shapeFactory, + ICultureManager cultureManager, + ICultureFilter cultureFilter) { Services = orchardServices; _contentManager = contentManager; _contentDefinitionManager = contentDefinitionManager; _transactionManager = transactionManager; _siteService = siteService; + _cultureManager = cultureManager; + _cultureFilter = cultureFilter; + T = NullLocalizer.Instance; Logger = NullLogger.Instance; Shape = shapeFactory; @@ -100,11 +108,17 @@ namespace Orchard.Core.Contents.Controllers { break; } + if(!String.IsNullOrWhiteSpace(model.Options.SelectedCulture)) { + query = _cultureFilter.FilterCulture(query, model.Options.SelectedCulture); + } + model.Options.SelectedFilter = model.TypeName; model.Options.FilterOptions = GetListableTypes(false) .Select(ctd => new KeyValuePair(ctd.Name, ctd.DisplayName)) .ToList().OrderBy(kvp => kvp.Value); + model.Options.Cultures = _cultureManager.ListCultures(); + var maxPagedCount = _siteService.GetSiteSettings().MaxPagedCount; var pagerShape = Shape.Pager(pager).TotalItemCount(maxPagedCount > 0 ? maxPagedCount : query.Count()); var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList(); @@ -140,6 +154,7 @@ namespace Orchard.Core.Contents.Controllers { public ActionResult ListFilterPOST(ContentOptions options) { var routeValues = ControllerContext.RouteData.Values; if (options != null) { + routeValues["Options.SelectedCulture"] = options.SelectedCulture; //todo: don't hard-code the key routeValues["Options.OrderBy"] = options.OrderBy; //todo: don't hard-code the key routeValues["Options.ContentsStatus"] = options.ContentsStatus; //todo: don't hard-code the key if (GetListableTypes(false).Any(ctd => string.Equals(ctd.Name, options.SelectedFilter, StringComparison.OrdinalIgnoreCase))) { diff --git a/src/Orchard.Web/Core/Contents/ViewModels/ListContentsViewModel.cs b/src/Orchard.Web/Core/Contents/ViewModels/ListContentsViewModel.cs index 4083a598b..287b8f44e 100644 --- a/src/Orchard.Web/Core/Contents/ViewModels/ListContentsViewModel.cs +++ b/src/Orchard.Web/Core/Contents/ViewModels/ListContentsViewModel.cs @@ -35,10 +35,12 @@ namespace Orchard.Core.Contents.ViewModels { ContentsStatus = ContentsStatus.Latest; } public string SelectedFilter { get; set; } + public string SelectedCulture { get; set; } public IEnumerable> FilterOptions { get; set; } public ContentsOrder OrderBy { get; set; } public ContentsStatus ContentsStatus { get; set; } public ContentsBulkAction BulkAction { get; set; } + public IEnumerable Cultures { get; set; } } public enum ContentsOrder { diff --git a/src/Orchard.Web/Core/Contents/Views/Admin/List.cshtml b/src/Orchard.Web/Core/Contents/Views/Admin/List.cshtml index b4d52d330..dc6bda6c3 100644 --- a/src/Orchard.Web/Core/Contents/Views/Admin/List.cshtml +++ b/src/Orchard.Web/Core/Contents/Views/Admin/List.cshtml @@ -33,6 +33,13 @@ @Html.SelectOption((string)Model.Options.SelectedFilter, (string)filterOption.Key, (string)filterOption.Value) } + + - @foreach (var layer in layers) { - @Html.SelectOption((int)Model.CurrentLayer.Id, (int)layer.Id, (string)layer.Name) - } - - - @Html.Link(T("Edit").Text, Url.Action("EditLayer", "Admin", new { area = "Orchard.Widgets", id = Model.CurrentLayer.Id, returnUrl }), new { @class = "button" }) - - } - } -
- @Html.Link(T("Add a new layer...").Text, Url.Action("AddLayer", "Admin", new { area = "Orchard.Widgets", returnUrl })) -
- - @if (!String.IsNullOrEmpty(Model.CurrentLayer.Description)) { -
- @Model.CurrentLayer.Description -
-
- } - - +@using Orchard.Utility.Extensions; +@using Orchard.Widgets.Models; +@{ + Style.Require("WidgetsAdmin"); + Script.Require("Switchable").AtFoot(); + Style.Require("Switchable"); + IEnumerable layers = Model.Layers; + IEnumerable cultures = Model.Cultures; + var returnUrl = Request.RawUrl; +} +
+ @if (layers.Any()) { + using (Html.BeginForm("index", "admin", FormMethod.Get, new { area = "Orchard.Widgets" })) { +
+ + + + @Html.Link(T("Edit").Text, Url.Action("EditLayer", "Admin", new { area = "Orchard.Widgets", id = Model.CurrentLayer.Id, returnUrl }), new { @class = "button" }) +
+ } + } +
+ @Html.Link(T("Add a new layer...").Text, Url.Action("AddLayer", "Admin", new { area = "Orchard.Widgets", returnUrl })) +
+ + + @using (Html.BeginForm("index", "admin", FormMethod.Get, new { area = "Orchard.Widgets" })) { +
+ + + +
+ } + + + + @if (!String.IsNullOrEmpty(Model.CurrentLayer.Description)) { +
+ @Model.CurrentLayer.Description +
+
+ } +
diff --git a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css index 6e31bba7a..790d19030 100644 --- a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css +++ b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css @@ -623,6 +623,9 @@ legend span { label.bulk-order { text-transform:lowercase; } +label.bulk-culture { + text-transform:lowercase; +} label span { font-weight:normal; } diff --git a/src/Orchard/Localization/Services/DefaultCultureFilter.cs b/src/Orchard/Localization/Services/DefaultCultureFilter.cs new file mode 100644 index 000000000..668c58cb0 --- /dev/null +++ b/src/Orchard/Localization/Services/DefaultCultureFilter.cs @@ -0,0 +1,10 @@ +using System.Web; +using Orchard.ContentManagement; + +namespace Orchard.Localization.Services { + public class DefaultCultureFilter : ICultureFilter { + public IContentQuery FilterCulture(IContentQuery query, string cultureName) { + return query; + } + } +} diff --git a/src/Orchard/Localization/Services/ICultureFilter.cs b/src/Orchard/Localization/Services/ICultureFilter.cs new file mode 100644 index 000000000..26fc56475 --- /dev/null +++ b/src/Orchard/Localization/Services/ICultureFilter.cs @@ -0,0 +1,8 @@ +using System.Web; +using Orchard.ContentManagement; + +namespace Orchard.Localization.Services { + public interface ICultureFilter : IDependency { + IContentQuery FilterCulture(IContentQuery query, string cultureName); + } +} diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index 322362827..e50e62649 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -275,6 +275,8 @@ + +