From 9bf61bb487f794e9029d3be0b72bfd1ee972aca7 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 6 Jun 2017 02:05:17 +0200 Subject: [PATCH] real data for user group --- .../src/common/resources/users.resource.js | 46 ++------- .../src/views/users/group.controller.js | 4 +- src/Umbraco.Web/Editors/UsersController.cs | 17 +++- .../Models/ContentEditing/ContentItemBasic.cs | 4 +- .../Models/ContentEditing/UserBasic.cs | 57 +++++++---- .../Models/ContentEditing/UserDetail.cs | 2 +- .../Models/ContentEditing/UserDisplay.cs | 44 +-------- .../Models/ContentEditing/UserGroupBasic.cs | 29 ++++++ .../Models/ContentEditing/UserGroupDisplay.cs | 25 +---- .../Models/ContentEditing/UserProfile.cs | 28 ++++++ .../Models/Mapping/CreatorResolver.cs | 7 +- .../Models/Mapping/MemberModelMapper.cs | 3 +- .../Models/Mapping/OwnerResolver.cs | 7 +- .../Models/Mapping/UserModelMapper.cs | 97 ++++++++++++++----- src/Umbraco.Web/Umbraco.Web.csproj | 4 +- 15 files changed, 219 insertions(+), 155 deletions(-) create mode 100644 src/Umbraco.Web/Models/ContentEditing/UserGroupBasic.cs create mode 100644 src/Umbraco.Web/Models/ContentEditing/UserProfile.cs diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js index 90da2b9010..242afd9525 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js @@ -164,42 +164,16 @@ "Failed to save user"); } - function getUserGroup() { - var deferred = $q.defer(); - var user = { - "name": "Admin", - "alias": "admin", - "id": 1, - "icon": "icon-medal", - "users": [ - { - "id": 1, - "name": "Angela Stone", - "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/jina/128.jpg", - "state": "active" - }, - { - "id": 2, - "name": "Beverly Silva", - "avatar": "", - "state": "disabled" - }, - { - "id": 3, - "name": "Ruth Turner", - "avatar": "", - "state": "pending" - }, - { - "id": 4, - "name": "Arthur Welch", - "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/ashleyford/128.jpg", - "state": "active" - } - ] - }; - deferred.resolve(user); - return deferred.promise; + function getUserGroup(id) { + + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "userApiBaseUrl", + "GetUserGroup", + { id: id })), + "Failed to retrieve data for user group " + id); + } function getUserGroups() { diff --git a/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js b/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js index ee88ac8839..731518e2b4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js @@ -1,7 +1,7 @@ (function () { "use strict"; - function UserGroupEditController($scope, $timeout, $location, usersResource) { + function UserGroupEditController($scope, $timeout, $location, usersResource, $routeParams) { var vm = this; @@ -22,7 +22,7 @@ vm.loading = true; // get user - usersResource.getUserGroup().then(function (userGroup) { + usersResource.getUserGroup($routeParams.id).then(function (userGroup) { vm.userGroup = userGroup; makeBreadcrumbs(); }); diff --git a/src/Umbraco.Web/Editors/UsersController.cs b/src/Umbraco.Web/Editors/UsersController.cs index 98f476d7c3..dac443c330 100644 --- a/src/Umbraco.Web/Editors/UsersController.cs +++ b/src/Umbraco.Web/Editors/UsersController.cs @@ -164,9 +164,22 @@ namespace Umbraco.Web.Editors /// Returns all user groups /// /// - public IEnumerable GetUserGroups() + public IEnumerable GetUserGroups() { - return Mapper.Map, IEnumerable>(Services.UserService.GetAllUserGroups()); + return Mapper.Map, IEnumerable>(Services.UserService.GetAllUserGroups()); + } + + /// + /// Returns all user groups + /// + /// + public UserGroupDisplay GetUserGroup(int id) + { + var found = Services.UserService.GetUserGroupById(id); + if (found == null) + throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound)); + + return Mapper.Map(found); } /// diff --git a/src/Umbraco.Web/Models/ContentEditing/ContentItemBasic.cs b/src/Umbraco.Web/Models/ContentEditing/ContentItemBasic.cs index 74c6a3ea7e..f4f6b5a2e0 100644 --- a/src/Umbraco.Web/Models/ContentEditing/ContentItemBasic.cs +++ b/src/Umbraco.Web/Models/ContentEditing/ContentItemBasic.cs @@ -29,10 +29,10 @@ namespace Umbraco.Web.Models.ContentEditing public bool HasPublishedVersion { get; set; } [DataMember(Name = "owner")] - public UserBasic Owner { get; set; } + public UserProfile Owner { get; set; } [DataMember(Name = "updater")] - public UserBasic Updater { get; set; } + public UserProfile Updater { get; set; } [DataMember(Name = "contentTypeAlias", IsRequired = true)] [Required(AllowEmptyStrings = false)] diff --git a/src/Umbraco.Web/Models/ContentEditing/UserBasic.cs b/src/Umbraco.Web/Models/ContentEditing/UserBasic.cs index 07e800d647..60f00a85e7 100644 --- a/src/Umbraco.Web/Models/ContentEditing/UserBasic.cs +++ b/src/Umbraco.Web/Models/ContentEditing/UserBasic.cs @@ -1,28 +1,51 @@ using System; -using System.ComponentModel.DataAnnotations; +using System.Collections.Generic; +using System.ComponentModel; using System.Runtime.Serialization; using Umbraco.Core.Models.Membership; namespace Umbraco.Web.Models.ContentEditing { - /// - /// A bare minimum structure that represents a user, usually attached to other objects - /// [DataContract(Name = "user", Namespace = "")] - public class UserBasic : IComparable + [ReadOnly(true)] + public class UserBasic : EntityBasic, INotificationModel { - [DataMember(Name = "id", IsRequired = true)] - [Required] - public int UserId { get; set; } - - [DataMember(Name = "name", IsRequired = true)] - [Required] - public string Name { get; set; } - - - int IComparable.CompareTo(object obj) + public UserBasic() { - return String.Compare(Name, ((UserBasic)obj).Name, StringComparison.Ordinal); - } + Notifications = new List(); + } + + [DataMember(Name = "username")] + public string Username { get; set; } + + /// + /// The MD5 lowercase hash of the email which can be used by gravatar + /// + [DataMember(Name = "emailHash")] + public string EmailHash { get; set; } + + [DataMember(Name = "lastLoginDate")] + public DateTime? LastLoginDate { get; set; } + + /// + /// Returns a list of different size avatars + /// + [DataMember(Name = "avatars")] + public string[] Avatars { get; set; } + + [DataMember(Name = "userState")] + public UserState UserState { get; set; } + + [DataMember(Name = "culture", IsRequired = true)] + public string Culture { get; set; } + + [DataMember(Name = "email", IsRequired = true)] + public string Email { get; set; } + + /// + /// 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/UserDetail.cs b/src/Umbraco.Web/Models/ContentEditing/UserDetail.cs index 6f70222d98..a8846ff182 100644 --- a/src/Umbraco.Web/Models/ContentEditing/UserDetail.cs +++ b/src/Umbraco.Web/Models/ContentEditing/UserDetail.cs @@ -8,7 +8,7 @@ namespace Umbraco.Web.Models.ContentEditing /// Represents information for the current user /// [DataContract(Name = "user", Namespace = "")] - public class UserDetail : UserBasic + public class UserDetail : UserProfile { [DataMember(Name = "email", IsRequired = true)] [Required] diff --git a/src/Umbraco.Web/Models/ContentEditing/UserDisplay.cs b/src/Umbraco.Web/Models/ContentEditing/UserDisplay.cs index 3b39369b61..1c3b19ab90 100644 --- a/src/Umbraco.Web/Models/ContentEditing/UserDisplay.cs +++ b/src/Umbraco.Web/Models/ContentEditing/UserDisplay.cs @@ -1,9 +1,7 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Runtime.Serialization; -using Umbraco.Core.Models.Membership; namespace Umbraco.Web.Models.ContentEditing { @@ -12,45 +10,17 @@ namespace Umbraco.Web.Models.ContentEditing /// [DataContract(Name = "user", Namespace = "")] [ReadOnly(true)] - public class UserDisplay : EntityBasic, INotificationModel + public class UserDisplay : UserBasic { - public UserDisplay() + public UserDisplay() : base() { - Notifications = new List(); } - [DataMember(Name = "username")] - public string Username { get; set; } - - /// - /// The MD5 lowercase hash of the email which can be used by gravatar - /// - [DataMember(Name = "emailHash")] - public string EmailHash { get; set; } - - [DataMember(Name = "lastLoginDate")] - public DateTime? LastLoginDate { get; set; } - - /// - /// Returns a list of different size avatars - /// - [DataMember(Name = "avatars")] - public string[] Avatars { get; set; } - - [DataMember(Name = "userState")] - public UserState UserState { get; set; } - - [DataMember(Name = "culture", IsRequired = true)] - public string Culture { get; set; } - - [DataMember(Name = "email", IsRequired = true)] - public string Email { get; set; } - /// /// The list of group aliases assigned to the user /// [DataMember(Name = "userGroups")] - public IEnumerable UserGroups { get; set; } + public IEnumerable UserGroups { get; set; } /// /// Gets the available cultures (i.e. to populate a drop down) @@ -70,11 +40,5 @@ namespace Umbraco.Web.Models.ContentEditing ///// //[DataMember(Name = "allowedSections")] //public IEnumerable AllowedSections { get; set; } - - /// - /// 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/UserGroupBasic.cs b/src/Umbraco.Web/Models/ContentEditing/UserGroupBasic.cs new file mode 100644 index 0000000000..3d6b304bef --- /dev/null +++ b/src/Umbraco.Web/Models/ContentEditing/UserGroupBasic.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace Umbraco.Web.Models.ContentEditing +{ + [DataContract(Name = "userGroup", Namespace = "")] + public class UserGroupBasic : EntityBasic, INotificationModel + { + public UserGroupBasic() + { + 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; } + + [DataMember(Name = "sections")] + public IEnumerable
Sections { get; set; } + + [DataMember(Name = "startContentId")] + public EntityBasic StartContentId { get; set; } + + [DataMember(Name = "startMediaId")] + public EntityBasic StartMediaId { get; set; } + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Models/ContentEditing/UserGroupDisplay.cs b/src/Umbraco.Web/Models/ContentEditing/UserGroupDisplay.cs index d3510ef781..fdeab12e05 100644 --- a/src/Umbraco.Web/Models/ContentEditing/UserGroupDisplay.cs +++ b/src/Umbraco.Web/Models/ContentEditing/UserGroupDisplay.cs @@ -1,29 +1,12 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Runtime.Serialization; namespace Umbraco.Web.Models.ContentEditing { [DataContract(Name = "userGroup", Namespace = "")] - public class UserGroupDisplay : EntityBasic, INotificationModel + public class UserGroupDisplay : UserGroupBasic { - public UserGroupDisplay() - { - 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; } - - [DataMember(Name = "sections")] - public IEnumerable
Sections { get; set; } - - [DataMember(Name = "startContentId")] - public EntityBasic StartContentId { get; set; } - - [DataMember(Name = "startMediaId")] - public EntityBasic StartMediaId { get; set; } + [DataMember(Name = "users")] + public IEnumerable Users { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Web/Models/ContentEditing/UserProfile.cs b/src/Umbraco.Web/Models/ContentEditing/UserProfile.cs new file mode 100644 index 0000000000..eca28e1408 --- /dev/null +++ b/src/Umbraco.Web/Models/ContentEditing/UserProfile.cs @@ -0,0 +1,28 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Umbraco.Core.Models.Membership; + +namespace Umbraco.Web.Models.ContentEditing +{ + /// + /// A bare minimum structure that represents a user, usually attached to other objects + /// + [DataContract(Name = "user", Namespace = "")] + public class UserProfile : IComparable + { + [DataMember(Name = "id", IsRequired = true)] + [Required] + public int UserId { get; set; } + + [DataMember(Name = "name", IsRequired = true)] + [Required] + public string Name { get; set; } + + + int IComparable.CompareTo(object obj) + { + return String.Compare(Name, ((UserProfile)obj).Name, StringComparison.Ordinal); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Models/Mapping/CreatorResolver.cs b/src/Umbraco.Web/Models/Mapping/CreatorResolver.cs index 0f67a974f6..28e9799861 100644 --- a/src/Umbraco.Web/Models/Mapping/CreatorResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/CreatorResolver.cs @@ -2,17 +2,18 @@ using Umbraco.Core.Models; using Umbraco.Core.Models.Membership; using Umbraco.Web.Models.ContentEditing; +using UserProfile = Umbraco.Web.Models.ContentEditing.UserProfile; namespace Umbraco.Web.Models.Mapping { /// /// Maps the Creator for content /// - internal class CreatorResolver : ValueResolver + internal class CreatorResolver : ValueResolver { - protected override UserBasic ResolveCore(IContent source) + protected override UserProfile ResolveCore(IContent source) { - return Mapper.Map(source.GetWriterProfile()); + return Mapper.Map(source.GetWriterProfile()); } } } \ 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 976026bd97..e3c82cf782 100644 --- a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs @@ -15,6 +15,7 @@ using System.Linq; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Security; using Umbraco.Web.Trees; +using UserProfile = Umbraco.Web.Models.ContentEditing.UserProfile; namespace Umbraco.Web.Models.Mapping { @@ -106,7 +107,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(member => member.CreateDate, expression => expression.MapFrom(user => user.CreationDate)) .ForMember(member => member.UpdateDate, expression => expression.MapFrom(user => user.LastActivityDate)) .ForMember(member => member.Key, expression => expression.MapFrom(user => user.ProviderUserKey.TryConvertTo().Result.ToString("N"))) - .ForMember(member => member.Owner, expression => expression.UseValue(new UserBasic {Name = "Admin", UserId = 0})) + .ForMember(member => member.Owner, expression => expression.UseValue(new UserProfile {Name = "Admin", UserId = 0})) .ForMember(member => member.Icon, expression => expression.UseValue("icon-user")) .ForMember(member => member.Name, expression => expression.MapFrom(user => user.UserName)) .ForMember(member => member.Email, expression => expression.MapFrom(content => content.Email)) diff --git a/src/Umbraco.Web/Models/Mapping/OwnerResolver.cs b/src/Umbraco.Web/Models/Mapping/OwnerResolver.cs index 067d495591..8992451e9e 100644 --- a/src/Umbraco.Web/Models/Mapping/OwnerResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/OwnerResolver.cs @@ -3,6 +3,7 @@ using Umbraco.Core.Models; using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Models.Membership; using Umbraco.Web.Models.ContentEditing; +using UserProfile = Umbraco.Web.Models.ContentEditing.UserProfile; namespace Umbraco.Web.Models.Mapping { @@ -10,12 +11,12 @@ namespace Umbraco.Web.Models.Mapping /// Maps the Owner for IContentBase /// /// - internal class OwnerResolver : ValueResolver + internal class OwnerResolver : ValueResolver where TPersisted : IContentBase { - protected override UserBasic ResolveCore(TPersisted source) + protected override UserProfile ResolveCore(TPersisted source) { - return Mapper.Map(source.GetCreatorProfile()); + return Mapper.Map(source.GetCreatorProfile()); } } } \ No newline at end of file diff --git a/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs b/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs index 2fa1c3026f..415ce28a27 100644 --- a/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs @@ -12,13 +12,15 @@ using Umbraco.Core.Models; using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Models.Identity; using Umbraco.Core.Security; +using Umbraco.Core.Services; +using UserProfile = Umbraco.Web.Models.ContentEditing.UserProfile; namespace Umbraco.Web.Models.Mapping { internal class UserModelMapper : MapperConfiguration { public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) - { + { //Used for merging existing UserSave to an existing IUser instance - this will not create an IUser instance! config.CreateMap() .ForMember(user => user.Language, expression => expression.MapFrom(save => save.Culture)) @@ -40,14 +42,14 @@ namespace Umbraco.Web.Models.Mapping .ForMember(user => user.CreateDate, expression => expression.Ignore()) .ForMember(user => user.UpdateDate, expression => expression.Ignore()) .AfterMap((save, user) => - { + { user.ClearGroups(); var foundGroups = applicationContext.Services.UserService.GetUserGroupsByAlias(save.UserGroups.ToArray()); foreach (var group in foundGroups) { user.AddGroup(group.ToReadOnlyGroup()); } - }); + }); config.CreateMap() .ConstructUsing(invite => new User(invite.Name, invite.Email, invite.Email, Guid.NewGuid().ToString("N"))) @@ -86,7 +88,7 @@ namespace Umbraco.Web.Models.Mapping } }); - config.CreateMap() + config.CreateMap() .ForMember(detail => detail.StartContentId, opt => opt.Ignore()) .ForMember(detail => detail.StartMediaId, opt => opt.Ignore()) .ForMember(detail => detail.Key, opt => opt.Ignore()) @@ -99,18 +101,10 @@ namespace Umbraco.Web.Models.Mapping .ForMember(detail => detail.AdditionalData, opt => opt.Ignore()) .AfterMap((group, display) => { - var allSections = applicationContext.Services.SectionService.GetSections(); - display.Sections = allSections.Where(x => group.Alias == x.Alias).Select(Mapper.Map); + MapUserGroupBasic(applicationContext.Services, group, display); + }); - //applicationContext.Services.EntityService.Get(x.StartContentId, false)) - //applicationContext.Services.EntityService.Get(x.StartMediaId, false)) - if (display.Icon.IsNullOrWhiteSpace()) - { - display.Icon = "icon-users"; - } - }); - - config.CreateMap() + config.CreateMap() .ForMember(detail => detail.StartContentId, opt => opt.Ignore()) .ForMember(detail => detail.StartMediaId, opt => opt.Ignore()) .ForMember(detail => detail.Sections, opt => opt.Ignore()) @@ -122,12 +116,25 @@ namespace Umbraco.Web.Models.Mapping .ForMember(detail => detail.AdditionalData, opt => opt.Ignore()) .AfterMap((group, display) => { - var allSections = applicationContext.Services.SectionService.GetSections(); - display.Sections = allSections.Where(x => group.Alias == x.Alias).Select(Mapper.Map); - - //applicationContext.Services.EntityService.Get(x.StartContentId, false)) - //applicationContext.Services.EntityService.Get(x.StartMediaId, false)) + MapUserGroupBasic(applicationContext.Services, group, display); + }); + config.CreateMap() + .ForMember(detail => detail.StartContentId, opt => opt.Ignore()) + .ForMember(detail => detail.StartMediaId, opt => opt.Ignore()) + .ForMember(detail => detail.Sections, opt => opt.Ignore()) + .ForMember(detail => detail.Notifications, opt => opt.Ignore()) + .ForMember(detail => detail.Udi, opt => opt.Ignore()) + .ForMember(detail => detail.Trashed, opt => opt.Ignore()) + .ForMember(detail => detail.ParentId, opt => opt.UseValue(-1)) + .ForMember(detail => detail.Path, opt => opt.MapFrom(userGroup => "-1," + userGroup.Id)) + .ForMember(detail => detail.AdditionalData, opt => opt.Ignore()) + .ForMember(detail => detail.Users, opt => opt.Ignore()) + .AfterMap((group, display) => + { + MapUserGroupBasic(applicationContext.Services, group, display); + var users = applicationContext.Services.UserService.GetAllInGroup(group.Id); + display.Users = Mapper.Map>(users); }); config.CreateMap() @@ -165,11 +172,29 @@ namespace Umbraco.Web.Models.Mapping if (startMediaIds.Length > 0) { var mediaItems = applicationContext.Services.EntityService.GetAll(UmbracoObjectTypes.Document, startMediaIds); - display.StartMediaIds = Mapper.Map, IEnumerable>(mediaItems); + display.StartMediaIds = Mapper.Map, IEnumerable>(mediaItems); } - display.UserGroups = Mapper.Map, IEnumerable>(user.Groups); + display.UserGroups = Mapper.Map, IEnumerable>(user.Groups); - }); + }); + + config.CreateMap() + .ForMember(detail => detail.Avatars, opt => opt.MapFrom(user => user.GetCurrentUserAvatarUrls(applicationContext.Services.UserService, applicationContext.ApplicationCache.RuntimeCache))) + .ForMember(detail => detail.Username, opt => opt.MapFrom(user => user.Username)) + .ForMember(detail => detail.LastLoginDate, opt => opt.MapFrom(user => user.LastLoginDate == default(DateTime) ? null : (DateTime?) user.LastLoginDate)) + .ForMember(detail => detail.Culture, opt => opt.MapFrom(user => user.GetUserCulture(applicationContext.Services.TextService))) + .ForMember( + detail => detail.EmailHash, + opt => opt.MapFrom(user => user.Email.ToLowerInvariant().Trim().ToMd5())) + .ForMember(detail => detail.ParentId, opt => opt.UseValue(-1)) + .ForMember(detail => detail.Path, opt => opt.MapFrom(user => "-1," + user.Id)) + .ForMember(detail => detail.Notifications, opt => opt.Ignore()) + .ForMember(detail => detail.Udi, opt => opt.Ignore()) + .ForMember(detail => detail.Icon, opt => opt.Ignore()) + .ForMember(detail => detail.Trashed, opt => opt.Ignore()) + .ForMember(detail => detail.Alias, opt => opt.Ignore()) + .ForMember(detail => detail.Trashed, opt => opt.Ignore()) + .ForMember(detail => detail.AdditionalData, opt => opt.Ignore()); config.CreateMap() .ForMember(detail => detail.Avatars, opt => opt.MapFrom(user => user.GetCurrentUserAvatarUrls(applicationContext.Services.UserService, applicationContext.ApplicationCache.RuntimeCache))) @@ -182,7 +207,7 @@ namespace Umbraco.Web.Models.Mapping opt => opt.MapFrom(user => user.Email.ToLowerInvariant().Trim().ToMd5())) .ForMember(detail => detail.SecondsUntilTimeout, opt => opt.Ignore()); - config.CreateMap() + config.CreateMap() .ForMember(detail => detail.UserId, opt => opt.MapFrom(profile => GetIntId(profile.Id))); config.CreateMap() @@ -197,8 +222,28 @@ namespace Umbraco.Web.Models.Mapping .ForMember(detail => detail.Culture, opt => opt.MapFrom(user => user.GetUserCulture(applicationContext.Services.TextService))) .ForMember(detail => detail.SessionId, opt => opt.MapFrom(user => user.SecurityStamp.IsNullOrWhiteSpace() ? Guid.NewGuid().ToString("N") : user.SecurityStamp)); - } - + } + + private void MapUserGroupBasic(ServiceContext services, dynamic group, UserGroupBasic display) + { + var allSections = services.SectionService.GetSections(); + display.Sections = allSections.Where(x => group.Alias == x.Alias).Select(Mapper.Map); + if (group.StartMediaId > 0) + { + display.StartMediaId = Mapper.Map( + services.EntityService.Get(group.StartMediaId, false)); + } + if (group.StartContentId > 0) + { + display.StartContentId = Mapper.Map( + services.EntityService.Get(group.StartContentId, false)); + } + if (display.Icon.IsNullOrWhiteSpace()) + { + display.Icon = "icon-users"; + } + } + private static int GetIntId(object id) { var result = id.TryConvertTo(); diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 1b657523d7..4ba6564409 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -388,6 +388,8 @@ + + @@ -836,7 +838,7 @@ - +