diff --git a/src/Umbraco.Core/Models/TaggableObjectTypes.cs b/src/Umbraco.Core/Models/TaggableObjectTypes.cs index be019410e5..ae54bc02bd 100644 --- a/src/Umbraco.Core/Models/TaggableObjectTypes.cs +++ b/src/Umbraco.Core/Models/TaggableObjectTypes.cs @@ -5,6 +5,7 @@ /// public enum TaggableObjectTypes { + All, Content, Media, Member diff --git a/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs index 344d9f4c43..ac39d9556e 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs @@ -168,8 +168,6 @@ namespace Umbraco.Core.Persistence.Repositories public IEnumerable 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() @@ -181,17 +179,21 @@ namespace Umbraco.Core.Persistence.Repositories .On(left => left.Id, right => right.PropertyTypeId) .InnerJoin() .On(left => left.NodeId, right => right.NodeId) - .Where(dto => dto.NodeObjectType == nodeObjectType) .Where(dto => dto.Group == tagGroup); + if (objectType != TaggableObjectTypes.All) + { + var nodeObjectType = GetNodeObjectType(objectType); + sql = sql + .Where(dto => dto.NodeObjectType == nodeObjectType); + } + return CreateTaggedEntityCollection( ApplicationContext.Current.DatabaseContext.Database.Fetch(sql)); } public IEnumerable 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() @@ -203,9 +205,15 @@ namespace Umbraco.Core.Persistence.Repositories .On(left => left.Id, right => right.PropertyTypeId) .InnerJoin() .On(left => left.NodeId, right => right.NodeId) - .Where(dto => dto.NodeObjectType == nodeObjectType) .Where(dto => dto.Tag == tag); + if (objectType != TaggableObjectTypes.All) + { + var nodeObjectType = GetNodeObjectType(objectType); + sql = sql + .Where(dto => dto.NodeObjectType == nodeObjectType); + } + if (tagGroup.IsNullOrWhiteSpace() == false) { sql = sql.Where(dto => dto.Group == tagGroup); @@ -233,8 +241,6 @@ namespace Umbraco.Core.Persistence.Repositories public IEnumerable 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() .On(left => left.NodeId, right => right.NodeId) .InnerJoin() - .On(left => left.NodeId, right => right.NodeId) - .Where(dto => dto.NodeObjectType == nodeObjectType); + .On(left => left.NodeId, right => right.NodeId); + + if (objectType != TaggableObjectTypes.All) + { + var nodeObjectType = GetNodeObjectType(objectType); + sql = sql + .Where(dto => dto.NodeObjectType == nodeObjectType); + } sql = ApplyGroupFilterToTagsQuery(sql, group); diff --git a/src/Umbraco.Core/Services/TagService.cs b/src/Umbraco.Core/Services/TagService.cs index cf477a125b..a1339ce360 100644 --- a/src/Umbraco.Core/Services/TagService.cs +++ b/src/Umbraco.Core/Services/TagService.cs @@ -133,14 +133,7 @@ namespace Umbraco.Core.Services { using (var repository = _repositoryFactory.CreateTagRepository(_uowProvider.GetUnitOfWork())) { - if (tagGroup.IsNullOrWhiteSpace()) - { - return repository.GetAll(); - } - - var query = Query.Builder.Where(x => x.Group == tagGroup); - var definitions = repository.GetByQuery(query); - return definitions; + return repository.GetTagsForEntityType(TaggableObjectTypes.All, tagGroup); } } diff --git a/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs index bd35197193..c3524580dd 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs @@ -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); } }