From ca2378489801d017e4409be6531042e3da6a38e5 Mon Sep 17 00:00:00 2001 From: Menno Mout <77411834+mennomout@users.noreply.github.com> Date: Wed, 25 Jan 2023 17:53:53 +0100 Subject: [PATCH] Added a CalculateMediaStartNodeIds method call when the startNode passed in as parameter is null. When this does return an array of startNodes the first one is being used. The question remains if this is desired behaviour. With this implementation the user has no real control over where the file is going to go. Atleast with this implementation the user can now see the file. --- .../Services/TemporaryMediaService.cs | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/Services/TemporaryMediaService.cs b/src/Umbraco.Core/Services/TemporaryMediaService.cs index 44aa555804..acd8e08fc9 100644 --- a/src/Umbraco.Core/Services/TemporaryMediaService.cs +++ b/src/Umbraco.Core/Services/TemporaryMediaService.cs @@ -1,8 +1,10 @@ -using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Umbraco.Cms.Core.Cache; using Umbraco.Cms.Core.Extensions; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Membership; using Umbraco.Cms.Core.PropertyEditors; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Strings; @@ -20,6 +22,8 @@ public class TemporaryMediaService : ITemporaryMediaService private readonly IHostEnvironment _hostingEnvironment; private readonly ILogger _logger; private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor; + private readonly IEntityService _entityService; + private readonly AppCaches _appCaches; public TemporaryMediaService( IShortStringHelper shortStringHelper, @@ -29,7 +33,9 @@ public class TemporaryMediaService : ITemporaryMediaService IContentTypeBaseServiceProvider contentTypeBaseServiceProvider, IHostEnvironment hostingEnvironment, ILogger logger, - IBackOfficeSecurityAccessor backOfficeSecurityAccessor) + IBackOfficeSecurityAccessor backOfficeSecurityAccessor, + IEntityService entityService, + AppCaches appCaches) { _shortStringHelper = shortStringHelper; _mediaFileManager = mediaFileManager; @@ -39,21 +45,26 @@ public class TemporaryMediaService : ITemporaryMediaService _hostingEnvironment = hostingEnvironment; _logger = logger; _backOfficeSecurityAccessor = backOfficeSecurityAccessor; + _entityService = entityService; + _appCaches = appCaches; } public IMedia Save(string temporaryLocation, Guid? startNode, string? mediaTypeAlias) { - var userId = _backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser?.Id ?? Constants.Security.SuperUserId; + IUser? user = _backOfficeSecurityAccessor?.BackOfficeSecurity?.CurrentUser; + int userId = user?.Id ?? Constants.Security.SuperUserId; var absoluteTempImagePath = _hostingEnvironment.MapPathContentRoot(temporaryLocation); var fileName = Path.GetFileName(absoluteTempImagePath); var safeFileName = fileName.ToSafeFileName(_shortStringHelper); - var mediaItemName = safeFileName.ToFriendlyName(); IMedia mediaFile; + if (startNode is null) { - mediaFile = _mediaService.CreateMedia(mediaItemName, Constants.System.Root, mediaTypeAlias ?? Constants.Conventions.MediaTypes.File, userId); + int[]? userStartNodes = user?.CalculateMediaStartNodeIds(_entityService, _appCaches); + + mediaFile = _mediaService.CreateMedia(mediaItemName, userStartNodes != null && userStartNodes.Any() ? userStartNodes[0] : Constants.System.Root, mediaTypeAlias ?? Constants.Conventions.MediaTypes.File, userId); } else {