From 5119581bc478faa2b06bfbdf55274d437026ef19 Mon Sep 17 00:00:00 2001 From: suhacan Date: Wed, 25 Nov 2009 00:26:28 +0000 Subject: [PATCH] - Tags: Search content items by tag and display links to view the tagged content items... --HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4042114 --- .../Controllers/AdminController.cs | 18 +++++++++- .../Packages/Orchard.Tags/Orchard.Tags.csproj | 2 ++ .../Orchard.Tags/Services/TagService.cs | 14 ++++++++ .../ViewModels/TagsAdminSearchViewModel.cs | 10 ++++++ .../Orchard.Tags/Views/Admin/Index.aspx | 4 +-- .../Orchard.Tags/Views/Admin/Search.aspx | 34 +++++++++++++++++++ 6 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 src/Orchard.Web/Packages/Orchard.Tags/ViewModels/TagsAdminSearchViewModel.cs create mode 100644 src/Orchard.Web/Packages/Orchard.Tags/Views/Admin/Search.aspx diff --git a/src/Orchard.Web/Packages/Orchard.Tags/Controllers/AdminController.cs b/src/Orchard.Web/Packages/Orchard.Tags/Controllers/AdminController.cs index a1df549cd..51355f6c1 100644 --- a/src/Orchard.Web/Packages/Orchard.Tags/Controllers/AdminController.cs +++ b/src/Orchard.Web/Packages/Orchard.Tags/Controllers/AdminController.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Reflection; using System.Web.Mvc; using Orchard.Localization; using Orchard.Logging; @@ -132,6 +131,23 @@ namespace Orchard.Tags.Controllers { } } + public ActionResult Search(int id) { + try { + Tag tag = _tagService.GetTag(id); + IEnumerable contents = _tagService.GetTaggedContentItems(id).ToList(); + var viewModel = new TagsAdminSearchViewModel { + TagName = tag.TagName, + Contents = contents, + }; + return View(viewModel); + + } + catch (Exception exception) { + _notifier.Error(T("Retrieving tagged items failed: " + exception.Message)); + return Index(); + } + } + private static TagEntry CreateTagEntry(Tag tag) { return new TagEntry { Tag = tag, diff --git a/src/Orchard.Web/Packages/Orchard.Tags/Orchard.Tags.csproj b/src/Orchard.Web/Packages/Orchard.Tags/Orchard.Tags.csproj index 9e9815e10..8839c3043 100644 --- a/src/Orchard.Web/Packages/Orchard.Tags/Orchard.Tags.csproj +++ b/src/Orchard.Web/Packages/Orchard.Tags/Orchard.Tags.csproj @@ -73,6 +73,7 @@ + @@ -81,6 +82,7 @@ + diff --git a/src/Orchard.Web/Packages/Orchard.Tags/Services/TagService.cs b/src/Orchard.Web/Packages/Orchard.Tags/Services/TagService.cs index 86f6e2ad3..25cecc711 100644 --- a/src/Orchard.Web/Packages/Orchard.Tags/Services/TagService.cs +++ b/src/Orchard.Web/Packages/Orchard.Tags/Services/TagService.cs @@ -4,6 +4,7 @@ using System.Linq; using Orchard.Data; using Orchard.Localization; using Orchard.Logging; +using Orchard.Models; using Orchard.Settings; using Orchard.Tags.Models; using Orchard.UI.Notify; @@ -16,6 +17,7 @@ namespace Orchard.Tags.Services { void CreateTag(string tagName); void DeleteTag(int id); void UpdateTag(int id, string tagName); + IEnumerable GetTaggedContentItems(int id); void TagContentItem(int contentItemId, string tagName); void UpdateTagsForContentItem(int contentItemId, IEnumerable tagsForContentItem); } @@ -23,13 +25,16 @@ namespace Orchard.Tags.Services { public class TagService : ITagService { private readonly IRepository _tagRepository; private readonly IRepository _tagsContentItemsRepository; + private readonly IContentManager _contentManager; private readonly INotifier _notifier; public TagService(IRepository tagRepository, IRepository tagsContentItemsRepository, + IContentManager contentManager, INotifier notifier) { _tagRepository = tagRepository; _tagsContentItemsRepository = tagsContentItemsRepository; + _contentManager = contentManager; _notifier = notifier; Logger = NullLogger.Instance; T = NullLocalizer.Instance; @@ -80,6 +85,15 @@ namespace Orchard.Tags.Services { tag.TagName = tagName; } + public IEnumerable GetTaggedContentItems(int id) { + List contentItems = new List(); + IEnumerable tagsContentItems = _tagsContentItemsRepository.Fetch(x => x.TagId == id); + foreach (var tagContentItem in tagsContentItems) { + contentItems.Add(_contentManager.Get(tagContentItem.ContentItemId)); + } + return contentItems; + } + public void TagContentItem(int contentItemId, string tagName) { Tag tag = GetTagByName(tagName); TagsContentItems tagsContentItems = new TagsContentItems { ContentItemId = contentItemId, TagId = tag.Id }; diff --git a/src/Orchard.Web/Packages/Orchard.Tags/ViewModels/TagsAdminSearchViewModel.cs b/src/Orchard.Web/Packages/Orchard.Tags/ViewModels/TagsAdminSearchViewModel.cs new file mode 100644 index 000000000..deaefa55d --- /dev/null +++ b/src/Orchard.Web/Packages/Orchard.Tags/ViewModels/TagsAdminSearchViewModel.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using Orchard.Models; +using Orchard.Mvc.ViewModels; + +namespace Orchard.Tags.ViewModels { + public class TagsAdminSearchViewModel : AdminViewModel { + public string TagName { get; set; } + public IEnumerable Contents { get; set; } + } +} diff --git a/src/Orchard.Web/Packages/Orchard.Tags/Views/Admin/Index.aspx b/src/Orchard.Web/Packages/Orchard.Tags/Views/Admin/Index.aspx index 30771fef3..99d87eb9c 100644 --- a/src/Orchard.Web/Packages/Orchard.Tags/Views/Admin/Index.aspx +++ b/src/Orchard.Web/Packages/Orchard.Tags/Views/Admin/Index.aspx @@ -4,7 +4,7 @@ <% Html.Include("Header"); %> <% Html.BeginForm(); %>
-

Manage Comments

+

Manage Tags

<%=Html.ValidationSummary() %>
  1. @@ -44,7 +44,7 @@ - <%= tagEntry.Tag.TagName %> + <%=Html.ActionLink(tagEntry.Tag.TagName, "Search", new {id = tagEntry.Tag.Id}, new {@class="floatRight topSpacer"}) %> <%=Html.ActionLink("Edit", "Edit", new {id = tagEntry.Tag.Id}, new {@class="floatRight topSpacer"}) %> diff --git a/src/Orchard.Web/Packages/Orchard.Tags/Views/Admin/Search.aspx b/src/Orchard.Web/Packages/Orchard.Tags/Views/Admin/Search.aspx new file mode 100644 index 000000000..2150c1bd6 --- /dev/null +++ b/src/Orchard.Web/Packages/Orchard.Tags/Views/Admin/Search.aspx @@ -0,0 +1,34 @@ +<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> +<%@ Import Namespace="Orchard.Models"%> +<%@ Import Namespace="Orchard.Tags.ViewModels"%> +<%@ Import Namespace="Orchard.Mvc.Html"%> +<% Html.Include("Header"); %> + <% Html.BeginForm(); %> +
    +

    List of contents tagged with <%= Model.TagName %>

    + <%=Html.ValidationSummary() %> + + + + + + + + + + + + <% foreach (var contentItem in Model.Contents) { %> + + + + + <% } %> +
    NameLink to the content item
    + <%=contentItem.As().DisplayText%> + + <%=Html.ItemDisplayLink(contentItem)%> +
    +
    + <% Html.EndForm(); %> +<% Html.Include("Footer"); %> \ No newline at end of file