Adds tag support to member repository.

This commit is contained in:
Shannon
2013-10-08 12:29:56 +11:00
parent 0b8b413f2f
commit e6908c7678
6 changed files with 55 additions and 65 deletions

View File

@@ -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
/// <summary>
/// Updates the tag repository with any tag enabled properties and their values
/// </summary>
/// <param name="entity"></param>
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);
}
}
}
/// <summary>
/// Private method to create a content object from a DocumentDto, which is used by Get and GetByVersion.
/// </summary>

View File

@@ -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
/// <summary>
/// Updates the tag repository with any tag enabled properties and their values
/// </summary>
/// <param name="entity"></param>
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();

View File

@@ -21,16 +21,24 @@ namespace Umbraco.Core.Persistence.Repositories
internal class MemberRepository : VersionableRepositoryBase<int, IMember>, 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<int, IMembershipUser>
@@ -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();
}

View File

@@ -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
/// <summary>
/// Updates the tag repository with any tag enabled properties and their values
/// </summary>
/// <param name="entity"></param>
/// <param name="tagRepo"></param>
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);
}
}
}
}
}

View File

@@ -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)

View File

@@ -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;
}