Update last modified and by properties when replace media item (#7889)

Fixes #7874
This commit is contained in:
Mohammad Dameer
2017-11-09 22:08:10 +02:00
committed by Sébastien Ros
parent f146b81f47
commit 102d386d03
2 changed files with 23 additions and 14 deletions

View File

@@ -1,11 +1,10 @@
using System;
using System.Linq; using System.Linq;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData;
using Orchard.Core.Common.Models; using Orchard.Core.Common.Models;
using Orchard.Data; using Orchard.Data;
using Orchard.Localization; using Orchard.Localization;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
using Orchard.Security; using Orchard.Security;
using Orchard.Services; using Orchard.Services;
@@ -40,7 +39,7 @@ namespace Orchard.Core.Common.Handlers {
OnLoading<CommonPart>((context, part) => LazyLoadHandlers(part)); OnLoading<CommonPart>((context, part) => LazyLoadHandlers(part));
OnVersioning<CommonPart>((context, part, newVersionPart) => LazyLoadHandlers(newVersionPart)); OnVersioning<CommonPart>((context, part, newVersionPart) => LazyLoadHandlers(newVersionPart));
OnUpdateEditorShape<CommonPart>(AssignUpdateDates); OnUpdating<CommonPart>(AssignUpdatingDates);
OnVersioning<CommonPart>(AssignVersioningDates); OnVersioning<CommonPart>(AssignVersioningDates);
OnPublishing<CommonPart>(AssignPublishingDates); OnPublishing<CommonPart>(AssignPublishingDates);
OnRemoving<CommonPart>(AssignRemovingDates); OnRemoving<CommonPart>(AssignRemovingDates);
@@ -100,7 +99,7 @@ namespace Orchard.Core.Common.Handlers {
part.VersionModifiedBy = GetUserName(); part.VersionModifiedBy = GetUserName();
} }
private void AssignUpdateDates(UpdateEditorContext context, CommonPart part) { private void AssignUpdatingDates(UpdateContentContext context, CommonPart part) {
var utcNow = _clock.UtcNow; var utcNow = _clock.UtcNow;
part.ModifiedUtc = utcNow; part.ModifiedUtc = utcNow;

View File

@@ -1,30 +1,34 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Web.Mvc; using System.Web.Mvc;
using Orchard.ContentManagement; 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.Services;
using Orchard.MediaLibrary.ViewModels; using Orchard.MediaLibrary.ViewModels;
using Orchard.Themes; using Orchard.Themes;
using Orchard.UI.Admin; 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 { namespace Orchard.MediaLibrary.Controllers {
[Admin, Themed(false)] [Admin, Themed(false)]
public class ClientStorageController : Controller { public class ClientStorageController : Controller {
private readonly IMediaLibraryService _mediaLibraryService; private readonly IMediaLibraryService _mediaLibraryService;
private readonly IMimeTypeProvider _mimeTypeProvider; private readonly IMimeTypeProvider _mimeTypeProvider;
private readonly IEnumerable<IContentHandler> _handlers;
public ClientStorageController( public ClientStorageController(
IMediaLibraryService mediaManagerService, IMediaLibraryService mediaManagerService,
IOrchardServices orchardServices, IOrchardServices orchardServices,
IMimeTypeProvider mimeTypeProvider) { IMimeTypeProvider mimeTypeProvider,
IEnumerable<IContentHandler> handlers) {
_mediaLibraryService = mediaManagerService; _mediaLibraryService = mediaManagerService;
_mimeTypeProvider = mimeTypeProvider; _mimeTypeProvider = mimeTypeProvider;
_handlers = handlers;
Services = orchardServices; Services = orchardServices;
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
Logger = NullLogger.Instance; Logger = NullLogger.Instance;
@@ -175,13 +179,19 @@ namespace Orchard.MediaLibrary.Controllers {
if (!replaceContentType.Equals(replaceMedia.TypeDefinition.Name, StringComparison.OrdinalIgnoreCase)) if (!replaceContentType.Equals(replaceMedia.TypeDefinition.Name, StringComparison.OrdinalIgnoreCase))
throw new Exception(T("Cannot replace {0} with {1}", replaceMedia.TypeDefinition.Name, replaceContentType).Text); 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.DeleteFile(replaceMedia.FolderPath, replaceMedia.FileName);
_mediaLibraryService.UploadMediaFile(replaceMedia.FolderPath, replaceMedia.FileName, file.InputStream); _mediaLibraryService.UploadMediaFile(replaceMedia.FolderPath, replaceMedia.FileName, file.InputStream);
replaceMedia.MimeType = mimeType; replaceMedia.MimeType = mimeType;
// Force a publish event which will update relevant Media properties _handlers.Invoke(x => x.Updated(new UpdateContentContext(replaceMedia.ContentItem)), Logger);
replaceMedia.ContentItem.VersionRecord.Published = false;
Services.ContentManager.Publish(replaceMedia.ContentItem); 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 { statuses.Add(new {
id = replaceMedia.Id, id = replaceMedia.Id,