From 11f8628279d69170eea8bd2abc1b169713c40069 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sat, 16 May 2020 19:51:57 +0200 Subject: [PATCH] Lock core relation types (#8022) --- src/Umbraco.Core/Models/RelationTypeExtensions.cs | 12 ++++++++++++ src/Umbraco.Core/Umbraco.Core.csproj | 1 + .../src/views/relationtypes/edit.html | 1 + .../Models/ContentEditing/RelationTypeDisplay.cs | 3 +++ .../Models/Mapping/RelationMapDefinition.cs | 2 ++ src/Umbraco.Web/Trees/RelationTypeTreeController.cs | 8 +++++--- 6 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 src/Umbraco.Core/Models/RelationTypeExtensions.cs diff --git a/src/Umbraco.Core/Models/RelationTypeExtensions.cs b/src/Umbraco.Core/Models/RelationTypeExtensions.cs new file mode 100644 index 0000000000..05f438de7a --- /dev/null +++ b/src/Umbraco.Core/Models/RelationTypeExtensions.cs @@ -0,0 +1,12 @@ +namespace Umbraco.Core.Models +{ + internal static class RelationTypeExtensions + { + internal static bool IsSystemRelationType(this IRelationType relationType) => + relationType.Alias == Constants.Conventions.RelationTypes.RelatedDocumentAlias + || relationType.Alias == Constants.Conventions.RelationTypes.RelatedMediaAlias + || relationType.Alias == Constants.Conventions.RelationTypes.RelateDocumentOnCopyAlias + || relationType.Alias == Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias + || relationType.Alias == Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias; + } +} diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index f15b098473..b2a8ea2a6d 100755 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -136,6 +136,7 @@ + diff --git a/src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.html b/src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.html index 35e7aa5176..4b51c44c18 100644 --- a/src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.html +++ b/src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.html @@ -6,6 +6,7 @@ (); } + [DataMember(Name = "isSystemRelationType")] + public bool IsSystemRelationType { get; set; } + /// /// Gets or sets a boolean indicating whether the RelationType is Bidirectional (true) or Parent to Child (false) /// diff --git a/src/Umbraco.Web/Models/Mapping/RelationMapDefinition.cs b/src/Umbraco.Web/Models/Mapping/RelationMapDefinition.cs index d26a867858..a1d782e678 100644 --- a/src/Umbraco.Web/Models/Mapping/RelationMapDefinition.cs +++ b/src/Umbraco.Web/Models/Mapping/RelationMapDefinition.cs @@ -39,6 +39,8 @@ namespace Umbraco.Web.Models.Mapping target.Udi = Udi.Create(Constants.UdiEntityType.RelationType, source.Key); target.Path = "-1," + source.Id; + target.IsSystemRelationType = source.IsSystemRelationType(); + // Set the "friendly" and entity names for the parent and child object types if (source.ParentObjectType.HasValue) { diff --git a/src/Umbraco.Web/Trees/RelationTypeTreeController.cs b/src/Umbraco.Web/Trees/RelationTypeTreeController.cs index aa3206b5e4..0f6f60b98d 100644 --- a/src/Umbraco.Web/Trees/RelationTypeTreeController.cs +++ b/src/Umbraco.Web/Trees/RelationTypeTreeController.cs @@ -5,6 +5,7 @@ using Umbraco.Web.WebApi.Filters; using Umbraco.Core; using Umbraco.Core.Services; using Umbraco.Web.Actions; +using Umbraco.Core.Models; namespace Umbraco.Web.Trees { @@ -16,8 +17,6 @@ namespace Umbraco.Web.Trees { protected override MenuItemCollection GetMenuForNode(string id, FormDataCollection queryStrings) { - //TODO: Do not allow deleting built in types - var menu = new MenuItemCollection(); if (id == Constants.System.RootString) @@ -34,7 +33,10 @@ namespace Umbraco.Web.Trees var relationType = Services.RelationService.GetRelationTypeById(int.Parse(id)); if (relationType == null) return new MenuItemCollection(); - menu.Items.Add(Services.TextService.Localize("actions", ActionDelete.ActionAlias)); + if (relationType.IsSystemRelationType() == false) + { + menu.Items.Add(Services.TextService.Localize("actions", ActionDelete.ActionAlias)); + } return menu; }