Files
Umbraco-CMS/src/Umbraco.Web/Models/Mapping/MemberMapDefinition.cs

196 lines
9.2 KiB
C#
Raw Normal View History

2017-07-19 13:42:47 +02:00
using System;
using System.Collections.Generic;
2019-04-03 10:39:59 +02:00
using System.Linq;
2017-07-19 13:42:47 +02:00
using System.Web.Security;
using Umbraco.Core;
using Umbraco.Core.Mapping;
2017-07-19 13:42:47 +02:00
using Umbraco.Core.Models;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Security;
2017-07-19 13:42:47 +02:00
using Umbraco.Core.Services;
using Umbraco.Web.Models.ContentEditing;
2017-12-28 09:18:09 +01:00
using Umbraco.Core.Services.Implement;
using UserProfile = Umbraco.Web.Models.ContentEditing.UserProfile;
2017-07-19 13:42:47 +02:00
namespace Umbraco.Web.Models.Mapping
{
/// <summary>
/// Declares model mappings for members.
/// </summary>
2019-04-03 10:39:49 +02:00
internal class MemberMapDefinition : IMapDefinition
2017-07-19 13:42:47 +02:00
{
private readonly CommonMapper _commonMapper;
private readonly IMemberTypeService _memberTypeService;
2019-04-03 10:39:59 +02:00
private readonly MemberTabsAndPropertiesMapper _tabsAndPropertiesMapper;
2019-04-03 10:39:59 +02:00
public MemberMapDefinition(CommonMapper commonMapper, IMemberTypeService memberTypeService, MemberTabsAndPropertiesMapper tabsAndPropertiesMapper)
{
_commonMapper = commonMapper;
_memberTypeService = memberTypeService;
2019-04-03 10:39:59 +02:00
_tabsAndPropertiesMapper = tabsAndPropertiesMapper;
}
2019-04-03 10:39:49 +02:00
public void DefineMaps(UmbracoMapper mapper)
{
mapper.Define<MembershipUser, MemberDisplay>((source, context) => new MemberDisplay(), Map);
mapper.Define<MembershipUser, IMember>((source, context) => MemberService.CreateGenericMembershipProviderMember(source.UserName, source.Email, source.UserName, ""), Map);
mapper.Define<IMember, MemberDisplay>((source, context) => new MemberDisplay(), Map);
mapper.Define<IMember, MemberBasic>((source, context) => new MemberBasic(), Map);
mapper.Define<MembershipUser, MemberBasic>((source, context) => new MemberBasic(), Map);
mapper.Define<IMemberGroup, MemberGroupDisplay>((source, context) => new MemberGroupDisplay(), Map);
2019-04-03 10:39:59 +02:00
mapper.Define<IMember, ContentPropertyCollectionDto>((source, context) => new ContentPropertyCollectionDto(), Map);
}
private void Map(MembershipUser source, MemberDisplay target, MapperContext context)
{
//first convert to IMember
2019-04-07 11:26:47 +02:00
var member = context.Map<IMember>(source);
//then convert to MemberDisplay
2019-04-07 11:26:47 +02:00
context.Map<IMember, MemberDisplay>(member);
}
// TODO: SD: I can't remember why this mapping is here?
// Umbraco.Code.MapAll -Properties -CreatorId -Level -Name -CultureInfos -ParentId
// Umbraco.Code.MapAll -Path -SortOrder -DeleteDate -WriterId -VersionId -PasswordQuestion
// Umbraco.Code.MapAll -RawPasswordAnswerValue -FailedPasswordAttempts
private void Map(MembershipUser source, IMember target, MapperContext context)
{
target.Comments = source.Comment;
target.CreateDate = source.CreationDate;
target.Email = source.Email;
target.Id = int.MaxValue;
target.IsApproved = source.IsApproved;
target.IsLockedOut = source.IsLockedOut;
target.Key = source.ProviderUserKey.TryConvertTo<Guid>().Result;
target.LastLockoutDate = source.LastLockoutDate;
target.LastLoginDate = source.LastLoginDate;
target.LastPasswordChangeDate = source.LastPasswordChangedDate;
target.ProviderUserKey = source.ProviderUserKey;
target.RawPasswordValue = source.CreationDate > DateTime.MinValue ? Guid.NewGuid().ToString("N") : "";
target.UpdateDate = source.LastActivityDate;
target.Username = source.UserName;
}
// Umbraco.Code.MapAll -Properties -Errors -Edited -Updater -Alias -IsChildOfListView
// Umbraco.Code.MapAll -Trashed -IsContainer -VariesByCulture
private void Map(IMember source, MemberDisplay target, MapperContext context)
{
target.ContentTypeId = source.ContentType.Id;
target.ContentTypeAlias = source.ContentType.Alias;
target.ContentTypeName = source.ContentType.Name;
target.CreateDate = source.CreateDate;
target.Email = source.Email;
target.Icon = source.ContentType.Icon;
target.Id = source.Id;
target.Key = source.Key;
target.MemberProviderFieldMapping = GetMemberProviderFieldMapping();
target.MembershipScenario = GetMembershipScenario();
target.Name = source.Name;
2019-04-07 11:26:47 +02:00
target.Owner = _commonMapper.GetOwner(source, context);
target.ParentId = source.ParentId;
target.Path = source.Path;
target.SortOrder = source.SortOrder;
target.State = null;
target.Tabs = _tabsAndPropertiesMapper.Map(source, context);
target.TreeNodeUrl = _commonMapper.GetMemberTreeNodeUrl(source);
target.Udi = Udi.Create(Constants.UdiEntityType.Member, source.Key);
target.UpdateDate = source.UpdateDate;
target.Username = source.Username;
}
// Umbraco.Code.MapAll -Trashed -Edited -Updater -Alias -VariesByCulture
private void Map(IMember source, MemberBasic target, MapperContext context)
2017-07-19 13:42:47 +02:00
{
target.ContentTypeId = source.ContentType.Id;
target.ContentTypeAlias = source.ContentType.Alias;
target.CreateDate = source.CreateDate;
target.Email = source.Email;
target.Icon = source.ContentType.Icon;
target.Id = int.MaxValue;
target.Key = source.Key;
target.Name = source.Name;
2019-04-07 11:26:47 +02:00
target.Owner = _commonMapper.GetOwner(source, context);
target.ParentId = source.ParentId;
target.Path = source.Path;
2019-04-08 16:38:18 +02:00
target.Properties = context.MapEnumerable<Property, ContentPropertyBasic>(source.Properties);
target.SortOrder = source.SortOrder;
target.State = null;
target.Udi = Udi.Create(Constants.UdiEntityType.Member, source.Key);
target.UpdateDate = source.UpdateDate;
target.Username = source.Username;
}
//TODO: SD: I can't remember why this mapping is here?
// Umbraco.Code.MapAll -Udi -Properties -ParentId -Path -SortOrder -Edited -Updater
// Umbraco.Code.MapAll -Trashed -Alias -ContentTypeId -ContentTypeAlias -VariesByCulture
private void Map(MembershipUser source, MemberBasic target, MapperContext context)
{
target.CreateDate = source.CreationDate;
target.Email = source.Email;
target.Icon = "icon-user";
target.Id = int.MaxValue;
target.Key = source.ProviderUserKey.TryConvertTo<Guid>().Result;
target.Name = source.UserName;
target.Owner = new UserProfile { Name = "Admin", UserId = -1 };
target.State = ContentSavedState.Draft;
target.UpdateDate = source.LastActivityDate;
target.Username = source.UserName;
}
// Umbraco.Code.MapAll -Icon -Trashed -ParentId -Alias
private void Map(IMemberGroup source, MemberGroupDisplay target, MapperContext context)
{
target.Id = source.Id;
target.Key = source.Key;
target.Name = source.Name;
target.Path = "-1" + source.Id;
target.Udi = Udi.Create(Constants.UdiEntityType.MemberGroup, source.Key);
}
2019-04-03 10:39:59 +02:00
// Umbraco.Code.MapAll
private static void Map(IMember source, ContentPropertyCollectionDto target, MapperContext context)
{
2019-04-08 10:05:21 +02:00
target.Properties = context.MapEnumerable<Property, ContentPropertyDto>(source.Properties);
2019-04-03 10:39:59 +02:00
}
private MembershipScenario GetMembershipScenario()
{
var provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
if (provider.IsUmbracoMembershipProvider())
{
return MembershipScenario.NativeUmbraco;
}
var memberType = _memberTypeService.Get(Constants.Conventions.MemberTypes.DefaultAlias);
return memberType != null
? MembershipScenario.CustomProviderWithUmbracoLink
: MembershipScenario.StandaloneCustomProvider;
}
private static IDictionary<string, string> GetMemberProviderFieldMapping()
{
var provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
if (provider.IsUmbracoMembershipProvider() == false)
{
return new Dictionary<string, string>
{
{Constants.Conventions.Member.IsLockedOut, Constants.Conventions.Member.IsLockedOut},
{Constants.Conventions.Member.IsApproved, Constants.Conventions.Member.IsApproved},
{Constants.Conventions.Member.Comments, Constants.Conventions.Member.Comments}
};
}
var umbracoProvider = (IUmbracoMemberTypeMembershipProvider)provider;
return new Dictionary<string, string>
{
{Constants.Conventions.Member.IsLockedOut, umbracoProvider.LockPropertyTypeAlias},
{Constants.Conventions.Member.IsApproved, umbracoProvider.ApprovedPropertyTypeAlias},
{Constants.Conventions.Member.Comments, umbracoProvider.CommentPropertyTypeAlias}
};
2017-07-19 13:42:47 +02:00
}
}
2017-07-20 11:21:28 +02:00
}