From ddfd2fece45827081e8d0045da44e511c2127e12 Mon Sep 17 00:00:00 2001 From: Per Ploug Date: Mon, 8 Jun 2015 18:16:52 +0200 Subject: [PATCH] Map member types --- .../Models/Mapping/MemberTypeModelMapper.cs | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/Umbraco.Web/Models/Mapping/MemberTypeModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MemberTypeModelMapper.cs index 83113857f0..54d726b8e5 100644 --- a/src/Umbraco.Web/Models/Mapping/MemberTypeModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MemberTypeModelMapper.cs @@ -39,6 +39,50 @@ namespace Umbraco.Web.Models.Mapping .ForMember( dto => dto.Groups, expression => expression.ResolveUsing(new PropertyTypeGroupResolver(applicationContext, _propertyEditorResolver))); + + config.CreateMap() + .ConstructUsing((MemberTypeDisplay source) => new MemberType(source.ParentId)) + + //only map id if set to something higher then zero + .ForMember(dto => dto.Id, expression => expression.Condition(display => (Convert.ToInt32(display.Id) > 0))) + .ForMember(dto => dto.Id, expression => expression.MapFrom(display => Convert.ToInt32(display.Id))) + .ForMember(dto => dto.CreatorId, expression => expression.Ignore()) + .ForMember(dto => dto.Level, expression => expression.Ignore()) + .ForMember(dto => dto.SortOrder, expression => expression.Ignore()) + + //mapped in aftermap + .ForMember(dto => dto.AllowedContentTypes, expression => expression.Ignore()) + + //ignore, we'll do this in after map + .ForMember(dto => dto.PropertyGroups, expression => expression.Ignore()) + .AfterMap((source, dest) => + { + //get all properties from groups that are not generic properties (-666 id) + foreach (var groupDisplay in source.Groups.Where(x => x.Id != -666)) + { + //use underlying logic to add the property group which should wire most things up for us + dest.AddPropertyGroup(groupDisplay.Name); + //now update that group with the values from the display object + Mapper.Map(groupDisplay, dest.PropertyGroups[groupDisplay.Name]); + + foreach (var propertyTypeDisplay in groupDisplay.Properties) + { + dest.AddPropertyType(Mapper.Map(propertyTypeDisplay), groupDisplay.Name); + } + //dest.PropertyGroups.Add(Mapper.Map(groupDisplay)); + } + + //add generic properties + var genericProperties = source.Groups.FirstOrDefault(x => x.Id == -666); + if (genericProperties != null) + { + foreach (var propertyTypeDisplay in genericProperties.Properties) + { + dest.AddPropertyType(Mapper.Map(propertyTypeDisplay)); + } + } + + }); } } }