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:
Shannon
2016-05-19 18:16:47 +02:00
parent c53d074aaf
commit 1d8e0eb280
28 changed files with 519 additions and 334 deletions

View File

@@ -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>

View File

@@ -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);

View File

@@ -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);

View 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>

View File

@@ -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);

View 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>

View File

@@ -1,6 +1,6 @@
/**
* @ngdoc controller
* @name Umbraco.Editors.MemberType.CreateController
* @name Umbraco.Editors.MemberTypes.CreateController
* @function
*
* @description

View File

@@ -1,6 +1,6 @@
/**
* @ngdoc controller
* @name Umbraco.Editors.DocumentType.DeleteController
* @name Umbraco.Editors.MemberTypes.DeleteController
* @function
*
* @description

View File

@@ -1,6 +1,6 @@
/**
* @ngdoc controller
* @name Umbraco.Editors.MemberType.EditController
* @name Umbraco.Editors.MemberTypes.EditController
* @function
*
* @description

View File

@@ -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>

View File

@@ -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" />

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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())

View 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;
}
}
}

View File

@@ -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)]

View 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; }
}
}

View File

@@ -0,0 +1,9 @@
using System.Runtime.Serialization;
namespace Umbraco.Web.Models.ContentEditing
{
[DataContract(Name = "memberGroup", Namespace = "")]
public class MemberGroupSave : EntityBasic
{
}
}

View File

@@ -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>

View 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));
}
}
}

View File

@@ -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);
}
}

View File

@@ -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));
}
}
}

View File

@@ -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>

View File

@@ -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);
}
}
}
}
}

View File

@@ -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>

View File

@@ -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
}
}

View File

@@ -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;
}
}