using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using System.Web.Mvc; using System.Web.Routing; using AutoMapper; using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Core.Models.Mapping; using Umbraco.Core.PropertyEditors; using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Trees; namespace Umbraco.Web.Models.Mapping { /// /// Declares model mappings for media. /// internal class MediaModelMapper : MapperConfiguration { public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) { //FROM IMedia TO MediaItemDisplay config.CreateMap() .ForMember( dto => dto.Owner, expression => expression.ResolveUsing>()) .ForMember( dto => dto.Icon, expression => expression.MapFrom(content => content.ContentType.Icon)) .ForMember( dto => dto.ContentTypeAlias, expression => expression.MapFrom(content => content.ContentType.Alias)) .ForMember( dto => dto.IsChildOfListView, expression => expression.MapFrom(content => content.Parent().ContentType.IsContainer)) .ForMember( dto => dto.ContentTypeName, expression => expression.MapFrom(content => content.ContentType.Name)) .ForMember(display => display.Properties, expression => expression.Ignore()) .ForMember(display => display.TreeNodeUrl, expression => expression.Ignore()) .ForMember(display => display.Notifications, expression => expression.Ignore()) .ForMember(display => display.Errors, expression => expression.Ignore()) .ForMember(display => display.Published, expression => expression.Ignore()) .ForMember(display => display.Updater, expression => expression.Ignore()) .ForMember(display => display.Alias, expression => expression.Ignore()) .ForMember(display => display.Tabs, expression => expression.ResolveUsing()) .AfterMap(AfterMap); //FROM IMedia TO ContentItemBasic config.CreateMap>() .ForMember( dto => dto.Owner, expression => expression.ResolveUsing>()) .ForMember( dto => dto.Icon, expression => expression.MapFrom(content => content.ContentType.Icon)) .ForMember( dto => dto.ContentTypeAlias, expression => expression.MapFrom(content => content.ContentType.Alias)) .ForMember(x => x.Published, expression => expression.Ignore()) .ForMember(x => x.Updater, expression => expression.Ignore()) .ForMember(x => x.Alias, expression => expression.Ignore()); //FROM IMedia TO ContentItemDto config.CreateMap>() .ForMember( dto => dto.Owner, expression => expression.ResolveUsing>()) .ForMember(x => x.Published, expression => expression.Ignore()) .ForMember(x => x.Updater, expression => expression.Ignore()) .ForMember(x => x.Icon, expression => expression.Ignore()) .ForMember(x => x.Alias, expression => expression.Ignore()); } private static void AfterMap(IMedia media, MediaItemDisplay display) { //map the tree node url if (HttpContext.Current != null) { var urlHelper = new UrlHelper(new RequestContext(new HttpContextWrapper(HttpContext.Current), new RouteData())); var url = urlHelper.GetUmbracoApiService(controller => controller.GetTreeNode(display.Id.ToString(), null)); display.TreeNodeUrl = url; } if (media.ContentType.IsContainer) { TabsAndPropertiesResolver.AddContainerView(display, "media"); } TabsAndPropertiesResolver.MapGenericProperties(media, display); } } }