From 8ec652c5574ebc135d3bd40f89f189a4c646070c Mon Sep 17 00:00:00 2001 From: Per Ploug Date: Mon, 8 Jun 2015 18:16:41 +0200 Subject: [PATCH 1/6] ignore system properties --- .../Models/Mapping/PropertyTypeGroupResolver.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web/Models/Mapping/PropertyTypeGroupResolver.cs b/src/Umbraco.Web/Models/Mapping/PropertyTypeGroupResolver.cs index 7c9799a059..dd31ff7b49 100644 --- a/src/Umbraco.Web/Models/Mapping/PropertyTypeGroupResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/PropertyTypeGroupResolver.cs @@ -90,12 +90,13 @@ namespace Umbraco.Web.Models.Mapping //get all generic properties not already mapped to the generic props collection - var ownGenericProperties = source.CompositionPropertyTypes.Where(x => x.PropertyGroupId == null && genericProperties.Any(y => y.Id == x.Id)); + var ownGenericProperties = source.CompositionPropertyTypes.Where(x => x.PropertyGroupId == null && !genericProperties.Any(y => y.Id == x.Id)); genericProperties.AddRange(MapProperties(ownGenericProperties, source, 0, false)); if (genericProperties.Any()) { - var genericTab = new PropertyGroupDisplay() { Id = 0, Name = "Generic properties", ParentGroupId = 0, ContentTypeId = source.Id, SortOrder = 999, Inherited = false }; + var genericTab = new PropertyGroupDisplay() { Id = -666, Name = "Generic properties", ParentGroupId = 0, ContentTypeId = source.Id, SortOrder = 999, Inherited = false }; + genericTab.Properties = genericProperties; groups.Add(0, genericTab); } @@ -145,7 +146,7 @@ namespace Umbraco.Web.Models.Mapping private IEnumerable MapProperties(IEnumerable properties, IContentTypeBase contentType, int groupId, bool inherited) { var mappedProperties = new List(); - foreach (var p in properties) + foreach (var p in properties.Where(x => x.DataTypeDefinitionId != 0) ) { var editor = _propertyEditorResolver.Value.GetByAlias(p.PropertyEditorAlias); var preVals = _applicationContext.Services.DataTypeService.GetPreValuesCollectionByDataTypeId(p.DataTypeDefinitionId); From ddfd2fece45827081e8d0045da44e511c2127e12 Mon Sep 17 00:00:00 2001 From: Per Ploug Date: Mon, 8 Jun 2015 18:16:52 +0200 Subject: [PATCH 2/6] 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)); + } + } + + }); } } } From e8abe4af2d8f9e9ae1bfb30bcd2eda780341ffac Mon Sep 17 00:00:00 2001 From: Per Ploug Date: Mon, 8 Jun 2015 18:17:10 +0200 Subject: [PATCH 3/6] map generic properties the right way --- .../Models/Mapping/ContentTypeModelMapper.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs index 07f5340822..ac88f6b111 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs @@ -36,7 +36,6 @@ namespace Umbraco.Web.Models.Mapping config.CreateMap(); config.CreateMap(); - config.CreateMap() .ConstructUsing((ContentTypeDisplay source) => new ContentType(source.ParentId)) @@ -56,7 +55,8 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dto => dto.PropertyGroups, expression => expression.Ignore()) .AfterMap((source, dest) => { - foreach (var groupDisplay in source.Groups.Where(x => x.Name.IsNullOrWhiteSpace() == false ) ) + //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); @@ -70,6 +70,15 @@ namespace Umbraco.Web.Models.Mapping //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)); + } + } + //Sync allowed child types var allowedTypes = source.AllowedContentTypes.Select((t, i) => new ContentTypeSort(t, i)); From 120b7bae1738889603e6a5e55bf3591d98132d25 Mon Sep 17 00:00:00 2001 From: Per Ploug Date: Mon, 8 Jun 2015 18:17:26 +0200 Subject: [PATCH 4/6] clean up membertype groups and props --- src/Umbraco.Web/Editors/MemberTypeController.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Umbraco.Web/Editors/MemberTypeController.cs b/src/Umbraco.Web/Editors/MemberTypeController.cs index 182cd64b90..7b884c095f 100644 --- a/src/Umbraco.Web/Editors/MemberTypeController.cs +++ b/src/Umbraco.Web/Editors/MemberTypeController.cs @@ -114,6 +114,13 @@ namespace Umbraco.Web.Editors ///TODO: Validate the submitted model + //filter out empty properties + contentType.Groups = contentType.Groups.Where(x => x.Name.IsNullOrWhiteSpace() == false).ToList(); + foreach (var group in contentType.Groups) + { + group.Properties = group.Properties.Where(x => x.Alias.IsNullOrWhiteSpace() == false).ToList(); + } + var ctId = Convert.ToInt32(contentType.Id); if (ctId > 0) From 77a571efb38fe31b186f58112a5de678112e8c3d Mon Sep 17 00:00:00 2001 From: Per Ploug Date: Mon, 8 Jun 2015 18:17:36 +0200 Subject: [PATCH 5/6] update ui to latest --- .../src/views/membertype/edit.controller.js | 102 ++++++++---------- .../src/views/membertype/edit.html | 16 +-- 2 files changed, 45 insertions(+), 73 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/membertype/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/membertype/edit.controller.js index af05e4d8ca..86349f7c5e 100644 --- a/src/Umbraco.Web.UI.Client/src/views/membertype/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/membertype/edit.controller.js @@ -11,57 +11,34 @@ function MemberTypeEditController($scope, $rootScope, $routeParams, $log, member $scope.page = {actions: [], menu: [], subViews: [] }; $scope.sortingMode = false; - $scope.page.subViews = [ - { - "name": "Design", - "icon": "merge", - "view": "views/documentType/views/design/design.html", - "tools": [ - { - "name": "Reorder", - "icon": "navigation", - "action": function() { - $scope.toggleSortingMode(); + $scope.page.navigation = [ + { + "name": "Design", + "icon": "merge", + "view": "views/documentType/views/design/design.html", + "active": true, + "tools": [ + { + "name": "Reorder", + "icon": "navigation", + "action": function() { + $scope.toggleSortingMode(); + } } - } - ] - } - ]; + ] + } + ]; if ($routeParams.create) { //we are creating so get an empty data type item memberTypeResource.getScaffold() .then(function(dt) { - $scope.contentType = dt; - - //set a shared state - editorState.set($scope.contentType); - - // add init tab - addInitTab(); + init(dt); }); } else { memberTypeResource.getById($routeParams.id).then(function(dt){ - $scope.contentType = dt; - - // set all tab to inactive - if( $scope.contentType.groups.length !== 0 ) { - angular.forEach($scope.contentType.groups, function(group){ - // set state - group.tabState = "inActive"; - - // push init/placeholder property - addInitProperty(group); - - }); - } - - //set a shared state - editorState.set($scope.contentType); - - // add init tab - addInitTab(); + init(dt); }); } @@ -72,26 +49,8 @@ function MemberTypeEditController($scope, $rootScope, $routeParams, $log, member //perform any pre-save logic here memberTypeResource.save($scope.contentType).then(function(dt){ - //post save logic here -the saved doctype returns as a new object - - // set all tab to inactive - if( $scope.contentType.groups.length !== 0 ) { - angular.forEach($scope.contentType.groups, function(group){ - // set state - group.tabState = "inActive"; - - // push init/placeholder property - addInitProperty(group); - - }); - } - - //set a shared state - editorState.set($scope.contentType); - - // add init tab - addInitTab(); + init(dt); }); }; @@ -137,6 +96,29 @@ function MemberTypeEditController($scope, $rootScope, $routeParams, $log, member } }; + + function init(contentType){ + + $scope.contentType = contentType; + + // set all tab to inactive + if( $scope.contentType.groups.length !== 0 ) { + angular.forEach($scope.contentType.groups, function(group){ + // set state + group.tabState = "inActive"; + + // push init/placeholder property + addInitProperty(group); + }); + } + + //set a shared state + editorState.set($scope.contentType); + + // add init tab + addInitTab(); + } + function addInitTab() { // check i init tab already exists diff --git a/src/Umbraco.Web.UI.Client/src/views/membertype/edit.html b/src/Umbraco.Web.UI.Client/src/views/membertype/edit.html index a35b0fe8d0..31ada5f5f1 100644 --- a/src/Umbraco.Web.UI.Client/src/views/membertype/edit.html +++ b/src/Umbraco.Web.UI.Client/src/views/membertype/edit.html @@ -9,23 +9,16 @@ name="contentType.name" alias="contentType.alias" description="contentType.description" - menu="page.menu" - actions="page.menu"> + navigation="page.navigation" + icon="contentType.icon"> -
- - - -
{{ contentType | json }}
- +
-
-