From 6940cf26d3f090c07862b93488d2242d76c05f63 Mon Sep 17 00:00:00 2001 From: ErikPorter Date: Fri, 22 Jan 2010 23:23:08 +0000 Subject: [PATCH] Hooked up cascade delete for tags (not yet completed). --HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4045868 --- .../Models/HasCommentsHandler.cs | 9 ++--- .../Orchard.Tags/Models/HasTagsHandler.cs | 37 ++++++++++--------- .../Packages/Orchard.Tags/Models/Tag.cs | 6 --- .../Orchard.Tags/Models/TagsContentItems.cs | 7 ++++ .../Packages/Orchard.Tags/Orchard.Tags.csproj | 1 + 5 files changed, 31 insertions(+), 29 deletions(-) create mode 100644 src/Orchard.Web/Packages/Orchard.Tags/Models/TagsContentItems.cs diff --git a/src/Orchard.Web/Packages/Orchard.Comments/Models/HasCommentsHandler.cs b/src/Orchard.Web/Packages/Orchard.Comments/Models/HasCommentsHandler.cs index 902488650..8b5978b4e 100644 --- a/src/Orchard.Web/Packages/Orchard.Comments/Models/HasCommentsHandler.cs +++ b/src/Orchard.Web/Packages/Orchard.Comments/Models/HasCommentsHandler.cs @@ -26,11 +26,10 @@ namespace Orchard.Comments.Models { comments.PendingComments = commentsRepository.Fetch(x => x.CommentedOn == context.ContentItem.Id && x.Status == CommentStatus.Pending).ToList(); }); - OnRemoved((context, c) => { - //TODO: (erikpo) Once comments are content items, replace the following repository delete call to a content manager remove call - var comments = commentService.GetCommentsForCommentedContent(context.ContentItem.Id).ToList(); - comments.ForEach(commentsRepository.Delete); - }); + OnRemoved( + (context, c) => + commentService.GetCommentsForCommentedContent(context.ContentItem.Id).ToList().ForEach( + commentsRepository.Delete)); } } #if false diff --git a/src/Orchard.Web/Packages/Orchard.Tags/Models/HasTagsHandler.cs b/src/Orchard.Web/Packages/Orchard.Tags/Models/HasTagsHandler.cs index 57b62b17c..e8e80278c 100644 --- a/src/Orchard.Web/Packages/Orchard.Tags/Models/HasTagsHandler.cs +++ b/src/Orchard.Web/Packages/Orchard.Tags/Models/HasTagsHandler.cs @@ -1,36 +1,37 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; -using Orchard.Data; using Orchard.ContentManagement; +using Orchard.Data; using Orchard.ContentManagement.Handlers; namespace Orchard.Tags.Models { [UsedImplicitly] public class HasTagsHandler : ContentHandler { - private readonly IRepository _tagsRepository; - private readonly IRepository _tagsContentItemsRepository; - public HasTagsHandler(IRepository tagsRepository, IRepository tagsContentItemsRepository) { - _tagsRepository = tagsRepository; - _tagsContentItemsRepository = tagsContentItemsRepository; Filters.Add(new ActivatingFilter("sandboxpage")); Filters.Add(new ActivatingFilter("blogpost")); - } + OnLoading((context, ht) => { + HasTags tags = context.ContentItem.As(); + tags.AllTags = tagsRepository.Table.ToList(); + IEnumerable tagsContentItems = tagsContentItemsRepository.Fetch(x => x.ContentItemId == context.ContentItem.Id); + foreach (var tagContentItem in tagsContentItems) { + Tag tag = tagsRepository.Get(tagContentItem.TagId); + tags.CurrentTags.Add(tag); + } + }); - protected override void Loading(LoadContentContext context) { - if (context.ContentItem.Has() == false) { - return; - } + OnRemoved((context, ht) => { + tagsContentItemsRepository.Flush(); - HasTags tags = context.ContentItem.Get(); - tags.AllTags = _tagsRepository.Table.ToList(); - IEnumerable tagsContentItems = _tagsContentItemsRepository.Fetch(x => x.ContentItemId == context.ContentItem.Id); - foreach (var tagContentItem in tagsContentItems) { - Tag tag = _tagsRepository.Get(tagContentItem.TagId); - tags.CurrentTags.Add(tag); - } + HasTags tags = context.ContentItem.As(); + foreach (var tag in tags.CurrentTags) { + if (!tagsContentItemsRepository.Fetch(x => x.ContentItemId == context.ContentItem.Id).Any()) { + tagsRepository.Delete(tag); + } + } + }); } } } diff --git a/src/Orchard.Web/Packages/Orchard.Tags/Models/Tag.cs b/src/Orchard.Web/Packages/Orchard.Tags/Models/Tag.cs index a31538501..d80ab9cb2 100644 --- a/src/Orchard.Web/Packages/Orchard.Tags/Models/Tag.cs +++ b/src/Orchard.Web/Packages/Orchard.Tags/Models/Tag.cs @@ -3,10 +3,4 @@ public virtual int Id { get; set; } public virtual string TagName { get; set; } } - - public class TagsContentItems { - public virtual int Id { get; set; } - public virtual int TagId { get; set; } - public virtual int ContentItemId { get; set; } - } } diff --git a/src/Orchard.Web/Packages/Orchard.Tags/Models/TagsContentItems.cs b/src/Orchard.Web/Packages/Orchard.Tags/Models/TagsContentItems.cs new file mode 100644 index 000000000..1c1acfc39 --- /dev/null +++ b/src/Orchard.Web/Packages/Orchard.Tags/Models/TagsContentItems.cs @@ -0,0 +1,7 @@ +namespace Orchard.Tags.Models { + public class TagsContentItems { + public virtual int Id { get; set; } + public virtual int TagId { get; set; } + public virtual int ContentItemId { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Tags/Orchard.Tags.csproj b/src/Orchard.Web/Packages/Orchard.Tags/Orchard.Tags.csproj index 98c5a9c0c..11197b6ad 100644 --- a/src/Orchard.Web/Packages/Orchard.Tags/Orchard.Tags.csproj +++ b/src/Orchard.Web/Packages/Orchard.Tags/Orchard.Tags.csproj @@ -63,6 +63,7 @@ +