From 551725220041fa93fdc8b6c2b0787441ab68ebad Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 28 Sep 2017 15:21:04 +0200 Subject: [PATCH] Moved documentType and mediaLink to root node for media section Created Map in MediaModelMapper to cater for the new property (DocumentType) Wired front-end to match the new properties --- .../media/umbmedianodeinfo.directive.js | 40 +-------- .../components/media/umb-media-node-info.html | 2 +- .../Models/ContentEditing/MediaItemDisplay.cs | 6 +- .../Models/Mapping/MediaModelMapper.cs | 85 ++++++++++--------- 4 files changed, 52 insertions(+), 81 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/media/umbmedianodeinfo.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/media/umbmedianodeinfo.directive.js index dd84d8e7e2..6e3d085fa7 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/media/umbmedianodeinfo.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/media/umbmedianodeinfo.directive.js @@ -10,53 +10,19 @@ scope.allowOpenMediaType = true; // get document type details - scope.mediaType = getMediaType(scope.node); + scope.mediaType = scope.node.documentType.value; // get node url - scope.nodeUrl = getNodeUrl(scope.node); + scope.nodeUrl = scope.node.mediaLink; } scope.openMediaType = function (mediaType) { // remove first "#" from url if it is prefixed else the path won't work - var url = mediaType.url.replace(/^#/, ""); + var url = "/settings/mediaTypes/edit/" + mediaType.id; $location.path(url); }; - function getMediaType(node) { - - var mediaType = {}; - - // find the document type in the properties array - angular.forEach(node.properties, function (property) { - if (property.alias === "_umb_doctype") { - if (property.value && property.value.length > 0) { - mediaType = property.value[0]; - } - } - }); - - return mediaType; - - } - - function getNodeUrl(node) { - - var nodeUrl = ""; - - // find the document type in the properties array - angular.forEach(node.properties, function (property) { - if (property.alias === "_umb_urls") { - if (property.value) { - nodeUrl = property.value; - } - } - }); - - return nodeUrl; - - } - onInit(); } diff --git a/src/Umbraco.Web.UI.Client/src/views/components/media/umb-media-node-info.html b/src/Umbraco.Web.UI.Client/src/views/components/media/umb-media-node-info.html index ce4ab5ccc6..4b33e72d11 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/media/umb-media-node-info.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/media/umb-media-node-info.html @@ -41,7 +41,7 @@ diff --git a/src/Umbraco.Web/Models/ContentEditing/MediaItemDisplay.cs b/src/Umbraco.Web/Models/ContentEditing/MediaItemDisplay.cs index 5505ff7904..9941d48d48 100644 --- a/src/Umbraco.Web/Models/ContentEditing/MediaItemDisplay.cs +++ b/src/Umbraco.Web/Models/ContentEditing/MediaItemDisplay.cs @@ -10,6 +10,10 @@ namespace Umbraco.Web.Models.ContentEditing [DataContract(Name = "content", Namespace = "")] public class MediaItemDisplay : ListViewAwareContentItemDisplayBase { - + [DataMember(Name = "documentType")] + public ContentPropertyDisplay DocumentType { get; set; } + + [DataMember(Name = "mediaLink")] + public string MediaLink { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs index 384ef332e2..9e4cda0c70 100644 --- a/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs @@ -42,6 +42,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(display => display.IsContainer, expression => expression.Ignore()) .ForMember(display => display.HasPublishedVersion, expression => expression.Ignore()) .ForMember(display => display.Tabs, expression => expression.ResolveUsing(new TabsAndPropertiesResolver(applicationContext.Services.TextService))) + .ForMember(display => display.DocumentType, expression => expression.ResolveUsing()) .AfterMap((media, display) => AfterMap(media, display, applicationContext.Services.DataTypeService, applicationContext.Services.TextService, applicationContext.Services.ContentTypeService, applicationContext.ProfilingLogger.Logger)); //FROM IMedia TO ContentItemBasic @@ -65,6 +66,20 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dto => dto.Icon, expression => expression.Ignore()) .ForMember(dto => dto.Alias, expression => expression.Ignore()) .ForMember(dto => dto.HasPublishedVersion, expression => expression.Ignore()); + + //FROM ContentTypeBasic TO ContentPropertyDisplay + config.CreateMap() + .ForMember(display => display.Value, expresion => expresion.MapFrom(content => content)) + .ForMember(display =>display.Description, expression =>expression.Ignore()) + .ForMember(display => display.Config, expression => expression.Ignore()) + .ForMember(display => display.HideLabel, expression => expression.Ignore()) + .ForMember(display => display.Label, expression => expression.Ignore()) + .ForMember(display => display.Validation, expression => expression.Ignore()) + .ForMember(display => display.View, expression => expression.Ignore()) + .ForMember(display => display.Alias, expression => expression.Ignore()) + .ForMember(display => display.Editor, expression => expression.Ignore()) + .ForMember(display => display.Id, expression => expression.Ignore()) + .ForMember(display => display.PropertyEditor, expression => expression.Ignore()); } private static void AfterMap(IMedia media, MediaItemDisplay display, IDataTypeService dataTypeService, ILocalizedTextService localizedText, IContentTypeService contentTypeService, ILogger logger) @@ -86,54 +101,40 @@ namespace Umbraco.Web.Models.Mapping { TabsAndPropertiesResolver.AddListView(display, "media", dataTypeService, localizedText); } - - var genericProperties = new List + + var links = media.GetUrls(UmbracoConfig.For.UmbracoSettings().Content, logger); + if (links.Any()) { - new ContentPropertyDisplay - { - Alias = string.Format("{0}doctype", Constants.PropertyEditors.InternalGenericPropertiesPrefix), - Label = localizedText.Localize("content/mediatype"), - Value = localizedText.UmbracoDictionaryTranslate(display.ContentTypeName), - View = PropertyEditorResolver.Current.GetByAlias(Constants.PropertyEditors.NoEditAlias).ValueEditor.View - } - }; + // Media link to root node + display.MediaLink = string.Join(",", links); + } - TabsAndPropertiesResolver.MapGenericProperties(media, display, localizedText, genericProperties, properties => + TabsAndPropertiesResolver.MapGenericProperties(media, display, localizedText); + } + + /// + /// Resolves a from the item and checks if the current user + /// has access to see this data + /// + private class ContentTypeBasicResolver : ValueResolver + { + protected override ContentTypeBasic ResolveCore(IMedia source) { - if (HttpContext.Current != null && UmbracoContext.Current != null && UmbracoContext.Current.Security.CurrentUser != null - && UmbracoContext.Current.Security.CurrentUser.AllowedSections.Any(x => x.Equals(Constants.Applications.Settings))) + //TODO: This would be much nicer with the IUmbracoContextAccessor so we don't use singletons + //If this is a web request and there's a user signed in and the + // user has access to the settings section, we will + if (HttpContext.Current != null && UmbracoContext.Current != null && + UmbracoContext.Current.Security.CurrentUser != null + && UmbracoContext.Current.Security.CurrentUser.AllowedSections.Any(x => x.Equals(Constants + .Applications.Settings))) { - var mediaTypeLink = string.Format("#/settings/mediatypes/edit/{0}", media.ContentTypeId); - - //Replace the doctype property - var docTypeProperty = properties.First(x => x.Alias == string.Format("{0}doctype", Constants.PropertyEditors.InternalGenericPropertiesPrefix)); - docTypeProperty.Value = new List - { - new - { - linkText = media.ContentType.Name, - url = mediaTypeLink, - target = "_self", - icon = "icon-item-arrangement" - } - }; - docTypeProperty.View = "urllist"; + var contentTypeBasic = Mapper.Map(source.ContentType); + return contentTypeBasic; } + //no access + return null; + } - // inject 'Link to media' as the first generic property - var links = media.GetUrls(UmbracoConfig.For.UmbracoSettings().Content, logger); - if (links.Any()) - { - var link = new ContentPropertyDisplay - { - Alias = string.Format("{0}urls", Constants.PropertyEditors.InternalGenericPropertiesPrefix), - Label = localizedText.Localize("media/urls"), - Value = string.Join(",", links), - View = "urllist" - }; - properties.Insert(0, link); - } - }); } } }