-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
MediaLibraryPickerFieldHandler.cs
44 lines (36 loc) · 1.67 KB
/
MediaLibraryPickerFieldHandler.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.Linq;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
using Orchard.ContentManagement.MetaData;
using Orchard.MediaLibrary.Fields;
using Orchard.MediaLibrary.Models;
namespace Orchard.MediaLibrary.Handlers {
public class MediaLibraryPickerFieldHandler : ContentHandler {
private readonly IContentManager _contentManager;
private readonly IContentDefinitionManager _contentDefinitionManager;
public MediaLibraryPickerFieldHandler(
IContentManager contentManager,
IContentDefinitionManager contentDefinitionManager) {
_contentManager = contentManager;
_contentDefinitionManager = contentDefinitionManager;
}
protected override void Loaded(LoadContentContext context) {
base.Loaded(context);
InitilizeLoader(context.ContentItem);
}
private void InitilizeLoader(ContentItem contentItem) {
var fields = contentItem.Parts.SelectMany(x => x.Fields.OfType<MediaLibraryPickerField>());
// define lazy initializer for MediaLibraryPickerField.MediaParts
var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(contentItem.ContentType);
if (contentTypeDefinition == null) {
return;
}
foreach (var field in fields) {
var localField = field;
localField._contentItems = new Lazy<IEnumerable<MediaPart>>(() => _contentManager.GetMany<MediaPart>(localField.Ids, VersionOptions.Published, QueryHints.Empty).ToList());
}
}
}
}