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