Files
Umbraco-CMS/src/Umbraco.Web/Models/Mapping/CommonMapper.cs

106 lines
4.4 KiB
C#
Raw Normal View History

2019-03-26 18:47:35 +01:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Umbraco.Core;
using Umbraco.Core.Mapping;
using Umbraco.Core.Models;
using Umbraco.Core.Models.ContentEditing;
using Umbraco.Core.Models.Identity;
2019-03-26 18:47:35 +01:00
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Services;
using Umbraco.Web.ContentApps;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Trees;
using UserProfile = Umbraco.Web.Models.ContentEditing.UserProfile;
namespace Umbraco.Web.Models.Mapping
{
internal class CommonMapper
{
private readonly IUserService _userService;
private readonly IContentTypeBaseServiceProvider _contentTypeBaseServiceProvider;
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
private readonly ContentAppFactoryCollection _contentAppDefinitions;
private readonly ILocalizedTextService _localizedTextService;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ICurrentUserAccessor _currentUserAccessor;
2019-03-26 18:47:35 +01:00
public CommonMapper(IUserService userService, IContentTypeBaseServiceProvider contentTypeBaseServiceProvider, IUmbracoContextAccessor umbracoContextAccessor,
ContentAppFactoryCollection contentAppDefinitions, ILocalizedTextService localizedTextService, IHttpContextAccessor httpContextAccessor, ICurrentUserAccessor currentUserAccessor)
2019-03-26 18:47:35 +01:00
{
_userService = userService;
_contentTypeBaseServiceProvider = contentTypeBaseServiceProvider;
_umbracoContextAccessor = umbracoContextAccessor;
_contentAppDefinitions = contentAppDefinitions;
_localizedTextService = localizedTextService;
_httpContextAccessor = httpContextAccessor;
_currentUserAccessor = currentUserAccessor;
2019-03-26 18:47:35 +01:00
}
2019-04-07 11:26:47 +02:00
public UserProfile GetOwner(IContentBase source, MapperContext context)
2019-03-26 18:47:35 +01:00
{
var profile = source.GetCreatorProfile(_userService);
2019-04-07 11:26:47 +02:00
return profile == null ? null : context.Map<IProfile, UserProfile>(profile);
2019-03-26 18:47:35 +01:00
}
2019-04-07 11:26:47 +02:00
public UserProfile GetCreator(IContent source, MapperContext context)
2019-03-26 18:47:35 +01:00
{
var profile = source.GetWriterProfile(_userService);
2019-04-07 11:26:47 +02:00
return profile == null ? null : context.Map<IProfile, UserProfile>(profile);
2019-03-26 18:47:35 +01:00
}
2019-04-07 11:26:47 +02:00
public ContentTypeBasic GetContentType(IContentBase source, MapperContext context)
2019-03-26 18:47:35 +01:00
{
var user = _currentUserAccessor.TryGetCurrentUser();
if (user?.AllowedSections.Any(x => x.Equals(Constants.Applications.Settings)) ?? false)
2019-03-26 18:47:35 +01:00
{
var contentType = _contentTypeBaseServiceProvider.GetContentTypeOf(source);
2019-04-07 11:26:47 +02:00
var contentTypeBasic = context.Map<IContentTypeComposition, ContentTypeBasic>(contentType);
2019-03-26 18:47:35 +01:00
return contentTypeBasic;
}
//no access
return null;
}
public string GetTreeNodeUrl<TController>(IContentBase source)
where TController : ContentTreeControllerBase
{
var httpContext = _httpContextAccessor.HttpContext;
if (httpContext == null) return null;
2019-03-26 18:47:35 +01:00
var urlHelper = new UrlHelper(httpContext.Request.RequestContext);
2019-03-26 18:47:35 +01:00
return urlHelper.GetUmbracoApiService<TController>(controller => controller.GetTreeNode(source.Key.ToString("N"), null));
}
public string GetMemberTreeNodeUrl(IContentBase source)
{
var httpContext = _httpContextAccessor.HttpContext;
if (httpContext == null) return null;
2019-03-26 18:47:35 +01:00
var urlHelper = new UrlHelper(httpContext.Request.RequestContext);
2019-03-26 18:47:35 +01:00
return urlHelper.GetUmbracoApiService<MemberTreeController>(controller => controller.GetTreeNode(source.Key.ToString("N"), null));
}
public IEnumerable<ContentApp> GetContentApps(IContentBase source)
{
var apps = _contentAppDefinitions.GetContentAppsFor(source).ToArray();
// localize content app names
foreach (var app in apps)
{
var localizedAppName = _localizedTextService.Localize($"apps/{app.Alias}");
if (localizedAppName.Equals($"[{app.Alias}]", StringComparison.OrdinalIgnoreCase) == false)
{
app.Name = localizedAppName;
}
}
return apps;
}
}
2019-04-07 11:26:47 +02:00
}