From 1d8e0eb280371729dbc083ca6ac979e9f70b7874 Mon Sep 17 00:00:00 2001 From: Shannon Date: Thu, 19 May 2016 18:16:47 +0200 Subject: [PATCH] Merge branch 'u4-8192' of https://github.com/AndyButland/Umbraco-CMS into AndyButland-u4-8192 # Conflicts: # src/Umbraco.Web.UI/Umbraco.Web.UI.csproj --- src/Umbraco.Core/Constants-Applications.cs | 6 +- .../common/resources/membergroup.resource.js | 73 +++++++++++ .../views/membergroups/delete.controller.js | 33 +++++ .../src/views/membergroups/delete.html | 12 ++ .../src/views/membergroups/edit.controller.js | 115 ++++++++++++++++++ .../src/views/membergroups/edit.html | 48 ++++++++ .../views/membertypes/create.controller.js | 2 +- .../views/membertypes/delete.controller.js | 2 +- .../src/views/membertypes/edit.controller.js | 2 +- src/Umbraco.Web.UI/Umbraco.Web.UI.csproj | 7 +- src/Umbraco.Web.UI/config/trees.config | 2 +- src/Umbraco.Web.UI/umbraco/config/lang/en.xml | 2 + .../umbraco/config/lang/en_us.xml | 2 + .../umbraco/members/EditMemberGroup.aspx | 22 ---- .../Editors/BackOfficeController.cs | 4 + .../Editors/MemberGroupController.cs | 101 +++++++++++++++ .../Editors/MemberTypeController.cs | 14 +-- .../ContentEditing/MemberGroupDisplay.cs | 21 ++++ .../Models/ContentEditing/MemberGroupSave.cs | 9 ++ .../Models/Mapping/MemberModelMapper.cs | 4 + .../Trees/MemberGroupTreeController.cs | 23 ++++ .../MemberTypeAndGroupTreeControllerBase.cs | 43 +++++++ .../Trees/MemberTypeTreeController.cs | 46 ++----- src/Umbraco.Web/Umbraco.Web.csproj | 16 +-- .../umbraco/Trees/loadMemberGroups.cs | 75 ------------ .../umbraco/members/EditMemberGroup.aspx | 22 ---- .../umbraco/members/EditMemberGroup.aspx.cs | 96 --------------- .../members/EditMemberGroup.aspx.designer.cs | 51 -------- 28 files changed, 519 insertions(+), 334 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/common/resources/membergroup.resource.js create mode 100644 src/Umbraco.Web.UI.Client/src/views/membergroups/delete.controller.js create mode 100644 src/Umbraco.Web.UI.Client/src/views/membergroups/delete.html create mode 100644 src/Umbraco.Web.UI.Client/src/views/membergroups/edit.controller.js create mode 100644 src/Umbraco.Web.UI.Client/src/views/membergroups/edit.html delete mode 100644 src/Umbraco.Web.UI/umbraco/members/EditMemberGroup.aspx create mode 100644 src/Umbraco.Web/Editors/MemberGroupController.cs create mode 100644 src/Umbraco.Web/Models/ContentEditing/MemberGroupDisplay.cs create mode 100644 src/Umbraco.Web/Models/ContentEditing/MemberGroupSave.cs create mode 100644 src/Umbraco.Web/Trees/MemberGroupTreeController.cs create mode 100644 src/Umbraco.Web/Trees/MemberTypeAndGroupTreeControllerBase.cs delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadMemberGroups.cs delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx.cs delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx.designer.cs diff --git a/src/Umbraco.Core/Constants-Applications.cs b/src/Umbraco.Core/Constants-Applications.cs index 2feae59bad..f24fb61610 100644 --- a/src/Umbraco.Core/Constants-Applications.cs +++ b/src/Umbraco.Core/Constants-Applications.cs @@ -90,12 +90,16 @@ /// public const string MediaTypes = "mediaTypes"; - /// /// alias for the member type tree. /// public const string MemberTypes = "memberTypes"; + /// + /// alias for the member group tree. + /// + public const string MemberGroups = "memberGroups"; + /// /// alias for the template tree. /// diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/membergroup.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/membergroup.resource.js new file mode 100644 index 0000000000..8bfd5bc998 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/common/resources/membergroup.resource.js @@ -0,0 +1,73 @@ +/** + * @ngdoc service + * @name umbraco.resources.memberGroupResource + * @description Loads in data for member groups + **/ +function memberGroupResource($q, $http, umbRequestHelper) { + + return { + + //return all member types + getGroups: function () { + + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "memberGroupApiBaseUrl", + "GetAllGroups")), + "Failed to retrieve data for member groups"); + }, + + getById: function (id) { + + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "memberGroupApiBaseUrl", + "GetById", + [{ id: id }])), + "Failed to retrieve member group"); + }, + + deleteById: function (id) { + + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "memberGroupApiBaseUrl", + "DeleteById", + [{ id: id }])), + "Failed to delete member group"); + }, + + getScaffold: function() { + + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "memberGroupApiBaseUrl", + "GetEmpty")), + "Failed to retrieve data for member group"); + }, + + /** + * @ngdoc method + * @name umbraco.resources.memberGroupResource#save + * @methodOf umbraco.resources.memberGroupResource + * + * @description + * Saves or update a member group + * + * @param {Object} member group object to create/update + * @returns {Promise} resourcePromise object. + * + */ + save: function (memberGroup) { + return umbRequestHelper.resourcePromise( + $http.post(umbRequestHelper.getApiUrl("memberGroupApiBaseUrl", "PostSave"), memberGroup), + "Failed to save data for member group, id: " + memberGroup.id); + } + + }; +} +angular.module('umbraco.resources').factory('memberGroupResource', memberGroupResource); diff --git a/src/Umbraco.Web.UI.Client/src/views/membergroups/delete.controller.js b/src/Umbraco.Web.UI.Client/src/views/membergroups/delete.controller.js new file mode 100644 index 0000000000..22deb6df4b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/membergroups/delete.controller.js @@ -0,0 +1,33 @@ +/** + * @ngdoc controller + * @name Umbraco.Editors.MemberGroups.DeleteController + * @function + * + * @description + * The controller for deleting member groups + */ +function MemberGroupsDeleteController($scope, memberGroupResource, treeService, navigationService) { + + $scope.performDelete = function() { + + //mark it for deletion (used in the UI) + $scope.currentNode.loading = true; + memberGroupResource.deleteById($scope.currentNode.id).then(function () { + $scope.currentNode.loading = false; + + //get the root node before we remove it + var rootNode = treeService.getTreeRoot($scope.currentNode); + + //TODO: Need to sync tree, etc... + treeService.removeNode($scope.currentNode); + navigationService.hideMenu(); + }); + + }; + + $scope.cancel = function() { + navigationService.hideDialog(); + }; +} + +angular.module("umbraco").controller("Umbraco.Editors.MemberGroups.DeleteController", MemberGroupsDeleteController); diff --git a/src/Umbraco.Web.UI.Client/src/views/membergroups/delete.html b/src/Umbraco.Web.UI.Client/src/views/membergroups/delete.html new file mode 100644 index 0000000000..8b637a71dd --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/membergroups/delete.html @@ -0,0 +1,12 @@ +
+
+ +

+ Are you sure you want to delete {{currentNode.name}} ? +

+ + + + +
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/membergroups/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/membergroups/edit.controller.js new file mode 100644 index 0000000000..4a2f20166a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/membergroups/edit.controller.js @@ -0,0 +1,115 @@ +/** + * @ngdoc controller + * @name Umbraco.Editors.MemberGroups.EditController + * @function + * + * @description + * The controller for the member group editor + */ +function MemberGroupsEditController($scope, $routeParams, appState, navigationService, memberGroupResource, contentEditingHelper, formHelper, editorState, eventsService) { + + //setup scope vars + $scope.page = {}; + $scope.page.loading = false; + $scope.page.menu = {}; + $scope.page.menu.currentSection = appState.getSectionState("currentSection"); + $scope.page.menu.currentNode = null; + var evts = []; + + if ($routeParams.create) { + + $scope.page.loading = true; + + //we are creating so get an empty member group item + memberGroupResource.getScaffold() + .then(function(data) { + + $scope.content = data; + + //set a shared state + editorState.set($scope.content); + + $scope.page.loading = false; + + }); + } + else { + loadMemberGroup(); + } + + function loadMemberGroup() { + + $scope.page.loading = true; + + //we are editing so get the content item from the server + memberGroupResource.getById($routeParams.id) + .then(function (data) { + $scope.content = data; + + //share state + editorState.set($scope.content); + + navigationService.syncTree({ tree: "memberGroups", path: data.path }).then(function (syncArgs) { + $scope.page.menu.currentNode = syncArgs.node; + }); + + $scope.page.loading = false; + + }); + } + + $scope.save = function () { + + if (formHelper.submitForm({ scope: $scope, statusMessage: "Saving..." })) { + + $scope.page.saveButtonState = "busy"; + + memberGroupResource.save($scope.content, $scope.preValues, $routeParams.create) + .then(function (data) { + + formHelper.resetForm({ scope: $scope, notifications: data.notifications }); + + contentEditingHelper.handleSuccessfulSave({ + scope: $scope, + savedContent: data + }); + + //share state + editorState.set($scope.content); + + navigationService.syncTree({ tree: "memberGroups", path: data.path, forceReload: true }).then(function (syncArgs) { + $scope.page.menu.currentNode = syncArgs.node; + }); + + $scope.page.saveButtonState = "success"; + + }, function (err) { + + contentEditingHelper.handleSaveError({ + redirectOnFailure: false, + err: err + }); + + $scope.page.saveButtonState = "error"; + + //share state + editorState.set($scope.content); + }); + } + + }; + + evts.push(eventsService.on("app.refreshEditor", function (name, error) { + loadMemberGroup(); + })); + + //ensure to unregister from all events! + $scope.$on('$destroy', function () { + for (var e in evts) { + eventsService.unsubscribe(evts[e]); + } + }); + +} + +angular.module("umbraco").controller("Umbraco.Editors.MemberGroups.EditController", MemberGroupsEditController); diff --git a/src/Umbraco.Web.UI.Client/src/views/membergroups/edit.html b/src/Umbraco.Web.UI.Client/src/views/membergroups/edit.html new file mode 100644 index 0000000000..bf9e5e67b6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/membergroups/edit.html @@ -0,0 +1,48 @@ +
+ + + +
+ + + + + + + + +

Member groups have no additional properties for editing.

+ +
+ + + + + + + + + + + + + + +
+ +
+ +
diff --git a/src/Umbraco.Web.UI.Client/src/views/membertypes/create.controller.js b/src/Umbraco.Web.UI.Client/src/views/membertypes/create.controller.js index 324835a20b..6f11f94d09 100644 --- a/src/Umbraco.Web.UI.Client/src/views/membertypes/create.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/membertypes/create.controller.js @@ -1,6 +1,6 @@ /** * @ngdoc controller - * @name Umbraco.Editors.MemberType.CreateController + * @name Umbraco.Editors.MemberTypes.CreateController * @function * * @description diff --git a/src/Umbraco.Web.UI.Client/src/views/membertypes/delete.controller.js b/src/Umbraco.Web.UI.Client/src/views/membertypes/delete.controller.js index 061ca7eb2c..a9de8652ce 100644 --- a/src/Umbraco.Web.UI.Client/src/views/membertypes/delete.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/membertypes/delete.controller.js @@ -1,6 +1,6 @@ /** * @ngdoc controller - * @name Umbraco.Editors.DocumentType.DeleteController + * @name Umbraco.Editors.MemberTypes.DeleteController * @function * * @description diff --git a/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js index ab42c91959..3114336e95 100644 --- a/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/membertypes/edit.controller.js @@ -1,6 +1,6 @@ /** * @ngdoc controller - * @name Umbraco.Editors.MemberType.EditController + * @name Umbraco.Editors.MemberTypes.EditController * @function * * @description diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 78fd78b16a..8445feb4e0 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -612,7 +612,9 @@ UI.xml - + + Designer + @@ -858,9 +860,6 @@ - - Form - Form diff --git a/src/Umbraco.Web.UI/config/trees.config b/src/Umbraco.Web.UI/config/trees.config index 57022b7402..e92d9adc17 100644 --- a/src/Umbraco.Web.UI/config/trees.config +++ b/src/Umbraco.Web.UI/config/trees.config @@ -29,7 +29,7 @@ - + diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml index 1360c09667..e3ea6f3120 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml @@ -179,6 +179,7 @@ Create a new member All Members + Member groups have no additional properties for editing. Where do you want to create the new %0% @@ -920,6 +921,7 @@ To manage your website, simply open the Umbraco back office and start adding con Stylesheet saved Stylesheet saved without any errors Datatype saved + Member group saved Dictionary item saved Publishing failed because the parent page isn't published Content published diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml index 700c252cde..d8d78a70ab 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml @@ -181,6 +181,7 @@ Create a new member All Members + Member groups have no additional properties for editing. Where do you want to create the new %0% @@ -919,6 +920,7 @@ To manage your website, simply open the Umbraco back office and start adding con Stylesheet saved Stylesheet saved without any errors Datatype saved + Member group saved Dictionary item saved Publishing failed because the parent page isn't published Content published diff --git a/src/Umbraco.Web.UI/umbraco/members/EditMemberGroup.aspx b/src/Umbraco.Web.UI/umbraco/members/EditMemberGroup.aspx deleted file mode 100644 index 488a616f08..0000000000 --- a/src/Umbraco.Web.UI/umbraco/members/EditMemberGroup.aspx +++ /dev/null @@ -1,22 +0,0 @@ -<%@ Page Language="c#" MasterPageFile="../masterpages/umbracoPage.Master" CodeBehind="EditMemberGroup.aspx.cs" - AutoEventWireup="True" Inherits="umbraco.presentation.members.EditMemberGroup" %> - -<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> - - - - - - - - - -
- <%=Services.TextService.Localize("name")%> - - -
-
-
-
diff --git a/src/Umbraco.Web/Editors/BackOfficeController.cs b/src/Umbraco.Web/Editors/BackOfficeController.cs index 203cee7dfc..99bceffdc7 100644 --- a/src/Umbraco.Web/Editors/BackOfficeController.cs +++ b/src/Umbraco.Web/Editors/BackOfficeController.cs @@ -319,6 +319,10 @@ namespace Umbraco.Web.Editors "memberTypeApiBaseUrl", Url.GetUmbracoApiServiceBaseUrl( controller => controller.GetAllTypes()) }, + { + "memberGroupApiBaseUrl", Url.GetUmbracoApiServiceBaseUrl( + controller => controller.GetAllGroups()) + }, { "updateCheckApiBaseUrl", Url.GetUmbracoApiServiceBaseUrl( controller => controller.GetCheck()) diff --git a/src/Umbraco.Web/Editors/MemberGroupController.cs b/src/Umbraco.Web/Editors/MemberGroupController.cs new file mode 100644 index 0000000000..1b74b77949 --- /dev/null +++ b/src/Umbraco.Web/Editors/MemberGroupController.cs @@ -0,0 +1,101 @@ +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Web.Http; +using System.Web.Security; +using AutoMapper; +using Umbraco.Core.Models; +using Umbraco.Core.Security; +using Umbraco.Core.Services; +using Umbraco.Web.Models.ContentEditing; +using Umbraco.Web.Mvc; +using Umbraco.Web.WebApi.Filters; +using Constants = Umbraco.Core.Constants; + +namespace Umbraco.Web.Editors +{ + /// + /// An API controller used for dealing with member groups + /// + [PluginController("UmbracoApi")] + [UmbracoTreeAuthorize(Constants.Trees.MemberGroups)] + public class MemberGroupController : UmbracoAuthorizedJsonController + { + public MemberGroupController() + : this(UmbracoContext.Current) + { + _provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider(); + } + + public MemberGroupController(UmbracoContext umbracoContext) + : base(umbracoContext) + { + _provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider(); + } + + private readonly MembershipProvider _provider; + + public MemberGroupDisplay GetById(int id) + { + var memberGroup = Services.MemberGroupService.GetById(id); + if (memberGroup == null) + { + throw new HttpResponseException(HttpStatusCode.NotFound); + } + + var dto = Mapper.Map(memberGroup); + return dto; + } + + [HttpDelete] + [HttpPost] + public HttpResponseMessage DeleteById(int id) + { + var memberGroup = Services.MemberGroupService.GetById(id); + if (memberGroup == null) + { + throw new HttpResponseException(HttpStatusCode.NotFound); + } + + Services.MemberGroupService.Delete(memberGroup); + return Request.CreateResponse(HttpStatusCode.OK); + } + + public IEnumerable GetAllGroups() + { + if (_provider.IsUmbracoMembershipProvider()) + { + return Services.MemberGroupService.GetAll() + .Select(Mapper.Map); + } + + return Enumerable.Empty(); + } + + public MemberGroupDisplay GetEmpty() + { + var item = new MemberGroup(); + return Mapper.Map(item); + } + + public MemberGroupDisplay PostSave(MemberGroupSave saveModel) + { + var service = ApplicationContext.Services.MemberGroupService; + + var id = int.Parse(saveModel.Id.ToString()); + var memberGroup = id > 0 ? service.GetById(id) : new MemberGroup(); + if (memberGroup == null) + { + throw new HttpResponseException(HttpStatusCode.NotFound); + } + + memberGroup.Name = saveModel.Name; + service.Save(memberGroup); + + var display = Mapper.Map(memberGroup); + display.AddSuccessNotification(Services.TextService.Localize("speechBubbles/memberGroupSaved"), string.Empty); + return display; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Editors/MemberTypeController.cs b/src/Umbraco.Web/Editors/MemberTypeController.cs index 4ce6766a63..49dcf8c522 100644 --- a/src/Umbraco.Web/Editors/MemberTypeController.cs +++ b/src/Umbraco.Web/Editors/MemberTypeController.cs @@ -1,27 +1,23 @@ using System.Collections.Generic; using System.Linq; +using System.Net; +using System.Net.Http; +using System.Web.Http; using System.Web.Security; using AutoMapper; -using Umbraco.Core; using Umbraco.Core.Models; -using Umbraco.Core.Services; using Umbraco.Core.Security; +using Umbraco.Core.Services; using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Mvc; using Umbraco.Web.WebApi.Filters; using Constants = Umbraco.Core.Constants; -using System.Web.Http; -using System.Net; -using Umbraco.Core.PropertyEditors; -using System; -using System.Net.Http; -using ContentType = System.Net.Mime.ContentType; namespace Umbraco.Web.Editors { /// - /// An API controller used for dealing with content types + /// An API controller used for dealing with member types /// [PluginController("UmbracoApi")] [UmbracoTreeAuthorize(Constants.Trees.MemberTypes)] diff --git a/src/Umbraco.Web/Models/ContentEditing/MemberGroupDisplay.cs b/src/Umbraco.Web/Models/ContentEditing/MemberGroupDisplay.cs new file mode 100644 index 0000000000..f2e8cc6277 --- /dev/null +++ b/src/Umbraco.Web/Models/ContentEditing/MemberGroupDisplay.cs @@ -0,0 +1,21 @@ +using System.Runtime.Serialization; + +namespace Umbraco.Web.Models.ContentEditing +{ + using System.Collections.Generic; + + [DataContract(Name = "memberGroup", Namespace = "")] + public class MemberGroupDisplay : EntityBasic, INotificationModel + { + public MemberGroupDisplay() + { + Notifications = new List(); + } + + /// + /// This is used to add custom localized messages/strings to the response for the app to use for localized UI purposes. + /// + [DataMember(Name = "notifications")] + public List Notifications { get; private set; } + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Models/ContentEditing/MemberGroupSave.cs b/src/Umbraco.Web/Models/ContentEditing/MemberGroupSave.cs new file mode 100644 index 0000000000..26e1665451 --- /dev/null +++ b/src/Umbraco.Web/Models/ContentEditing/MemberGroupSave.cs @@ -0,0 +1,9 @@ +using System.Runtime.Serialization; + +namespace Umbraco.Web.Models.ContentEditing +{ + [DataContract(Name = "memberGroup", Namespace = "")] + public class MemberGroupSave : EntityBasic + { + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs index 6595878055..d1e3eae9f1 100644 --- a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs @@ -156,6 +156,10 @@ namespace Umbraco.Web.Models.Mapping .ForMember(x => x.Alias, expression => expression.Ignore()) //do no map the custom member properties (currently anyways, they were never there in 6.x) .ForMember(dto => dto.Properties, expression => expression.ResolveUsing()); + + //FROM IMemberGroup TO MemberGroupDisplay + config.CreateMap() + .ForMember(x => x.Path, expression => expression.MapFrom(group => "-1," + group.Id)); } /// diff --git a/src/Umbraco.Web/Trees/MemberGroupTreeController.cs b/src/Umbraco.Web/Trees/MemberGroupTreeController.cs new file mode 100644 index 0000000000..d1a0d2c318 --- /dev/null +++ b/src/Umbraco.Web/Trees/MemberGroupTreeController.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using System.Linq; +using System.Net.Http.Formatting; +using Umbraco.Core; +using Umbraco.Web.Models.Trees; +using Umbraco.Web.WebApi.Filters; + +namespace Umbraco.Web.Trees +{ + [UmbracoTreeAuthorize(Constants.Trees.MemberGroups)] + [Tree(Constants.Applications.Members, Constants.Trees.MemberGroups, null, sortOrder: 2)] + [Mvc.PluginController("UmbracoTrees")] + [CoreTree] + public class MemberGroupTreeController : MemberTypeAndGroupTreeControllerBase + { + protected override IEnumerable GetTreeNodesFromService(string id, FormDataCollection queryStrings) + { + return Services.MemberGroupService.GetAll() + .OrderBy(x => x.Name) + .Select(dt => CreateTreeNode(dt.Id.ToString(), id, queryStrings, dt.Name, "icon-item-arrangement", false)); + } + } +} diff --git a/src/Umbraco.Web/Trees/MemberTypeAndGroupTreeControllerBase.cs b/src/Umbraco.Web/Trees/MemberTypeAndGroupTreeControllerBase.cs new file mode 100644 index 0000000000..c89b94670e --- /dev/null +++ b/src/Umbraco.Web/Trees/MemberTypeAndGroupTreeControllerBase.cs @@ -0,0 +1,43 @@ +using System.Collections.Generic; +using System.Net.Http.Formatting; +using Umbraco.Core; +using Umbraco.Core.Services; +using Umbraco.Web._Legacy.Actions; +using Umbraco.Web.Models.Trees; + +namespace Umbraco.Web.Trees +{ + [Mvc.PluginController("UmbracoTrees")] + [CoreTree] + public abstract class MemberTypeAndGroupTreeControllerBase : TreeController + { + protected override TreeNodeCollection GetTreeNodes(string id, FormDataCollection queryStrings) + { + var nodes = new TreeNodeCollection(); + nodes.AddRange(GetTreeNodesFromService(id, queryStrings)); + return nodes; + } + + protected override MenuItemCollection GetMenuForNode(string id, FormDataCollection queryStrings) + { + var menu = new MenuItemCollection(); + + if (id == Constants.System.Root.ToInvariantString()) + { + // root actions + menu.Items.Add(Services.TextService.Localize("actions", ActionNew.Instance.Alias)); + menu.Items.Add(Services.TextService.Localize("actions", ActionRefresh.Instance.Alias), true); + return menu; + } + else + { + //delete member type/group + menu.Items.Add(Services.TextService.Localize("actions", ActionDelete.Instance.Alias)); + } + + return menu; + } + + protected abstract IEnumerable GetTreeNodesFromService(string id, FormDataCollection queryStrings); + } +} diff --git a/src/Umbraco.Web/Trees/MemberTypeTreeController.cs b/src/Umbraco.Web/Trees/MemberTypeTreeController.cs index 4921a2e130..73bbdee37f 100644 --- a/src/Umbraco.Web/Trees/MemberTypeTreeController.cs +++ b/src/Umbraco.Web/Trees/MemberTypeTreeController.cs @@ -1,53 +1,21 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Net.Http.Formatting; -using System.Text; -using System.Threading.Tasks; -using umbraco; using Umbraco.Core; -using Umbraco.Core.Services; using Umbraco.Web.Models.Trees; using Umbraco.Web.WebApi.Filters; -using Umbraco.Web._Legacy.Actions; namespace Umbraco.Web.Trees { [UmbracoTreeAuthorize(Constants.Trees.MemberTypes)] - [Tree(Constants.Applications.Members, Constants.Trees.MemberTypes, null, sortOrder:2 )] - [Mvc.PluginController("UmbracoTrees")] - [CoreTree] - public class MemberTypeTreeController : TreeController + [Tree(Constants.Applications.Members, Constants.Trees.MemberTypes, null, sortOrder: 1)] + public class MemberTypeTreeController : MemberTypeAndGroupTreeControllerBase { - protected override TreeNodeCollection GetTreeNodes(string id, FormDataCollection queryStrings) + protected override IEnumerable GetTreeNodesFromService(string id, FormDataCollection queryStrings) { - var nodes = new TreeNodeCollection(); - nodes.AddRange( - Services.MemberTypeService.GetAll() - .OrderBy(x => x.Name) - .Select(dt => CreateTreeNode(dt.Id.ToString(), id, queryStrings, dt.Name, "icon-item-arrangement", false))); - - return nodes; - } - - protected override MenuItemCollection GetMenuForNode(string id, FormDataCollection queryStrings) - { - var menu = new MenuItemCollection(); - - if (id == Constants.System.Root.ToInvariantString()) - { - // root actions - menu.Items.Add(Services.TextService.Localize("actions", ActionNew.Instance.Alias)); - menu.Items.Add(Services.TextService.Localize("actions", ActionRefresh.Instance.Alias), true); - return menu; - } - else - { - //delete member type - menu.Items.Add(Services.TextService.Localize("actions", ActionDelete.Instance.Alias)); - } - - return menu; + return Services.MemberTypeService.GetAll() + .OrderBy(x => x.Name) + .Select(dt => CreateTreeNode(dt.Id.ToString(), id, queryStrings, dt.Name, "icon-item-arrangement", false)); } } } diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 90e5af5e98..843e636522 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -326,6 +326,7 @@ + @@ -336,6 +337,10 @@ + + + + @@ -1462,13 +1467,6 @@ viewAuditTrail.aspx - - EditMemberGroup.aspx - ASPXCodeBehind - - - EditMemberGroup.aspx - DictionaryItemList.aspx ASPXCodeBehind @@ -1539,7 +1537,6 @@ xml.aspx - @@ -1749,9 +1746,6 @@ - - Form - ASPXCodeBehind diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadMemberGroups.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadMemberGroups.cs deleted file mode 100644 index f498e87760..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadMemberGroups.cs +++ /dev/null @@ -1,75 +0,0 @@ -using Umbraco.Core.Services; -using System; -using System.Text; -using System.Web; - -using umbraco.cms.businesslogic.member; -using umbraco.cms.presentation.Trees; -using System.Web.Security; -using Umbraco.Core; -using Umbraco.Web.Trees; - -namespace umbraco -{ - /// - /// Handles loading of the member groups into the application tree - /// - [Tree(Constants.Applications.Members, "memberGroups", "Member Groups", sortOrder: 1)] - public class loadMemberGroups : BaseTree - { - public loadMemberGroups(string application) : base(application) { } - - protected override void CreateRootNode(ref XmlTreeNode rootNode) - { - // if we're using 3rd party membership providers we should use the Role terminology - if (!Member.IsUsingUmbracoRoles()) - { - rootNode.Text = Services.TextService.Localize("memberRoles"); - } - rootNode.NodeType = "initmemberGroup"; - rootNode.NodeID = "init"; - } - - /// - /// Renders the Javascript. - /// - /// The javascript. - public override void RenderJS(ref StringBuilder Javascript) - { - Javascript.Append( - @" -function openMemberGroup(id) { - UmbClientMgr.contentFrame('members/editMemberGroup.aspx?id=' + id); -} -"); - } - - public override void Render(ref XmlTree tree) - { - var roles = Roles.GetAllRoles(); - Array.Sort(roles); - - foreach(string role in roles) { - if (role.StartsWith(Constants.Conventions.Member.InternalRolePrefix) == false) - { - XmlTreeNode xNode = XmlTreeNode.Create(this); - xNode.NodeID = role; - xNode.Text = role; - xNode.Action = "javascript:openMemberGroup('" + HttpContext.Current.Server.UrlEncode(role.Replace("'", "\\'")) + "');"; - xNode.Icon = "icon-users"; - if (!Member.IsUsingUmbracoRoles()) - { - xNode.Menu = null; - } - - OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); - if (xNode != null) - { - tree.Add(xNode); - } - OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); - } - } - } - } -} diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx deleted file mode 100644 index 488a616f08..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx +++ /dev/null @@ -1,22 +0,0 @@ -<%@ Page Language="c#" MasterPageFile="../masterpages/umbracoPage.Master" CodeBehind="EditMemberGroup.aspx.cs" - AutoEventWireup="True" Inherits="umbraco.presentation.members.EditMemberGroup" %> - -<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> - - - - - - - - - -
- <%=Services.TextService.Localize("name")%> - - -
-
-
-
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx.cs deleted file mode 100644 index 2e1eb58dae..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx.cs +++ /dev/null @@ -1,96 +0,0 @@ -using Umbraco.Core.Services; -using System; -using umbraco.cms.businesslogic.member; -using umbraco.cms.presentation.Trees; -using umbraco.uicontrols; -using Umbraco.Core; -using Umbraco.Web.UI; - -namespace umbraco.presentation.members -{ - /// - /// Summary description for EditMemberGroup. - /// - public partial class EditMemberGroup : Umbraco.Web.UI.Pages.UmbracoEnsuredPage - { - public EditMemberGroup() - { - CurrentApp = Constants.Applications.Members.ToString(); - - } - - private MemberGroup _memberGroup = null; - protected MenuButton save = null; - string _memberGroupId = String.Empty; - - protected void Page_Load(object sender, System.EventArgs e) - { - _memberGroupId = !String.IsNullOrEmpty(memberGroupName.Value) ? memberGroupName.Value : Request.QueryString["id"]; - - // Restore any escaped apostrophe for name look up - _memberGroupId = _memberGroupId.Replace("\\'", "'"); - - if (!IsPostBack) - { - ClientTools - .SetActiveTreeType(TreeDefinitionCollection.Instance.FindTree().Tree.Alias) - .SyncTree(_memberGroupId, false); - } - - if (!Member.IsUsingUmbracoRoles()) - { - NameTxt.Enabled = false; - save.Enabled = false; - NameTxt.Text = _memberGroupId + " (not editable from umbraco)"; - } - else - { - _memberGroup = MemberGroup.GetByName(_memberGroupId); - - if (!IsPostBack) - { - NameTxt.Text = _memberGroup.Text; - } - } - } - - private void save_click(object sender, EventArgs e) - { - _memberGroup.Text = NameTxt.Text; - memberGroupName.Value = NameTxt.Text; - _memberGroup.Save(); - this.ClientTools.ShowSpeechBubble(SpeechBubbleIcon.Save, Services.TextService.Localize("speechBubbles/editMemberGroupSaved"),""); - - ClientTools - .RefreshTree(TreeDefinitionCollection.Instance.FindTree().Tree.Alias); - - } - - #region Web Form Designer generated code - override protected void OnInit(EventArgs e) - { - // - // CODEGEN: This call is required by the ASP.NET Web Form Designer. - // - InitializeComponent(); - base.OnInit(e); - Panel1.hasMenu = true; - save = Panel1.Menu.NewButton(); - save.Text = Services.TextService.Localize("save"); - save.Click += new EventHandler(save_click); - save.ButtonType = MenuButtonType.Primary; - - Panel1.Text = Services.TextService.Localize("membergroup"); - } - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - - } - #endregion - } -} diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx.designer.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx.designer.cs deleted file mode 100644 index 0319903f54..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMemberGroup.aspx.designer.cs +++ /dev/null @@ -1,51 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace umbraco.presentation.members { - - - public partial class EditMemberGroup { - - /// - /// memberGroupName control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlInputHidden memberGroupName; - - /// - /// Panel1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::umbraco.uicontrols.UmbracoPanel Panel1; - - /// - /// Pane7 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::umbraco.uicontrols.Pane Pane7; - - /// - /// NameTxt control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TextBox NameTxt; - } -}