diff --git a/src/Umbraco.Core/Models/ContentEditing/ContentPropertyBasic.cs b/src/Umbraco.Core/Models/ContentEditing/ContentPropertyBasic.cs index c4a3d7791b..c9ac6b2847 100644 --- a/src/Umbraco.Core/Models/ContentEditing/ContentPropertyBasic.cs +++ b/src/Umbraco.Core/Models/ContentEditing/ContentPropertyBasic.cs @@ -68,4 +68,11 @@ public class ContentPropertyBasic /// [IgnoreDataMember] public IDataEditor? PropertyEditor { get; set; } + + /// + /// Used internally during model mapping + /// + [DataMember(Name = "supportsReadOnly")] + [ReadOnly(true)] + public bool SupportsReadOnly { get; set; } } diff --git a/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs b/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs index 5ca8a7ad86..ca8c2f1fc2 100644 --- a/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs +++ b/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs @@ -40,7 +40,4 @@ public class ContentPropertyDisplay : ContentPropertyBasic [DataMember(Name = "readonly")] public bool Readonly { get; set; } - - [DataMember(Name = "supportsReadOnly")] - public bool SupportsReadOnly { get; set; } } diff --git a/src/Umbraco.Core/Models/Mapping/ContentPropertyBasicMapper.cs b/src/Umbraco.Core/Models/Mapping/ContentPropertyBasicMapper.cs index d3502cf887..9cda25fbbb 100644 --- a/src/Umbraco.Core/Models/Mapping/ContentPropertyBasicMapper.cs +++ b/src/Umbraco.Core/Models/Mapping/ContentPropertyBasicMapper.cs @@ -59,6 +59,7 @@ internal class ContentPropertyBasicMapper dest.Alias = property.Alias; dest.PropertyEditor = editor; dest.Editor = editor.Alias; + dest.SupportsReadOnly = editor.SupportsReadOnly; dest.DataTypeKey = property.PropertyType!.DataTypeKey; // if there's a set of property aliases specified, we will check if the current property's value should be mapped. diff --git a/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs b/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs index 6b0556d455..ae9876628f 100644 --- a/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs +++ b/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs @@ -117,8 +117,6 @@ public class MemberTabsAndPropertiesMapper : TabsAndPropertiesMapper prop.IsSensitive = true; // mark this property as readonly so that it does not post any data prop.Readonly = true; - // this is readonly so support read-only mode - prop.SupportsReadOnly = true; // replace this editor with a sensitive value prop.View = "sensitivevalue"; // clear the value @@ -235,7 +233,6 @@ public class MemberTabsAndPropertiesMapper : TabsAndPropertiesMapper View = "boolean", IsSensitive = true, Readonly = false, - SupportsReadOnly = true, }, new() @@ -246,7 +243,6 @@ public class MemberTabsAndPropertiesMapper : TabsAndPropertiesMapper View = "boolean", IsSensitive = true, Readonly = !member.IsLockedOut, // IMember.IsLockedOut can't be set to true, so make it readonly when that's the case (you can only unlock) - SupportsReadOnly = true, }, new() @@ -287,7 +283,6 @@ public class MemberTabsAndPropertiesMapper : TabsAndPropertiesMapper property.Value = null; property.View = "sensitivevalue"; property.Readonly = true; - property.SupportsReadOnly = true; } } } diff --git a/src/Umbraco.Core/PropertyEditors/DataEditor.cs b/src/Umbraco.Core/PropertyEditors/DataEditor.cs index 115b6a2371..b2b95f475b 100644 --- a/src/Umbraco.Core/PropertyEditors/DataEditor.cs +++ b/src/Umbraco.Core/PropertyEditors/DataEditor.cs @@ -75,6 +75,10 @@ public class DataEditor : IDataEditor [DataMember(Name = "alias", IsRequired = true)] public string Alias { get; set; } + /// + [DataMember(Name = "supportsReadOnly", IsRequired = true)] + public bool SupportsReadOnly { get; set; } + /// [IgnoreDataMember] public EditorType Type { get; } diff --git a/src/Umbraco.Core/PropertyEditors/IDataEditor.cs b/src/Umbraco.Core/PropertyEditors/IDataEditor.cs index 6f72f29cf3..0569f8ab9a 100644 --- a/src/Umbraco.Core/PropertyEditors/IDataEditor.cs +++ b/src/Umbraco.Core/PropertyEditors/IDataEditor.cs @@ -14,6 +14,8 @@ public interface IDataEditor : IDiscoverable /// string Alias { get; } + bool SupportsReadOnly => false; + /// /// Gets the type of the editor. /// diff --git a/src/Umbraco.Infrastructure/PropertyEditors/TextboxPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/TextboxPropertyEditor.cs index 5d160198c9..4f81bf410a 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/TextboxPropertyEditor.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/TextboxPropertyEditor.cs @@ -43,6 +43,7 @@ public class TextboxPropertyEditor : DataEditor { _ioHelper = ioHelper; _editorConfigurationParser = editorConfigurationParser; + SupportsReadOnly = true; } ///