Created
August 2, 2023 09:14
-
-
Save AaronSadlerUK/fef427aae2503b6cbcc0b90ecd823324 to your computer and use it in GitHub Desktop.
IntFriendlyMediaPickerValueConverter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Umbraco.Cms.Core.Models.PublishedContent; | |
using Umbraco.Cms.Core; | |
using Umbraco.Cms.Core.PropertyEditors.ValueConverters; | |
using Umbraco.Cms.Core.PublishedCache; | |
using Umbraco.Cms.Core.Composing; | |
using Umbraco.Cms.Core.DependencyInjection; | |
using Umbraco.Cms.Core.Services; | |
public class IntFriendlyMediaPickerValueConverter : MediaPickerValueConverter | |
{ | |
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor; | |
private readonly IMediaService _mediaService; | |
public IntFriendlyMediaPickerValueConverter(IPublishedSnapshotAccessor publishedSnapshotAccessor, IPublishedModelFactory publishedModelFactory, IMediaService mediaService) | |
: base(publishedSnapshotAccessor, publishedModelFactory) | |
{ | |
_publishedSnapshotAccessor = publishedSnapshotAccessor; | |
_mediaService = mediaService; | |
} | |
public override object? ConvertSourceToIntermediate(IPublishedElement owner, IPublishedPropertyType propertyType, object? source, bool preview) | |
{ | |
if (source == null) | |
{ | |
return null; | |
} | |
var udiList = new List<Udi>(); | |
var ids = source.ToString()?.Split(Constants.CharArrays.Comma, StringSplitOptions.RemoveEmptyEntries); | |
if (ids != null) | |
{ | |
foreach (var id in ids) | |
{ | |
if (int.TryParse(id, out var integerId)) | |
{ | |
var hasPublishedSnapshot = | |
_publishedSnapshotAccessor.TryGetPublishedSnapshot(out var publishedSnapshot); | |
if (hasPublishedSnapshot) | |
{ | |
var item = publishedSnapshot.Media.GetById(integerId); | |
if (item != null) | |
{ | |
udiList.Add(new GuidUdi(Constants.UdiEntityType.Media, item.Key)); | |
} | |
else | |
{ | |
var contentItem = _mediaService.GetById(integerId); | |
if (contentItem != null) | |
{ | |
udiList.Add(new GuidUdi(Constants.UdiEntityType.Media, contentItem.Key)); | |
} | |
} | |
} | |
} | |
else | |
{ | |
return base.ConvertSourceToIntermediate(owner, propertyType, source, preview); | |
} | |
} | |
} | |
return udiList.ToArray(); | |
} | |
public class MyComposer : IComposer | |
{ | |
public void Compose(IUmbracoBuilder builder) | |
{ | |
builder.PropertyValueConverters().InsertBefore(typeof(MediaPickerValueConverter), | |
typeof(IntFriendlyMediaPickerValueConverter)); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment