From c84087e96ba547ebda3d7fa4f7d616cd5e60b907 Mon Sep 17 00:00:00 2001 From: Shannon Date: Fri, 20 Apr 2018 00:59:23 +1000 Subject: [PATCH] Gets the variant names working in the editor --- src/Umbraco.Web/Editors/ContentController.cs | 16 ++++++++++-- .../Editors/ContentControllerBase.cs | 26 ------------------- src/Umbraco.Web/Editors/MediaController.cs | 7 ++++- src/Umbraco.Web/Editors/MemberController.cs | 9 +++++++ .../Mapping/ContentItemDisplayNameResolver.cs | 25 ++++++++++++++++++ .../ContentItemDisplayVariationResolver.cs | 3 +++ .../Models/Mapping/ContentMapperProfile.cs | 1 + src/Umbraco.Web/Umbraco.Web.csproj | 1 + 8 files changed, 59 insertions(+), 29 deletions(-) create mode 100644 src/Umbraco.Web/Models/Mapping/ContentItemDisplayNameResolver.cs diff --git a/src/Umbraco.Web/Editors/ContentController.cs b/src/Umbraco.Web/Editors/ContentController.cs index dce9ca531d..6b1601fac2 100644 --- a/src/Umbraco.Web/Editors/ContentController.cs +++ b/src/Umbraco.Web/Editors/ContentController.cs @@ -943,14 +943,26 @@ namespace Umbraco.Web.Editors return content; } } - + /// /// Maps the dto property values to the persisted model /// /// private void MapPropertyValues(ContentItemSave contentItem) { - UpdateName(contentItem); + //Don't update the name if it is empty + if (contentItem.Name.IsNullOrWhiteSpace() == false) + { + //set the name according to the culture settings + if (contentItem.LanguageId.HasValue && contentItem.PersistedContent.ContentType.Variations.HasFlag(ContentVariation.CultureNeutral)) + { + contentItem.PersistedContent.SetName(contentItem.LanguageId, contentItem.Name); + } + else + { + contentItem.PersistedContent.Name = contentItem.Name; + } + } //TODO: We need to support 'send to publish' diff --git a/src/Umbraco.Web/Editors/ContentControllerBase.cs b/src/Umbraco.Web/Editors/ContentControllerBase.cs index 70baabecf5..fdfefa6133 100644 --- a/src/Umbraco.Web/Editors/ContentControllerBase.cs +++ b/src/Umbraco.Web/Editors/ContentControllerBase.cs @@ -36,32 +36,6 @@ namespace Umbraco.Web.Editors return errorResponse; } - protected void UpdateName(ContentBaseItemSave contentItem) - where TPersisted : IContentBase - { - //Don't update the name if it is empty - if (contentItem.Name.IsNullOrWhiteSpace() == false) - { - contentItem.PersistedContent.Name = contentItem.Name; - } - } - - protected HttpResponseMessage PerformSort(ContentSortOrder sorted) - { - if (sorted == null) - { - return Request.CreateResponse(HttpStatusCode.NotFound); - } - - //if there's nothing to sort just return ok - if (sorted.IdSortOrder.Length == 0) - { - return Request.CreateResponse(HttpStatusCode.OK); - } - - return null; - } - /// /// Maps the dto property values to the persisted model /// diff --git a/src/Umbraco.Web/Editors/MediaController.cs b/src/Umbraco.Web/Editors/MediaController.cs index 2c7a5f30c6..fb09cefd03 100644 --- a/src/Umbraco.Web/Editors/MediaController.cs +++ b/src/Umbraco.Web/Editors/MediaController.cs @@ -470,7 +470,12 @@ namespace Umbraco.Web.Editors // * we have a reference to the DTO object and the persisted object // * Permissions are valid - UpdateName(contentItem); + //Don't update the name if it is empty + if (contentItem.Name.IsNullOrWhiteSpace() == false) + { + contentItem.PersistedContent.Name = contentItem.Name; + } + MapPropertyValues( contentItem, (save, property) => property.GetValue(), //get prop val diff --git a/src/Umbraco.Web/Editors/MemberController.cs b/src/Umbraco.Web/Editors/MemberController.cs index bf60560574..bb99030804 100644 --- a/src/Umbraco.Web/Editors/MemberController.cs +++ b/src/Umbraco.Web/Editors/MemberController.cs @@ -591,6 +591,15 @@ namespace Umbraco.Web.Editors contentItem.PersistedContent.Username = providedUserName; } + private static void UpdateName(MemberSave memberSave) + { + //Don't update the name if it is empty + if (memberSave.Name.IsNullOrWhiteSpace() == false) + { + memberSave.PersistedContent.Name = memberSave.Name; + } + } + /// /// This is going to create the user with the membership provider and check for validation /// diff --git a/src/Umbraco.Web/Models/Mapping/ContentItemDisplayNameResolver.cs b/src/Umbraco.Web/Models/Mapping/ContentItemDisplayNameResolver.cs new file mode 100644 index 0000000000..125db912be --- /dev/null +++ b/src/Umbraco.Web/Models/Mapping/ContentItemDisplayNameResolver.cs @@ -0,0 +1,25 @@ +using AutoMapper; +using Umbraco.Core.Models; +using Umbraco.Web.Models.ContentEditing; +using ContentVariation = Umbraco.Core.Models.ContentVariation; + +namespace Umbraco.Web.Models.Mapping +{ + /// + /// Used to map the name from an depending on it's variation settings + /// + internal class ContentItemDisplayNameResolver : IValueResolver + { + public string Resolve(IContent source, ContentItemDisplay destination, string destMember, ResolutionContext context) + { + var langId = context.GetLanguageId(); + if (langId.HasValue && source.ContentType.Variations.HasFlag(ContentVariation.CultureNeutral)) + { + //return the culture name being requested + return source.GetName(langId); + } + + return source.Name; + } + } +} diff --git a/src/Umbraco.Web/Models/Mapping/ContentItemDisplayVariationResolver.cs b/src/Umbraco.Web/Models/Mapping/ContentItemDisplayVariationResolver.cs index 3d7890a152..41146d7a8e 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentItemDisplayVariationResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentItemDisplayVariationResolver.cs @@ -10,6 +10,9 @@ using Language = Umbraco.Web.Models.ContentEditing.Language; namespace Umbraco.Web.Models.Mapping { + /// + /// Used to map the variations collection from an instance + /// internal class ContentItemDisplayVariationResolver : IValueResolver> { private readonly ILocalizationService _localizationService; diff --git a/src/Umbraco.Web/Models/Mapping/ContentMapperProfile.cs b/src/Umbraco.Web/Models/Mapping/ContentMapperProfile.cs index 9aa6495492..627f508906 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentMapperProfile.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentMapperProfile.cs @@ -32,6 +32,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dest => dest.Udi, opt => opt.MapFrom(src => Udi.Create(src.Blueprint ? Constants.UdiEntityType.DocumentBlueprint : Constants.UdiEntityType.Document, src.Key))) .ForMember(dest => dest.Owner, opt => opt.ResolveUsing(src => contentOwnerResolver.Resolve(src))) .ForMember(dest => dest.Updater, opt => opt.ResolveUsing(src => creatorResolver.Resolve(src))) + .ForMember(dest => dest.Name, opt => opt.ResolveUsing()) .ForMember(dest => dest.Variants, opt => opt.ResolveUsing(variantResolver)) .ForMember(dest => dest.Icon, opt => opt.MapFrom(src => src.ContentType.Icon)) .ForMember(dest => dest.ContentTypeAlias, opt => opt.MapFrom(src => src.ContentType.Alias)) diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 7691f294db..56c04deca1 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -242,6 +242,7 @@ +