Merge branch 'u4-8192' of https://github.com/AndyButland/Umbraco-CMS into AndyButland-u4-8192
# Conflicts: # src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
This commit is contained in:
@@ -90,12 +90,16 @@
|
||||
/// </summary>
|
||||
public const string MediaTypes = "mediaTypes";
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// alias for the member type tree.
|
||||
/// </summary>
|
||||
public const string MemberTypes = "memberTypes";
|
||||
|
||||
/// <summary>
|
||||
/// alias for the member group tree.
|
||||
/// </summary>
|
||||
public const string MemberGroups = "memberGroups";
|
||||
|
||||
/// <summary>
|
||||
/// alias for the template tree.
|
||||
/// </summary>
|
||||
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
12
src/Umbraco.Web.UI.Client/src/views/membergroups/delete.html
Normal file
12
src/Umbraco.Web.UI.Client/src/views/membergroups/delete.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<div class="umb-dialog umb-pane" ng-controller="Umbraco.Editors.MemberGroups.DeleteController">
|
||||
<div class="umb-dialog-body" auto-scale="90">
|
||||
|
||||
<p class="umb-abstract">
|
||||
<localize key="defaultdialogs_confirmdelete">Are you sure you want to delete</localize> <strong>{{currentNode.name}}</strong> ?
|
||||
</p>
|
||||
|
||||
<umb-confirm on-confirm="performDelete" on-cancel="cancel">
|
||||
</umb-confirm>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -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);
|
||||
48
src/Umbraco.Web.UI.Client/src/views/membergroups/edit.html
Normal file
48
src/Umbraco.Web.UI.Client/src/views/membergroups/edit.html
Normal file
@@ -0,0 +1,48 @@
|
||||
<div ng-controller="Umbraco.Editors.MemberGroups.EditController as vm">
|
||||
|
||||
<umb-load-indicator ng-if="page.loading"></umb-load-indicator>
|
||||
|
||||
<form name="contentForm"
|
||||
ng-submit="save()"
|
||||
novalidate
|
||||
val-form-manager>
|
||||
|
||||
<umb-editor-view ng-if="!page.loading">
|
||||
|
||||
<umb-editor-header menu="page.menu"
|
||||
name="content.name"
|
||||
name-locked="page.nameLocked"
|
||||
hide-icon="true"
|
||||
hide-description="true"
|
||||
hide-alias="true">
|
||||
</umb-editor-header>
|
||||
|
||||
<umb-editor-container class="form-horizontal">
|
||||
|
||||
<p><localize key="member_memberGroupNoProperties">Member groups have no additional properties for editing.</localize></p>
|
||||
|
||||
</umb-editor-container>
|
||||
|
||||
|
||||
<umb-editor-footer>
|
||||
|
||||
<umb-editor-footer-content-right>
|
||||
|
||||
<umb-button type="submit"
|
||||
button-style="success"
|
||||
state="page.saveButtonState"
|
||||
shortcut="ctrl+s"
|
||||
label="Save"
|
||||
label-key="buttons_save">
|
||||
</umb-button>
|
||||
|
||||
</umb-editor-footer-content-right>
|
||||
|
||||
</umb-editor-footer>
|
||||
|
||||
|
||||
</umb-editor-view>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* @ngdoc controller
|
||||
* @name Umbraco.Editors.MemberType.CreateController
|
||||
* @name Umbraco.Editors.MemberTypes.CreateController
|
||||
* @function
|
||||
*
|
||||
* @description
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* @ngdoc controller
|
||||
* @name Umbraco.Editors.DocumentType.DeleteController
|
||||
* @name Umbraco.Editors.MemberTypes.DeleteController
|
||||
* @function
|
||||
*
|
||||
* @description
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* @ngdoc controller
|
||||
* @name Umbraco.Editors.MemberType.EditController
|
||||
* @name Umbraco.Editors.MemberTypes.EditController
|
||||
* @function
|
||||
*
|
||||
* @description
|
||||
|
||||
@@ -612,7 +612,9 @@
|
||||
<DependentUpon>UI.xml</DependentUpon>
|
||||
</None>
|
||||
<Content Include="Global.asax" />
|
||||
<Content Include="Umbraco\Config\Lang\en_us.xml" />
|
||||
<Content Include="Umbraco\Config\Lang\en_us.xml">
|
||||
<SubType>Designer</SubType>
|
||||
</Content>
|
||||
<Content Include="Umbraco\Config\Lang\he.xml" />
|
||||
<Content Include="Umbraco\Config\Lang\ja.xml" />
|
||||
<Content Include="Umbraco\Config\Lang\pl.xml" />
|
||||
@@ -858,9 +860,6 @@
|
||||
<Content Include="Umbraco\Js\dualSelectBox.js" />
|
||||
<Content Include="Umbraco\Js\guiFunctions.js" />
|
||||
<Content Include="Umbraco\Js\umbracoCheckKeys.js" />
|
||||
<Content Include="Umbraco\Members\EditMemberGroup.aspx">
|
||||
<SubType>Form</SubType>
|
||||
</Content>
|
||||
<Content Include="Umbraco\ping.aspx">
|
||||
<SubType>Form</SubType>
|
||||
</Content>
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<!--Members-->
|
||||
<add initialize="true" sortOrder="0" alias="member" application="member" title="Members" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.MemberTreeController, umbraco" />
|
||||
<add initialize="true" sortOrder="1" alias="memberTypes" application="member" title="Member Types" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.MemberTypeTreeController, umbraco" />
|
||||
<add application="member" sortOrder="2" alias="memberGroups" title="Member Groups" type="umbraco.loadMemberGroups, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" />
|
||||
<add initialize="true" sortOrder="2" alias="memberGroups" application="member" title="Member Groups" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.MemberGroupTreeController, umbraco" />
|
||||
<!--Translation-->
|
||||
<add application="translation" alias="dictionary" title="Dictionary" type="Umbraco.Web.Trees.DictionaryTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="0" />
|
||||
<add silent="false" initialize="true" sortOrder="1" alias="openTasks" application="translation" title="Tasks assigned to you" iconClosed="icon-folder" iconOpen="icon-folder" type="umbraco.loadOpenTasks, umbraco" />
|
||||
|
||||
@@ -179,6 +179,7 @@
|
||||
<area alias="member">
|
||||
<key alias="createNewMember">Create a new member</key>
|
||||
<key alias="allMembers">All Members</key>
|
||||
<key alias="memberGroupNoProperties">Member groups have no additional properties for editing.</key>
|
||||
</area>
|
||||
<area alias="create">
|
||||
<key alias="chooseNode">Where do you want to create the new %0%</key>
|
||||
@@ -920,6 +921,7 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="cssSavedHeader">Stylesheet saved</key>
|
||||
<key alias="cssSavedText">Stylesheet saved without any errors</key>
|
||||
<key alias="dataTypeSaved">Datatype saved</key>
|
||||
<key alias="memberGroupSaved">Member group saved</key>
|
||||
<key alias="dictionaryItemSaved">Dictionary item saved</key>
|
||||
<key alias="editContentPublishedFailedByParent">Publishing failed because the parent page isn't published</key>
|
||||
<key alias="editContentPublishedHeader">Content published</key>
|
||||
|
||||
@@ -181,6 +181,7 @@
|
||||
<area alias="member">
|
||||
<key alias="createNewMember">Create a new member</key>
|
||||
<key alias="allMembers">All Members</key>
|
||||
<key alias="memberGroupNoProperties">Member groups have no additional properties for editing.</key>
|
||||
</area>
|
||||
<area alias="create">
|
||||
<key alias="chooseNode">Where do you want to create the new %0%</key>
|
||||
@@ -919,6 +920,7 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="cssSavedHeader">Stylesheet saved</key>
|
||||
<key alias="cssSavedText">Stylesheet saved without any errors</key>
|
||||
<key alias="dataTypeSaved">Datatype saved</key>
|
||||
<key alias="memberGroupSaved">Member group saved</key>
|
||||
<key alias="dictionaryItemSaved">Dictionary item saved</key>
|
||||
<key alias="editContentPublishedFailedByParent">Publishing failed because the parent page isn't published</key>
|
||||
<key alias="editContentPublishedHeader">Content published</key>
|
||||
|
||||
@@ -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" %>
|
||||
<asp:Content runat="server" ContentPlaceHolderID="body">
|
||||
<input type="hidden" id="memberGroupName" runat="server" />
|
||||
<cc1:UmbracoPanel ID="Panel1" runat="server" hasMenu="true">
|
||||
<cc1:Pane ID="Pane7" Style="padding-right: 10px; padding-left: 10px; padding-bottom: 10px;
|
||||
padding-top: 10px; text-align: left" runat="server" Height="44px" Width="528px">
|
||||
<table id="Table1" width="100%">
|
||||
<tr>
|
||||
<th width="15%">
|
||||
<%=Services.TextService.Localize("name")%>
|
||||
</th>
|
||||
<td>
|
||||
<asp:TextBox ID="NameTxt" Width="200px" runat="server"></asp:TextBox>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</cc1:Pane>
|
||||
</cc1:UmbracoPanel>
|
||||
</asp:Content>
|
||||
@@ -319,6 +319,10 @@ namespace Umbraco.Web.Editors
|
||||
"memberTypeApiBaseUrl", Url.GetUmbracoApiServiceBaseUrl<MemberTypeController>(
|
||||
controller => controller.GetAllTypes())
|
||||
},
|
||||
{
|
||||
"memberGroupApiBaseUrl", Url.GetUmbracoApiServiceBaseUrl<MemberGroupController>(
|
||||
controller => controller.GetAllGroups())
|
||||
},
|
||||
{
|
||||
"updateCheckApiBaseUrl", Url.GetUmbracoApiServiceBaseUrl<UpdateCheckController>(
|
||||
controller => controller.GetCheck())
|
||||
|
||||
101
src/Umbraco.Web/Editors/MemberGroupController.cs
Normal file
101
src/Umbraco.Web/Editors/MemberGroupController.cs
Normal file
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// An API controller used for dealing with member groups
|
||||
/// </summary>
|
||||
[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<IMemberGroup, MemberGroupDisplay>(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<MemberGroupDisplay> GetAllGroups()
|
||||
{
|
||||
if (_provider.IsUmbracoMembershipProvider())
|
||||
{
|
||||
return Services.MemberGroupService.GetAll()
|
||||
.Select(Mapper.Map<IMemberGroup, MemberGroupDisplay>);
|
||||
}
|
||||
|
||||
return Enumerable.Empty<MemberGroupDisplay>();
|
||||
}
|
||||
|
||||
public MemberGroupDisplay GetEmpty()
|
||||
{
|
||||
var item = new MemberGroup();
|
||||
return Mapper.Map<IMemberGroup, MemberGroupDisplay>(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<IMemberGroup, MemberGroupDisplay>(memberGroup);
|
||||
display.AddSuccessNotification(Services.TextService.Localize("speechBubbles/memberGroupSaved"), string.Empty);
|
||||
return display;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// An API controller used for dealing with content types
|
||||
/// An API controller used for dealing with member types
|
||||
/// </summary>
|
||||
[PluginController("UmbracoApi")]
|
||||
[UmbracoTreeAuthorize(Constants.Trees.MemberTypes)]
|
||||
|
||||
21
src/Umbraco.Web/Models/ContentEditing/MemberGroupDisplay.cs
Normal file
21
src/Umbraco.Web/Models/ContentEditing/MemberGroupDisplay.cs
Normal file
@@ -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<Notification>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is used to add custom localized messages/strings to the response for the app to use for localized UI purposes.
|
||||
/// </summary>
|
||||
[DataMember(Name = "notifications")]
|
||||
public List<Notification> Notifications { get; private set; }
|
||||
}
|
||||
}
|
||||
9
src/Umbraco.Web/Models/ContentEditing/MemberGroupSave.cs
Normal file
9
src/Umbraco.Web/Models/ContentEditing/MemberGroupSave.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Umbraco.Web.Models.ContentEditing
|
||||
{
|
||||
[DataContract(Name = "memberGroup", Namespace = "")]
|
||||
public class MemberGroupSave : EntityBasic
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -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<MemberDtoPropertiesValueResolver>());
|
||||
|
||||
//FROM IMemberGroup TO MemberGroupDisplay
|
||||
config.CreateMap<IMemberGroup, MemberGroupDisplay>()
|
||||
.ForMember(x => x.Path, expression => expression.MapFrom(group => "-1," + group.Id));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
23
src/Umbraco.Web/Trees/MemberGroupTreeController.cs
Normal file
23
src/Umbraco.Web/Trees/MemberGroupTreeController.cs
Normal file
@@ -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<TreeNode> 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<CreateChildEntity, ActionNew>(Services.TextService.Localize("actions", ActionNew.Instance.Alias));
|
||||
menu.Items.Add<RefreshNode, ActionRefresh>(Services.TextService.Localize("actions", ActionRefresh.Instance.Alias), true);
|
||||
return menu;
|
||||
}
|
||||
else
|
||||
{
|
||||
//delete member type/group
|
||||
menu.Items.Add<ActionDelete>(Services.TextService.Localize("actions", ActionDelete.Instance.Alias));
|
||||
}
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
protected abstract IEnumerable<TreeNode> GetTreeNodesFromService(string id, FormDataCollection queryStrings);
|
||||
}
|
||||
}
|
||||
@@ -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<TreeNode> 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<CreateChildEntity, ActionNew>(Services.TextService.Localize("actions", ActionNew.Instance.Alias));
|
||||
menu.Items.Add<RefreshNode, ActionRefresh>(Services.TextService.Localize("actions", ActionRefresh.Instance.Alias), true);
|
||||
return menu;
|
||||
}
|
||||
else
|
||||
{
|
||||
//delete member type
|
||||
menu.Items.Add<ActionDelete>(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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -326,6 +326,7 @@
|
||||
<Compile Include="DefaultUmbracoContextAccessor.cs" />
|
||||
<Compile Include="DependencyInjection\WebModelMappersCompositionRoot.cs" />
|
||||
<Compile Include="Editors\BackOfficeNotificationsController.cs" />
|
||||
<Compile Include="Editors\MemberGroupController.cs" />
|
||||
<Compile Include="LightInjectExtensions.cs" />
|
||||
<Compile Include="Editors\EditorValidationResolver.cs" />
|
||||
<Compile Include="Editors\EditorValidator.cs" />
|
||||
@@ -336,6 +337,10 @@
|
||||
<Compile Include="Models\Trees\DisableUser.cs" />
|
||||
<Compile Include="Trees\RelationTypeTreeController.cs" />
|
||||
<Compile Include="Trees\MacrosTreeController.cs" />
|
||||
<Compile Include="Models\ContentEditing\MemberGroupDisplay.cs" />
|
||||
<Compile Include="Models\ContentEditing\MemberGroupSave.cs" />
|
||||
<Compile Include="Trees\MemberGroupTreeController.cs" />
|
||||
<Compile Include="Trees\MemberTypeAndGroupTreeControllerBase.cs" />
|
||||
<Compile Include="Trees\ScriptsTreeController.cs" />
|
||||
<Compile Include="Trees\DictionaryTreeController.cs" />
|
||||
<Compile Include="Trees\StylesheetsTreeController.cs" />
|
||||
@@ -1462,13 +1467,6 @@
|
||||
<Compile Include="umbraco.presentation\umbraco\dialogs\viewAuditTrail.aspx.designer.cs">
|
||||
<DependentUpon>viewAuditTrail.aspx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="umbraco.presentation\umbraco\members\EditMemberGroup.aspx.cs">
|
||||
<DependentUpon>EditMemberGroup.aspx</DependentUpon>
|
||||
<SubType>ASPXCodeBehind</SubType>
|
||||
</Compile>
|
||||
<Compile Include="umbraco.presentation\umbraco\members\EditMemberGroup.aspx.designer.cs">
|
||||
<DependentUpon>EditMemberGroup.aspx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="umbraco.presentation\umbraco\settings\DictionaryItemList.aspx.cs">
|
||||
<DependentUpon>DictionaryItemList.aspx</DependentUpon>
|
||||
<SubType>ASPXCodeBehind</SubType>
|
||||
@@ -1539,7 +1537,6 @@
|
||||
<DependentUpon>xml.aspx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="umbraco.presentation\umbraco\Trees\BaseTree.cs" />
|
||||
<Compile Include="umbraco.presentation\umbraco\Trees\loadMemberGroups.cs" />
|
||||
<Compile Include="umbraco.presentation\umbraco\Trees\loadPackages.cs" />
|
||||
<Compile Include="umbraco.presentation\umbraco\Trees\loadTranslationTasks.cs" />
|
||||
<Compile Include="umbraco.presentation\umbraco\Trees\NullTree.cs" />
|
||||
@@ -1749,9 +1746,6 @@
|
||||
<Content Include="umbraco.presentation\umbraco\developer\Xslt\getXsltStatus.asmx" />
|
||||
<Content Include="umbraco.presentation\umbraco\developer\Xslt\xsltChooseExtension.aspx" />
|
||||
<Content Include="umbraco.presentation\umbraco\developer\Xslt\xsltInsertValueOf.aspx" />
|
||||
<Content Include="umbraco.presentation\umbraco\members\EditMemberGroup.aspx">
|
||||
<SubType>Form</SubType>
|
||||
</Content>
|
||||
<Content Include="umbraco.presentation\umbraco\settings\EditDictionaryItem.aspx">
|
||||
<SubType>ASPXCodeBehind</SubType>
|
||||
</Content>
|
||||
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Handles loading of the member groups into the application tree
|
||||
/// </summary>
|
||||
[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";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Renders the Javascript.
|
||||
/// </summary>
|
||||
/// <param name="Javascript">The javascript.</param>
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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" %>
|
||||
<asp:Content runat="server" ContentPlaceHolderID="body">
|
||||
<input type="hidden" id="memberGroupName" runat="server" />
|
||||
<cc1:UmbracoPanel ID="Panel1" runat="server" hasMenu="true">
|
||||
<cc1:Pane ID="Pane7" Style="padding-right: 10px; padding-left: 10px; padding-bottom: 10px;
|
||||
padding-top: 10px; text-align: left" runat="server" Height="44px" Width="528px">
|
||||
<table id="Table1" width="100%">
|
||||
<tr>
|
||||
<th width="15%">
|
||||
<%=Services.TextService.Localize("name")%>
|
||||
</th>
|
||||
<td>
|
||||
<asp:TextBox ID="NameTxt" Width="200px" runat="server"></asp:TextBox>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</cc1:Pane>
|
||||
</cc1:UmbracoPanel>
|
||||
</asp:Content>
|
||||
@@ -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>
|
||||
/// Summary description for EditMemberGroup.
|
||||
/// </summary>
|
||||
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<loadMemberGroups>().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<loadMemberGroups>().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");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace umbraco.presentation.members {
|
||||
|
||||
|
||||
public partial class EditMemberGroup {
|
||||
|
||||
/// <summary>
|
||||
/// memberGroupName control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.HtmlControls.HtmlInputHidden memberGroupName;
|
||||
|
||||
/// <summary>
|
||||
/// Panel1 control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::umbraco.uicontrols.UmbracoPanel Panel1;
|
||||
|
||||
/// <summary>
|
||||
/// Pane7 control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::umbraco.uicontrols.Pane Pane7;
|
||||
|
||||
/// <summary>
|
||||
/// NameTxt control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox NameTxt;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user