From 8134a35fe098edf7ed30a57c56ea151a6095f379 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 20 May 2020 11:59:41 +1000 Subject: [PATCH] Moves ContentType, MemberType, MediaType, etc... less casting, less internals --- .../Models/ContentType.cs | 6 ++--- src/Umbraco.Core/Models/IContentType.cs | 5 ++++ .../Models/Language.cs | 0 .../Models/MediaType.cs | 0 .../Models/MemberType.cs | 25 +++++++++---------- .../Models/ContentEditing/ContentTypeSave.cs | 6 ----- src/Umbraco.Infrastructure/Models/DataType.cs | 2 ++ .../Implement/ContentTypeCommonRepository.cs | 16 ++++++------ .../Implement/ContentTypeRepository.cs | 2 +- .../Models/ContentTypeTests.cs | 1 - .../Mapping/ContentTypeModelMappingTests.cs | 5 +++- 11 files changed, 35 insertions(+), 33 deletions(-) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Models/ContentType.cs (97%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Models/Language.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Models/MediaType.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Models/MemberType.cs (83%) diff --git a/src/Umbraco.Infrastructure/Models/ContentType.cs b/src/Umbraco.Core/Models/ContentType.cs similarity index 97% rename from src/Umbraco.Infrastructure/Models/ContentType.cs rename to src/Umbraco.Core/Models/ContentType.cs index 908ed31434..364544e464 100644 --- a/src/Umbraco.Infrastructure/Models/ContentType.cs +++ b/src/Umbraco.Core/Models/ContentType.cs @@ -65,11 +65,9 @@ namespace Umbraco.Core.Models get { return AllowedTemplates.FirstOrDefault(x => x != null && x.Id == DefaultTemplateId); } } - /// - /// Internal property to store the Id of the default template - /// + [DataMember] - internal int DefaultTemplateId + public int DefaultTemplateId { get => _defaultTemplate; set => SetPropertyValueAndDetectChanges(value, ref _defaultTemplate, nameof(DefaultTemplateId)); diff --git a/src/Umbraco.Core/Models/IContentType.cs b/src/Umbraco.Core/Models/IContentType.cs index 99fffdca7b..e071bd7c82 100644 --- a/src/Umbraco.Core/Models/IContentType.cs +++ b/src/Umbraco.Core/Models/IContentType.cs @@ -7,6 +7,11 @@ namespace Umbraco.Core.Models /// public interface IContentType : IContentTypeComposition { + /// + /// Internal property to store the Id of the default template + /// + int DefaultTemplateId { get; set; } + /// /// Gets the default Template of the ContentType /// diff --git a/src/Umbraco.Infrastructure/Models/Language.cs b/src/Umbraco.Core/Models/Language.cs similarity index 100% rename from src/Umbraco.Infrastructure/Models/Language.cs rename to src/Umbraco.Core/Models/Language.cs diff --git a/src/Umbraco.Infrastructure/Models/MediaType.cs b/src/Umbraco.Core/Models/MediaType.cs similarity index 100% rename from src/Umbraco.Infrastructure/Models/MediaType.cs rename to src/Umbraco.Core/Models/MediaType.cs diff --git a/src/Umbraco.Infrastructure/Models/MemberType.cs b/src/Umbraco.Core/Models/MemberType.cs similarity index 83% rename from src/Umbraco.Infrastructure/Models/MemberType.cs rename to src/Umbraco.Core/Models/MemberType.cs index 1d3e44bc53..00f3870ed9 100644 --- a/src/Umbraco.Infrastructure/Models/MemberType.cs +++ b/src/Umbraco.Core/Models/MemberType.cs @@ -21,7 +21,7 @@ namespace Umbraco.Core.Models public MemberType(IShortStringHelper shortStringHelper, int parentId) : base(shortStringHelper, parentId) { _shortStringHelper = shortStringHelper; - MemberTypePropertyTypes = new Dictionary(); + _memberTypePropertyTypes = new Dictionary(); } public MemberType(IShortStringHelper shortStringHelper, IContentTypeComposition parent) : this(shortStringHelper, parent, null) @@ -32,7 +32,7 @@ namespace Umbraco.Core.Models : base(shortStringHelper, parent, alias) { _shortStringHelper = shortStringHelper; - MemberTypePropertyTypes = new Dictionary(); + _memberTypePropertyTypes = new Dictionary(); } /// @@ -80,8 +80,7 @@ namespace Umbraco.Core.Models /// /// Gets or Sets a Dictionary of Tuples (MemberCanEdit, VisibleOnProfile, IsSensitive) by the PropertyTypes' alias. /// - [DataMember] - internal IDictionary MemberTypePropertyTypes { get; private set; } + private IDictionary _memberTypePropertyTypes; /// /// Gets a boolean indicating whether a Property is editable by the Member. @@ -90,7 +89,7 @@ namespace Umbraco.Core.Models /// public bool MemberCanEditProperty(string propertyTypeAlias) { - return MemberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile) && propertyProfile.IsEditable; + return _memberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile) && propertyProfile.IsEditable; } /// @@ -100,7 +99,7 @@ namespace Umbraco.Core.Models /// public bool MemberCanViewProperty(string propertyTypeAlias) { - return MemberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile) && propertyProfile.IsVisible; + return _memberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile) && propertyProfile.IsVisible; } /// /// Gets a boolean indicating whether a Property is marked as storing sensitive values on the Members profile. @@ -109,7 +108,7 @@ namespace Umbraco.Core.Models /// public bool IsSensitiveProperty(string propertyTypeAlias) { - return MemberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile) && propertyProfile.IsSensitive; + return _memberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile) && propertyProfile.IsSensitive; } /// @@ -119,14 +118,14 @@ namespace Umbraco.Core.Models /// Boolean value, true or false public void SetMemberCanEditProperty(string propertyTypeAlias, bool value) { - if (MemberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile)) + if (_memberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile)) { propertyProfile.IsEditable = value; } else { var tuple = new MemberTypePropertyProfileAccess(false, value, false); - MemberTypePropertyTypes.Add(propertyTypeAlias, tuple); + _memberTypePropertyTypes.Add(propertyTypeAlias, tuple); } } @@ -137,14 +136,14 @@ namespace Umbraco.Core.Models /// Boolean value, true or false public void SetMemberCanViewProperty(string propertyTypeAlias, bool value) { - if (MemberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile)) + if (_memberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile)) { propertyProfile.IsVisible = value; } else { var tuple = new MemberTypePropertyProfileAccess(value, false, false); - MemberTypePropertyTypes.Add(propertyTypeAlias, tuple); + _memberTypePropertyTypes.Add(propertyTypeAlias, tuple); } } @@ -155,14 +154,14 @@ namespace Umbraco.Core.Models /// Boolean value, true or false public void SetIsSensitiveProperty(string propertyTypeAlias, bool value) { - if (MemberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile)) + if (_memberTypePropertyTypes.TryGetValue(propertyTypeAlias, out var propertyProfile)) { propertyProfile.IsSensitive = value; } else { var tuple = new MemberTypePropertyProfileAccess(false, false, true); - MemberTypePropertyTypes.Add(propertyTypeAlias, tuple); + _memberTypePropertyTypes.Add(propertyTypeAlias, tuple); } } } diff --git a/src/Umbraco.Infrastructure/Models/ContentEditing/ContentTypeSave.cs b/src/Umbraco.Infrastructure/Models/ContentEditing/ContentTypeSave.cs index a93be56846..a10fe3ded5 100644 --- a/src/Umbraco.Infrastructure/Models/ContentEditing/ContentTypeSave.cs +++ b/src/Umbraco.Infrastructure/Models/ContentEditing/ContentTypeSave.cs @@ -22,12 +22,6 @@ namespace Umbraco.Web.Models.ContentEditing [DataMember(Name = "compositeContentTypes")] public IEnumerable CompositeContentTypes { get; set; } - [DataMember(Name = "isContainer")] - public bool IsContainer { get; set; } - - [DataMember(Name = "isElement")] - public bool IsElement { get; set; } - [DataMember(Name = "allowAsRoot")] public bool AllowAsRoot { get; set; } diff --git a/src/Umbraco.Infrastructure/Models/DataType.cs b/src/Umbraco.Infrastructure/Models/DataType.cs index 299795f865..fdff6f5e6d 100644 --- a/src/Umbraco.Infrastructure/Models/DataType.cs +++ b/src/Umbraco.Infrastructure/Models/DataType.cs @@ -8,6 +8,8 @@ using Umbraco.Core.PropertyEditors; namespace Umbraco.Core.Models { + // TODO: This should exist within Umbraco.Core not infrastructure however there's a dependency on Newtonsoft here, how can we refactor that requirement? + /// /// Implements . /// diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeCommonRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeCommonRepository.cs index 6ea92e4bb5..58e05fa272 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeCommonRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeCommonRepository.cs @@ -136,7 +136,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement foreach (var c in contentTypes.Values) { - if (!(c is ContentType contentType)) continue; + if (!(c is IContentType contentType)) continue; // map allowed templates var allowedTemplates = new List(); @@ -247,7 +247,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement contentType.NoGroupPropertyTypes = noGroupPropertyTypes; // ensure builtin properties - if (contentType is MemberType memberType) + if (contentType is IMemberType memberType) { // ensure that the group exists (ok if it already exists) memberType.AddPropertyGroup(Constants.Conventions.Member.StandardPropertiesGroupName); @@ -259,8 +259,9 @@ namespace Umbraco.Core.Persistence.Repositories.Implement if (added) { - var access = new MemberTypePropertyProfileAccess(false, false, false); - memberType.MemberTypePropertyTypes[alias] = access; + memberType.SetIsSensitiveProperty(alias, false); + memberType.SetMemberCanEditProperty(alias, false); + memberType.SetMemberCanViewProperty(alias, false); } } } @@ -285,10 +286,11 @@ namespace Umbraco.Core.Persistence.Repositories.Implement var readonlyStorageType = builtinProperties.TryGetValue(dto.Alias, out var propertyType); var storageType = readonlyStorageType ? propertyType.ValueStorageType : Enum.Parse(dto.DataTypeDto.DbType); - if (contentType is MemberType memberType) + if (contentType is IMemberType memberType) { - var access = new MemberTypePropertyProfileAccess(dto.ViewOnProfile, dto.CanEdit, dto.IsSensitive); - memberType.MemberTypePropertyTypes[dto.Alias] = access; + memberType.SetIsSensitiveProperty(dto.Alias, dto.IsSensitive); + memberType.SetMemberCanEditProperty(dto.Alias, dto.CanEdit); + memberType.SetMemberCanViewProperty(dto.Alias, dto.ViewOnProfile); } return new PropertyType(_shortStringHelper, dto.DataTypeDto.EditorAlias, storageType, readonlyStorageType, dto.Alias) diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs index 38b7413f74..61aabdc1b5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs @@ -247,7 +247,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement Database.Delete("WHERE contentTypeNodeId = @Id", new { Id = entity.Id }); // we could do it all in foreach if we assume that the default template is an allowed template?? - var defaultTemplateId = ((ContentType) entity).DefaultTemplateId; + var defaultTemplateId = entity.DefaultTemplateId; if (defaultTemplateId > 0) { Database.Insert(new ContentTypeTemplateDto diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/ContentTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/ContentTypeTests.cs index 6a50653a3e..d5ba104d78 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/ContentTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/ContentTypeTests.cs @@ -275,7 +275,6 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models Assert.AreEqual(clone.Thumbnail, contentType.Thumbnail); Assert.AreEqual(clone.Icon, contentType.Icon); Assert.AreEqual(clone.IsContainer, contentType.IsContainer); - Assert.AreEqual(clone.MemberTypePropertyTypes, contentType.MemberTypePropertyTypes); // This double verifies by reflection var allProps = clone.GetType().GetProperties(); diff --git a/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs b/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs index d30d128b54..06879268d5 100644 --- a/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs +++ b/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs @@ -302,7 +302,10 @@ namespace Umbraco.Tests.Models.Mapping // setup the mocks to return the data we want to test against... var memberType = MockedContentTypes.CreateSimpleMemberType(); - memberType.MemberTypePropertyTypes[memberType.PropertyTypes.Last().Alias] = new MemberTypePropertyProfileAccess(true, true, true); + var alias = memberType.PropertyTypes.Last().Alias; + memberType.SetIsSensitiveProperty(alias, true); + memberType.SetMemberCanEditProperty(alias, true); + memberType.SetMemberCanViewProperty(alias, true); MockedContentTypes.EnsureAllIds(memberType, 8888);