mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Adding missing file
--HG-- branch : 1.x
This commit is contained in:
102
src/Orchard.Web/Modules/Orchard.Tags/Projections/TagsFilter.cs
Normal file
102
src/Orchard.Web/Modules/Orchard.Tags/Projections/TagsFilter.cs
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Web.Mvc;
|
||||||
|
using Orchard.ContentManagement;
|
||||||
|
using Orchard.DisplayManagement;
|
||||||
|
using Orchard.Environment.Extensions;
|
||||||
|
using Orchard.Events;
|
||||||
|
using Orchard.Localization;
|
||||||
|
using Orchard.Tags.Services;
|
||||||
|
|
||||||
|
namespace Orchard.Tags.Projections {
|
||||||
|
public interface IFilterProvider : IEventHandler {
|
||||||
|
void Describe(dynamic describe);
|
||||||
|
}
|
||||||
|
|
||||||
|
[OrchardFeature("Orchard.Tags.Projections")]
|
||||||
|
public class TagsFilter : IFilterProvider {
|
||||||
|
private readonly ITagService _tagService;
|
||||||
|
|
||||||
|
public TagsFilter(ITagService tagService) {
|
||||||
|
_tagService = tagService;
|
||||||
|
T = NullLocalizer.Instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Localizer T { get; set; }
|
||||||
|
|
||||||
|
public void Describe(dynamic describe) {
|
||||||
|
describe.For("Tags", T("Tags"), T("Tags"))
|
||||||
|
.Element("HasTags", T("Has Tags"), T("Tagged content items"),
|
||||||
|
(Action<dynamic>)ApplyFilter,
|
||||||
|
(Func<dynamic, LocalizedString>)DisplayFilter,
|
||||||
|
"SelectTags"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ApplyFilter(dynamic context) {
|
||||||
|
string tags = Convert.ToString(context.State.TagIds);
|
||||||
|
if (!String.IsNullOrEmpty(tags)) {
|
||||||
|
var ids = tags.Split(new[] { ',' }).Select(Int32.Parse).ToArray();
|
||||||
|
var query = (IContentQuery<ContentItem>)context.Query;
|
||||||
|
context.Query = query.Where(x => x.WithRecord("TagsPartRecord").WithRelationship("Tags.TagRecord").In("Id", ids));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalizedString DisplayFilter(dynamic context) {
|
||||||
|
string tags = Convert.ToString(context.State.TagIds);
|
||||||
|
|
||||||
|
if (String.IsNullOrEmpty(tags)) {
|
||||||
|
return T("Any tag");
|
||||||
|
}
|
||||||
|
|
||||||
|
var tagNames = tags.Split(new[] { ',' }).Select(x => _tagService.GetTag(Int32.Parse(x)).TagName);
|
||||||
|
|
||||||
|
return T("Tagged with {0}", String.Join(", ", tagNames));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IFormProvider : IEventHandler {
|
||||||
|
void Describe(dynamic context);
|
||||||
|
}
|
||||||
|
|
||||||
|
[OrchardFeature("Orchard.Tags.Projections")]
|
||||||
|
public class TagsFilterForms : IFormProvider {
|
||||||
|
private readonly ITagService _tagService;
|
||||||
|
protected dynamic Shape { get; set; }
|
||||||
|
public Localizer T { get; set; }
|
||||||
|
|
||||||
|
public TagsFilterForms(
|
||||||
|
IShapeFactory shapeFactory,
|
||||||
|
ITagService tagService) {
|
||||||
|
_tagService = tagService;
|
||||||
|
Shape = shapeFactory;
|
||||||
|
T = NullLocalizer.Instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Describe(dynamic context) {
|
||||||
|
Func<IShapeFactory, dynamic> form =
|
||||||
|
shape => {
|
||||||
|
|
||||||
|
var f = Shape.Form(
|
||||||
|
Id: "SelectTags",
|
||||||
|
_Tags: Shape.SelectList(
|
||||||
|
Id: "tagids", Name: "TagIds",
|
||||||
|
Title: T("Tags"),
|
||||||
|
Description: T("Select some tags."),
|
||||||
|
Size: 10,
|
||||||
|
Multiple: true
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach (var tag in _tagService.GetTags()) {
|
||||||
|
f._Tags.Add(new SelectListItem { Value = tag.Id.ToString(), Text = tag.TagName });
|
||||||
|
}
|
||||||
|
|
||||||
|
return f;
|
||||||
|
};
|
||||||
|
|
||||||
|
context.Form("SelectTags", form);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user