From 2fc774e93b8dff603709e1141dabf66d055a759b Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Tue, 20 Aug 2013 16:54:55 -0700 Subject: [PATCH] #19956: Adding a token for MediaLibraryFieldPicker Work Item: 19956 --- .../Fields/MediaLibraryPickerField.cs | 3 +- .../MediaLibraryPickerFieldHandler.cs | 19 +++++---- .../Modules/Orchard.MediaLibrary/Module.txt | 2 +- .../Orchard.MediaLibrary.csproj | 5 +++ .../Tokens/FieldTokens.cs | 42 +++++++++++++++++++ 5 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.MediaLibrary/Tokens/FieldTokens.cs diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Fields/MediaLibraryPickerField.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Fields/MediaLibraryPickerField.cs index 56c0ba972..59a422488 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Fields/MediaLibraryPickerField.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Fields/MediaLibraryPickerField.cs @@ -3,13 +3,12 @@ using System.Collections.Generic; using System.Linq; using Orchard.ContentManagement; using Orchard.ContentManagement.FieldStorage; -using Orchard.ContentManagement.Utilities; using Orchard.MediaLibrary.Models; namespace Orchard.MediaLibrary.Fields { public class MediaLibraryPickerField : ContentField { private static readonly char[] separator = new [] {'{', '}', ','}; - internal LazyField> _contentItems = new LazyField>(); + internal Lazy> _contentItems; public int[] Ids { get { return DecodeIds(Storage.Get()); } diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs index 88986bcb3..d065e2d1b 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs @@ -1,4 +1,6 @@ -using System.Linq; +using System; +using System.Collections.Generic; +using System.Linq; using Orchard.ContentManagement; using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.MetaData; @@ -18,20 +20,23 @@ namespace Orchard.MediaLibrary.Handlers { _contentDefinitionManager = contentDefinitionManager; } - protected override void Loading(LoadContentContext context) { + protected override void Loaded(LoadContentContext context) { base.Loading(context); + InitilizeLoader(context.ContentItem); + } - var fields = context.ContentItem.Parts.SelectMany(x => x.Fields.Where(f => f.FieldDefinition.Name == typeof(MediaLibraryPickerField).Name)).Cast(); - - // define lazy initializer for ContentPickerField.ContentItems - var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(context.ContentType); + private void InitilizeLoader(ContentItem contentItem) { + var fields = contentItem.Parts.SelectMany(x => x.Fields.OfType()); + + // define lazy initializer for MediaLibraryPickerField.MediaParts + var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(contentItem.ContentType); if (contentTypeDefinition == null) { return; } foreach (var field in fields) { var localField = field; - field._contentItems.Loader(x => _contentManager.GetMany(localField.Ids, VersionOptions.Published, QueryHints.Empty)); + localField._contentItems = new Lazy>(() => _contentManager.GetMany(localField.Ids, VersionOptions.Published, QueryHints.Empty).ToList()); } } } diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Module.txt b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Module.txt index c8347f2fc..edda9754a 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 + Dependencies: Title, Orchard.MediaProcessing, Orchard.Tokens Category: Media \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj index 327094d44..d3f8798c5 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj @@ -109,6 +109,10 @@ {9916839C-39FC-4CEB-A5AF-89CA7E87119F} Orchard.Core + + {6f759635-13d7-4e94-bcc9-80445d63f117} + Orchard.Tokens + @@ -159,6 +163,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Tokens/FieldTokens.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Tokens/FieldTokens.cs new file mode 100644 index 000000000..28c37c768 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Tokens/FieldTokens.cs @@ -0,0 +1,42 @@ +using System.Linq; +using Orchard.ContentManagement; +using Orchard.Localization; +using Orchard.MediaLibrary.Fields; +using Orchard.MediaLibrary.Models; +using Orchard.Tokens; + +namespace Orchard.MediaLibrary.Tokens { + + public class FieldTokens : ITokenProvider { + private readonly IContentManager _contentManager; + + + public FieldTokens(IContentManager contentManager) { + _contentManager = contentManager; + T = NullLocalizer.Instance; + } + + public Localizer T { get; set; } + + public void Describe(DescribeContext context) { + context.For("MediaLibraryPickerField", T("First media for Media Library Picker Field"), T("Tokens for Media Picker Fields")) + .Token("Url", T("Url"), T("The url of the media."), "Url") + ; + } + + public void Evaluate(EvaluateContext context) { + context.For("MediaLibraryPickerField") + .Token("Url", field => { + var mediaId = field.Ids.FirstOrDefault(); + var media = _contentManager.Get(mediaId); + return media == null ? "" : media.MediaUrl; + }) + .Chain("Url", "Url", field => { + var mediaId = field.Ids.FirstOrDefault(); + var media = _contentManager.Get(mediaId); + return media == null ? "" : media.MediaUrl; + }) + ; + } + } +} \ No newline at end of file