Merge pull request #616 from AndyButland/u4-6061

U4-6061 - NodeCount for tags is not populated
This commit is contained in:
Shannon Deminick
2015-01-06 15:44:47 +11:00
4 changed files with 31 additions and 19 deletions

View File

@@ -5,6 +5,7 @@
/// </summary>
public enum TaggableObjectTypes
{
All,
Content,
Media,
Member

View File

@@ -168,8 +168,6 @@ namespace Umbraco.Core.Persistence.Repositories
public IEnumerable<TaggedEntity> GetTaggedEntitiesByTagGroup(TaggableObjectTypes objectType, string tagGroup)
{
var nodeObjectType = GetNodeObjectType(objectType);
var sql = new Sql()
.Select("cmsTagRelationship.nodeId, cmsPropertyType.Alias, cmsPropertyType.id as propertyTypeId, cmsTags.tag, cmsTags.id as tagId, cmsTags." + SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName("group"))
.From<TagDto>()
@@ -181,17 +179,21 @@ namespace Umbraco.Core.Persistence.Repositories
.On<PropertyTypeDto, TagRelationshipDto>(left => left.Id, right => right.PropertyTypeId)
.InnerJoin<NodeDto>()
.On<NodeDto, ContentDto>(left => left.NodeId, right => right.NodeId)
.Where<NodeDto>(dto => dto.NodeObjectType == nodeObjectType)
.Where<TagDto>(dto => dto.Group == tagGroup);
if (objectType != TaggableObjectTypes.All)
{
var nodeObjectType = GetNodeObjectType(objectType);
sql = sql
.Where<NodeDto>(dto => dto.NodeObjectType == nodeObjectType);
}
return CreateTaggedEntityCollection(
ApplicationContext.Current.DatabaseContext.Database.Fetch<dynamic>(sql));
}
public IEnumerable<TaggedEntity> GetTaggedEntitiesByTag(TaggableObjectTypes objectType, string tag, string tagGroup = null)
{
var nodeObjectType = GetNodeObjectType(objectType);
var sql = new Sql()
.Select("cmsTagRelationship.nodeId, cmsPropertyType.Alias, cmsPropertyType.id as propertyTypeId, cmsTags.tag, cmsTags.id as tagId, cmsTags." + SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName("group"))
.From<TagDto>()
@@ -203,9 +205,15 @@ namespace Umbraco.Core.Persistence.Repositories
.On<PropertyTypeDto, TagRelationshipDto>(left => left.Id, right => right.PropertyTypeId)
.InnerJoin<NodeDto>()
.On<NodeDto, ContentDto>(left => left.NodeId, right => right.NodeId)
.Where<NodeDto>(dto => dto.NodeObjectType == nodeObjectType)
.Where<TagDto>(dto => dto.Tag == tag);
if (objectType != TaggableObjectTypes.All)
{
var nodeObjectType = GetNodeObjectType(objectType);
sql = sql
.Where<NodeDto>(dto => dto.NodeObjectType == nodeObjectType);
}
if (tagGroup.IsNullOrWhiteSpace() == false)
{
sql = sql.Where<TagDto>(dto => dto.Group == tagGroup);
@@ -233,8 +241,6 @@ namespace Umbraco.Core.Persistence.Repositories
public IEnumerable<ITag> GetTagsForEntityType(TaggableObjectTypes objectType, string group = null)
{
var nodeObjectType = GetNodeObjectType(objectType);
var sql = GetTagsQuerySelect(true);
sql = ApplyRelationshipJoinToTagsQuery(sql);
@@ -243,8 +249,14 @@ namespace Umbraco.Core.Persistence.Repositories
.InnerJoin<ContentDto>()
.On<ContentDto, TagRelationshipDto>(left => left.NodeId, right => right.NodeId)
.InnerJoin<NodeDto>()
.On<NodeDto, ContentDto>(left => left.NodeId, right => right.NodeId)
.Where<NodeDto>(dto => dto.NodeObjectType == nodeObjectType);
.On<NodeDto, ContentDto>(left => left.NodeId, right => right.NodeId);
if (objectType != TaggableObjectTypes.All)
{
var nodeObjectType = GetNodeObjectType(objectType);
sql = sql
.Where<NodeDto>(dto => dto.NodeObjectType == nodeObjectType);
}
sql = ApplyGroupFilterToTagsQuery(sql, group);

View File

@@ -133,14 +133,7 @@ namespace Umbraco.Core.Services
{
using (var repository = _repositoryFactory.CreateTagRepository(_uowProvider.GetUnitOfWork()))
{
if (tagGroup.IsNullOrWhiteSpace())
{
return repository.GetAll();
}
var query = Query<ITag>.Builder.Where(x => x.Group == tagGroup);
var definitions = repository.GetByQuery(query);
return definitions;
return repository.GetTagsForEntityType(TaggableObjectTypes.All, tagGroup);
}
}

View File

@@ -658,14 +658,20 @@ namespace Umbraco.Tests.Persistence.Repositories
new[]
{
new Tag {Text = "tag1", Group = "test"},
new Tag {Text = "tag2", Group = "test1"}
new Tag {Text = "tag4", Group = "test1"}
}, false);
var result1 = repository.GetTagsForEntityType(TaggableObjectTypes.Content).ToArray();
var result2 = repository.GetTagsForEntityType(TaggableObjectTypes.Media).ToArray();
var result3 = repository.GetTagsForEntityType(TaggableObjectTypes.All).ToArray();
Assert.AreEqual(3, result1.Count());
Assert.AreEqual(2, result2.Count());
Assert.AreEqual(4, result3.Count());
Assert.AreEqual(1, result1.Single(x => x.Text == "tag1").NodeCount);
Assert.AreEqual(2, result3.Single(x => x.Text == "tag1").NodeCount);
Assert.AreEqual(1, result3.Single(x => x.Text == "tag4").NodeCount);
}
}