From e6908c7678df208584cf8f9352e14bf50840946e Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 8 Oct 2013 12:29:56 +1100 Subject: [PATCH] Adds tag support to member repository. --- .../Repositories/ContentRepository.cs | 32 ++--------------- .../Repositories/MediaRepository.cs | 34 ++----------------- .../Repositories/MemberRepository.cs | 16 +++++++-- .../Repositories/VersionableRepositoryBase.cs | 30 ++++++++++++++++ .../Persistence/RepositoryFactory.cs | 5 ++- .../Repositories/MemberRepositoryTest.cs | 3 +- 6 files changed, 55 insertions(+), 65 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index 99667a779e..fe05d8d3b8 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -328,7 +328,7 @@ namespace Umbraco.Core.Persistence.Repositories //lastly, check if we are a creating a published version , then update the tags table if (entity.Published) { - UpdatePropertyTags(entity); + UpdatePropertyTags(entity, _tagRepository); } ((ICanBeDirty)entity).ResetDirtyProperties(); @@ -470,7 +470,7 @@ namespace Umbraco.Core.Persistence.Repositories //lastly, check if we are a newly published version and then update the tags table if (isNewPublishedVersion) { - UpdatePropertyTags(entity); + UpdatePropertyTags(entity, _tagRepository); } ((ICanBeDirty)entity).ResetDirtyProperties(); @@ -569,34 +569,6 @@ namespace Umbraco.Core.Persistence.Repositories #endregion - /// - /// Updates the tag repository with any tag enabled properties and their values - /// - /// - private void UpdatePropertyTags(IContentBase entity) - { - foreach (var tagProp in entity.Properties.Where(x => x.TagSupport.Enable)) - { - if (tagProp.TagSupport.Behavior == PropertyTagBehavior.Remove) - { - //remove the specific tags - _tagRepository.RemovePublishedTagsFromProperty( - entity.Id, - tagProp.Alias, - tagProp.TagSupport.Tags.Select(x => new Tag { Text = x.Item1, Group = x.Item2 })); - } - else - { - //assign the tags - _tagRepository.AssignPublishedTagsToProperty( - entity.Id, - tagProp.Alias, - tagProp.TagSupport.Tags.Select(x => new Tag { Text = x.Item1, Group = x.Item2 }), - tagProp.TagSupport.Behavior == PropertyTagBehavior.Replace); - } - } - } - /// /// Private method to create a content object from a DocumentDto, which is used by Get and GetByVersion. /// diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs index b2d2b38cd8..1746e6b68a 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs @@ -254,7 +254,7 @@ namespace Umbraco.Core.Persistence.Repositories property.Id = keyDictionary[property.PropertyTypeId]; } - UpdatePropertyTags(entity); + UpdatePropertyTags(entity, _tagRepository); ((ICanBeDirty)entity).ResetDirtyProperties(); } @@ -333,7 +333,7 @@ namespace Umbraco.Core.Persistence.Repositories } } - UpdatePropertyTags(entity); + UpdatePropertyTags(entity, _tagRepository); ((ICanBeDirty)entity).ResetDirtyProperties(); } @@ -369,35 +369,7 @@ namespace Umbraco.Core.Persistence.Repositories } #endregion - - /// - /// Updates the tag repository with any tag enabled properties and their values - /// - /// - private void UpdatePropertyTags(IContentBase entity) - { - foreach (var tagProp in entity.Properties.Where(x => x.TagSupport.Enable)) - { - if (tagProp.TagSupport.Behavior == PropertyTagBehavior.Remove) - { - //remove the specific tags - _tagRepository.RemovePublishedTagsFromProperty( - entity.Id, - tagProp.Alias, - tagProp.TagSupport.Tags.Select(x => new Tag { Text = x.Item1, Group = x.Item2 })); - } - else - { - //assign the tags - _tagRepository.AssignPublishedTagsToProperty( - entity.Id, - tagProp.Alias, - tagProp.TagSupport.Tags.Select(x => new Tag { Text = x.Item1, Group = x.Item2 }), - tagProp.TagSupport.Behavior == PropertyTagBehavior.Replace); - } - } - } - + private PropertyCollection GetPropertyCollection(int id, Guid versionId, IMediaType contentType, DateTime createDate, DateTime updateDate) { var sql = new Sql(); diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs index 67273312dd..8854f169cd 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs @@ -21,16 +21,24 @@ namespace Umbraco.Core.Persistence.Repositories internal class MemberRepository : VersionableRepositoryBase, IMemberRepository { private readonly IMemberTypeRepository _memberTypeRepository; + private readonly ITagsRepository _tagRepository; - public MemberRepository(IDatabaseUnitOfWork work, IMemberTypeRepository memberTypeRepository) : base(work) + public MemberRepository(IDatabaseUnitOfWork work, IMemberTypeRepository memberTypeRepository, ITagsRepository tagRepository) + : base(work) { + if (memberTypeRepository == null) throw new ArgumentNullException("memberTypeRepository"); + if (tagRepository == null) throw new ArgumentNullException("tagRepository"); _memberTypeRepository = memberTypeRepository; + _tagRepository = tagRepository; } - public MemberRepository(IDatabaseUnitOfWork work, IRepositoryCacheProvider cache, IMemberTypeRepository memberTypeRepository) + public MemberRepository(IDatabaseUnitOfWork work, IRepositoryCacheProvider cache, IMemberTypeRepository memberTypeRepository, ITagsRepository tagRepository) : base(work, cache) { + if (memberTypeRepository == null) throw new ArgumentNullException("memberTypeRepository"); + if (tagRepository == null) throw new ArgumentNullException("tagRepository"); _memberTypeRepository = memberTypeRepository; + _tagRepository = tagRepository; } #region Overrides of RepositoryBase @@ -247,6 +255,8 @@ namespace Umbraco.Core.Persistence.Repositories property.Id = keyDictionary[property.PropertyTypeId]; } + UpdatePropertyTags(entity, _tagRepository); + ((Member)entity).ResetDirtyProperties(); } @@ -325,6 +335,8 @@ namespace Umbraco.Core.Persistence.Repositories } } + UpdatePropertyTags(entity, _tagRepository); + ((ICanBeDirty)entity).ResetDirtyProperties(); } diff --git a/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs index 1b3ff63eea..0c89f747a2 100644 --- a/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Umbraco.Core.Models; using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence.Caching; @@ -90,5 +91,34 @@ namespace Umbraco.Core.Persistence.Repositories protected abstract void PerformDeleteVersion(int id, Guid versionId); #endregion + + /// + /// Updates the tag repository with any tag enabled properties and their values + /// + /// + /// + protected void UpdatePropertyTags(IContentBase entity, ITagsRepository tagRepo) + { + foreach (var tagProp in entity.Properties.Where(x => x.TagSupport.Enable)) + { + if (tagProp.TagSupport.Behavior == PropertyTagBehavior.Remove) + { + //remove the specific tags + tagRepo.RemovePublishedTagsFromProperty( + entity.Id, + tagProp.Alias, + tagProp.TagSupport.Tags.Select(x => new Tag { Text = x.Item1, Group = x.Item2 })); + } + else + { + //assign the tags + tagRepo.AssignPublishedTagsToProperty( + entity.Id, + tagProp.Alias, + tagProp.TagSupport.Tags.Select(x => new Tag { Text = x.Item1, Group = x.Item2 }), + tagProp.TagSupport.Behavior == PropertyTagBehavior.Replace); + } + } + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/RepositoryFactory.cs b/src/Umbraco.Core/Persistence/RepositoryFactory.cs index c4e71ac711..89d04bf4e7 100644 --- a/src/Umbraco.Core/Persistence/RepositoryFactory.cs +++ b/src/Umbraco.Core/Persistence/RepositoryFactory.cs @@ -155,7 +155,10 @@ namespace Umbraco.Core.Persistence internal virtual IMemberRepository CreateMemberRepository(IDatabaseUnitOfWork uow) { - return new MemberRepository(uow, _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : RuntimeCacheProvider.Current, CreateMemberTypeRepository(uow)); + return new MemberRepository(uow, + _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : RuntimeCacheProvider.Current, + CreateMemberTypeRepository(uow), + CreateTagsRepository(uow)); } internal virtual IMemberTypeRepository CreateMemberTypeRepository(IDatabaseUnitOfWork uow) diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs index 8c59ed5e7f..fa75070ad4 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs @@ -32,7 +32,8 @@ namespace Umbraco.Tests.Persistence.Repositories private MemberRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out MemberTypeRepository memberTypeRepository) { memberTypeRepository = new MemberTypeRepository(unitOfWork, NullCacheProvider.Current); - var repository = new MemberRepository(unitOfWork, NullCacheProvider.Current, memberTypeRepository); + var tagRepo = new TagsRepository(unitOfWork, NullCacheProvider.Current); + var repository = new MemberRepository(unitOfWork, NullCacheProvider.Current, memberTypeRepository, tagRepo); return repository; }