diff --git a/src/Umbraco.Web.BackOffice/Controllers/MemberTypeController.cs b/src/Umbraco.Web.BackOffice/Controllers/MemberTypeController.cs
index 7c1f6f4187..724e17adb1 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/MemberTypeController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/MemberTypeController.cs
@@ -252,5 +252,19 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
return display;
}
+
+ ///
+ /// Copy the member type
+ ///
+ ///
+ ///
+ [Authorize(Policy = AuthorizationPolicies.TreeAccessMemberTypes)]
+ public IActionResult PostCopy(MoveOrCopy copy)
+ {
+ return PerformCopy(
+ copy,
+ i => _memberTypeService.Get(i),
+ (type, i) => _memberTypeService.Copy(type, i));
+ }
}
}
diff --git a/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs
index 0559a17a53..858a1c8184 100644
--- a/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs
@@ -26,8 +26,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees
UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection,
IMenuItemCollectionFactory menuItemCollectionFactory,
IMemberGroupService memberGroupService,
- IEventAggregator eventAggregator)
- : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, eventAggregator)
+ IEventAggregator eventAggregator,
+ IMemberTypeService memberTypeService)
+ : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, eventAggregator, memberTypeService)
=> _memberGroupService = memberGroupService;
protected override IEnumerable GetTreeNodesFromService(string id, FormCollection queryStrings)
diff --git a/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs b/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs
index 94c84accab..64e8081dec 100644
--- a/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs
@@ -1,6 +1,8 @@
+using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Actions;
using Umbraco.Cms.Core.Events;
@@ -8,6 +10,8 @@ using Umbraco.Cms.Core.Models.Trees;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Trees;
using Umbraco.Cms.Web.Common.Attributes;
+using Umbraco.Cms.Web.Common.DependencyInjection;
+using Umbraco.Extensions;
using Constants = Umbraco.Cms.Core.Constants;
namespace Umbraco.Cms.Web.BackOffice.Trees
@@ -16,21 +20,46 @@ namespace Umbraco.Cms.Web.BackOffice.Trees
[CoreTree]
public abstract class MemberTypeAndGroupTreeControllerBase : TreeController
{
+ private readonly IMemberTypeService _memberTypeService;
+
public IMenuItemCollectionFactory MenuItemCollectionFactory { get; }
protected MemberTypeAndGroupTreeControllerBase(
ILocalizedTextService localizedTextService,
UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection,
IMenuItemCollectionFactory menuItemCollectionFactory,
- IEventAggregator eventAggregator)
+ IEventAggregator eventAggregator,
+ IMemberTypeService memberTypeService)
: base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator)
{
MenuItemCollectionFactory = menuItemCollectionFactory;
+
+ _memberTypeService = memberTypeService;
+ }
+
+ [Obsolete("Use ctor injecting IMemberTypeService")]
+ protected MemberTypeAndGroupTreeControllerBase(
+ ILocalizedTextService localizedTextService,
+ UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection,
+ IMenuItemCollectionFactory menuItemCollectionFactory,
+ IEventAggregator eventAggregator)
+ : this(
+ localizedTextService,
+ umbracoApiControllerTypeCollection,
+ menuItemCollectionFactory,
+ eventAggregator,
+ StaticServiceProvider.Instance.GetRequiredService())
+ {
}
protected override ActionResult GetTreeNodes(string id, FormCollection queryStrings)
{
var nodes = new TreeNodeCollection();
+
+ // if the request is for folders only then just return
+ if (queryStrings["foldersonly"].ToString().IsNullOrWhiteSpace() == false && queryStrings["foldersonly"].ToString() == "1")
+ return nodes;
+
nodes.AddRange(GetTreeNodesFromService(id, queryStrings));
return nodes;
}
@@ -48,7 +77,13 @@ namespace Umbraco.Cms.Web.BackOffice.Trees
}
else
{
- //delete member type/group
+ var memberType = _memberTypeService.Get(int.Parse(id));
+ if (memberType != null)
+ {
+ menu.Items.Add(LocalizedTextService, opensDialog: true);
+ }
+
+ // delete member type/group
menu.Items.Add(LocalizedTextService, opensDialog: true);
}
diff --git a/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs
index 5595365e2b..318cce629d 100644
--- a/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs
@@ -32,13 +32,12 @@ namespace Umbraco.Cms.Web.BackOffice.Trees
UmbracoTreeSearcher treeSearcher,
IMemberTypeService memberTypeService,
IEventAggregator eventAggregator)
- : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, eventAggregator)
+ : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, eventAggregator, memberTypeService)
{
_treeSearcher = treeSearcher;
_memberTypeService = memberTypeService;
}
-
protected override ActionResult CreateRootNode(FormCollection queryStrings)
{
var rootResult = base.CreateRootNode(queryStrings);