From 102d386d03c3980a8e6de164b86ce4cb074c1e1d Mon Sep 17 00:00:00 2001 From: Mohammad Dameer Date: Thu, 9 Nov 2017 22:08:10 +0200 Subject: [PATCH] Update last modified and by properties when replace media item (#7889) Fixes #7874 --- .../Core/Common/Handlers/CommonPartHandler.cs | 9 +++--- .../Controllers/ClientStorageController.cs | 28 +++++++++++++------ 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/Orchard.Web/Core/Common/Handlers/CommonPartHandler.cs b/src/Orchard.Web/Core/Common/Handlers/CommonPartHandler.cs index ff34b136e..9986a3330 100644 --- a/src/Orchard.Web/Core/Common/Handlers/CommonPartHandler.cs +++ b/src/Orchard.Web/Core/Common/Handlers/CommonPartHandler.cs @@ -1,11 +1,10 @@ -using System; using System.Linq; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.MetaData; using Orchard.Core.Common.Models; using Orchard.Data; using Orchard.Localization; -using Orchard.ContentManagement; -using Orchard.ContentManagement.Handlers; using Orchard.Security; using Orchard.Services; @@ -40,7 +39,7 @@ namespace Orchard.Core.Common.Handlers { OnLoading((context, part) => LazyLoadHandlers(part)); OnVersioning((context, part, newVersionPart) => LazyLoadHandlers(newVersionPart)); - OnUpdateEditorShape(AssignUpdateDates); + OnUpdating(AssignUpdatingDates); OnVersioning(AssignVersioningDates); OnPublishing(AssignPublishingDates); OnRemoving(AssignRemovingDates); @@ -100,7 +99,7 @@ namespace Orchard.Core.Common.Handlers { part.VersionModifiedBy = GetUserName(); } - private void AssignUpdateDates(UpdateEditorContext context, CommonPart part) { + private void AssignUpdatingDates(UpdateContentContext context, CommonPart part) { var utcNow = _clock.UtcNow; part.ModifiedUtc = utcNow; diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Controllers/ClientStorageController.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Controllers/ClientStorageController.cs index be3035e33..9dba77cf3 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Controllers/ClientStorageController.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Controllers/ClientStorageController.cs @@ -1,30 +1,34 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Web.Mvc; using Orchard.ContentManagement; +using Orchard.ContentManagement.Handlers; +using Orchard.FileSystems.Media; +using Orchard.Localization; +using Orchard.Logging; +using Orchard.MediaLibrary.Models; using Orchard.MediaLibrary.Services; using Orchard.MediaLibrary.ViewModels; using Orchard.Themes; using Orchard.UI.Admin; -using Orchard.MediaLibrary.Models; -using Orchard.Localization; -using System.Linq; -using Orchard.FileSystems.Media; -using Orchard.Logging; namespace Orchard.MediaLibrary.Controllers { [Admin, Themed(false)] public class ClientStorageController : Controller { private readonly IMediaLibraryService _mediaLibraryService; private readonly IMimeTypeProvider _mimeTypeProvider; + private readonly IEnumerable _handlers; public ClientStorageController( IMediaLibraryService mediaManagerService, IOrchardServices orchardServices, - IMimeTypeProvider mimeTypeProvider) { + IMimeTypeProvider mimeTypeProvider, + IEnumerable handlers) { _mediaLibraryService = mediaManagerService; _mimeTypeProvider = mimeTypeProvider; + _handlers = handlers; Services = orchardServices; T = NullLocalizer.Instance; Logger = NullLogger.Instance; @@ -175,13 +179,19 @@ namespace Orchard.MediaLibrary.Controllers { if (!replaceContentType.Equals(replaceMedia.TypeDefinition.Name, StringComparison.OrdinalIgnoreCase)) throw new Exception(T("Cannot replace {0} with {1}", replaceMedia.TypeDefinition.Name, replaceContentType).Text); + // Raise update and publish events which will update relevant Media properties + _handlers.Invoke(x => x.Updating(new UpdateContentContext(replaceMedia.ContentItem)), Logger); + _mediaLibraryService.DeleteFile(replaceMedia.FolderPath, replaceMedia.FileName); _mediaLibraryService.UploadMediaFile(replaceMedia.FolderPath, replaceMedia.FileName, file.InputStream); replaceMedia.MimeType = mimeType; - // Force a publish event which will update relevant Media properties - replaceMedia.ContentItem.VersionRecord.Published = false; - Services.ContentManager.Publish(replaceMedia.ContentItem); + _handlers.Invoke(x => x.Updated(new UpdateContentContext(replaceMedia.ContentItem)), Logger); + + var publishedVersion = replaceMedia.ContentItem.Record.Versions.SingleOrDefault(v => v.Published); + + _handlers.Invoke(x => x.Publishing(new PublishContentContext(replaceMedia.ContentItem, publishedVersion)), Logger); + _handlers.Invoke(x => x.Published(new PublishContentContext(replaceMedia.ContentItem, publishedVersion)), Logger); statuses.Add(new { id = replaceMedia.Id,