mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-24 18:25:04 +08:00
Automatically adding MediaPart to content types if another part depends on it, fixes #4792
This commit is contained in:
@@ -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 {
|
||||||
|
/// <summary>
|
||||||
|
/// Automatically adds MediaPart to the content type if a content part is attached that needs it.
|
||||||
|
/// </summary>
|
||||||
|
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"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,5 +9,5 @@ Features:
|
|||||||
Orchard.MediaLibrary:
|
Orchard.MediaLibrary:
|
||||||
Name: Media Library
|
Name: Media Library
|
||||||
Description: Provides enhanced Media management tools.
|
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
|
Category: Media
|
||||||
|
|||||||
@@ -127,6 +127,7 @@
|
|||||||
<Compile Include="Drivers\VectorImagePartDriver.cs" />
|
<Compile Include="Drivers\VectorImagePartDriver.cs" />
|
||||||
<Compile Include="Extensions\MediaMetaDataExtensions.cs" />
|
<Compile Include="Extensions\MediaMetaDataExtensions.cs" />
|
||||||
<Compile Include="Factories\VectorImageFactory.cs" />
|
<Compile Include="Factories\VectorImageFactory.cs" />
|
||||||
|
<Compile Include="Handlers\MediaItemHandler.cs" />
|
||||||
<Compile Include="Handlers\MediaLibrarySettingsPartHandler.cs" />
|
<Compile Include="Handlers\MediaLibrarySettingsPartHandler.cs" />
|
||||||
<Compile Include="Implementation\DefaultMediaUsername.cs" />
|
<Compile Include="Implementation\DefaultMediaUsername.cs" />
|
||||||
<Compile Include="Models\MediaLibrarySettingsPart.cs" />
|
<Compile Include="Models\MediaLibrarySettingsPart.cs" />
|
||||||
@@ -149,6 +150,10 @@
|
|||||||
<Name>Orchard.Core</Name>
|
<Name>Orchard.Core</Name>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Orchard.ContentTypes\Orchard.ContentTypes.csproj">
|
||||||
|
<Project>{0E7646E8-FE8F-43C1-8799-D97860925EC4}</Project>
|
||||||
|
<Name>Orchard.ContentTypes</Name>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\Orchard.Tokens\Orchard.Tokens.csproj">
|
<ProjectReference Include="..\Orchard.Tokens\Orchard.Tokens.csproj">
|
||||||
<Project>{6f759635-13d7-4e94-bcc9-80445d63f117}</Project>
|
<Project>{6f759635-13d7-4e94-bcc9-80445d63f117}</Project>
|
||||||
<Name>Orchard.Tokens</Name>
|
<Name>Orchard.Tokens</Name>
|
||||||
|
|||||||
Reference in New Issue
Block a user