From 727f70a8fc152bea4e83b8a1c6d44e0336665cab Mon Sep 17 00:00:00 2001 From: Lombiq Date: Mon, 6 Feb 2017 21:46:55 +0100 Subject: [PATCH] Automatically adding MediaPart to content types if another part depends on it, fixes #4792 --- .../Handlers/MediaItemHandler.cs | 78 +++++++++++++++++++ .../Modules/Orchard.MediaLibrary/Module.txt | 2 +- .../Orchard.MediaLibrary.csproj | 5 ++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaItemHandler.cs diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaItemHandler.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaItemHandler.cs new file mode 100644 index 000000000..84c8e99ea --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaItemHandler.cs @@ -0,0 +1,78 @@ +using Orchard.ContentManagement.MetaData; +using Orchard.ContentManagement.MetaData.Models; +using Orchard.ContentTypes.Events; +using Orchard.MediaLibrary.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace Orchard.MediaLibrary.Handlers { + /// + /// Automatically adds MediaPart to the content type if a content part is attached that needs it. + /// + public class MediaItemHandler : IContentDefinitionEventHandler { + private readonly IContentDefinitionManager _contentDefinitionManager; + + public MediaItemHandler(IContentDefinitionManager contentDefinitionManager) { + _contentDefinitionManager = contentDefinitionManager; + } + + public void ContentFieldAttached(ContentFieldAttachedContext context) { + } + + public void ContentFieldDetached(ContentFieldDetachedContext context) { + } + + public void ContentPartAttached(ContentPartAttachedContext context) { + AlterMediaItem(_contentDefinitionManager.GetTypeDefinition(context.ContentTypeName)); + } + + public void ContentPartCreated(ContentPartCreatedContext context) { + } + + public void ContentPartDetached(ContentPartDetachedContext context) { + } + + public void ContentPartImported(ContentPartImportedContext context) { + } + + public void ContentPartImporting(ContentPartImportingContext context) { + } + + public void ContentPartRemoved(ContentPartRemovedContext context) { + } + + public void ContentTypeCreated(ContentTypeCreatedContext context) { + AlterMediaItem(context.ContentTypeDefinition); + } + + public void ContentTypeImported(ContentTypeImportedContext context) { + AlterMediaItem(context.ContentTypeDefinition); + } + + public void ContentTypeImporting(ContentTypeImportingContext context) { + } + + public void ContentTypeRemoved(ContentTypeRemovedContext context) { + } + + private void AlterMediaItem(ContentTypeDefinition contentTypeDefinition) { + var partNames = new string[]{ + typeof(ImagePart).Name, + typeof(VectorImagePart).Name, + typeof(VideoPart).Name, + typeof(AudioPart).Name, + typeof(DocumentPart).Name, + typeof(OEmbedPart).Name }; + if (contentTypeDefinition != null && + contentTypeDefinition.Parts.Any(contentTypePartDefinition => + partNames.Contains(contentTypePartDefinition.PartDefinition.Name))) { + _contentDefinitionManager.AlterTypeDefinition(contentTypeDefinition.Name, + cfg => cfg + .WithPart(typeof(MediaPart).Name) + .WithSetting("Stereotype", "Media")); + } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Module.txt b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Module.txt index fc93674f2..e90fc51cd 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Module.txt @@ -9,5 +9,5 @@ Features: Orchard.MediaLibrary: Name: Media Library Description: Provides enhanced Media management tools. - Dependencies: Title, Orchard.MediaProcessing, Orchard.Tokens, Orchard.Resources + Dependencies: Title, Orchard.ContentTypes, Orchard.MediaProcessing, Orchard.Tokens, Orchard.Resources Category: Media diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj index d07548bfa..8912dcfa0 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj @@ -127,6 +127,7 @@ + @@ -149,6 +150,10 @@ Orchard.Core false + + {0E7646E8-FE8F-43C1-8799-D97860925EC4} + Orchard.ContentTypes + {6f759635-13d7-4e94-bcc9-80445d63f117} Orchard.Tokens