Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Services;

namespace uSync.Core.DataTypes.DataTypeSerializers;

internal class ContentPickerConfigSerializer : PickerConfigurationSerializerBase<IContentType>, IConfigurationSerializer
{
private readonly IContentTypeService _contentTypeService;
public ContentPickerConfigSerializer(IContentTypeService contentTypeService)
{
_contentTypeService = contentTypeService;
}
public string Name => nameof(ContentPickerConfigSerializer);
public string[] Editors => [Constants.PropertyEditors.Aliases.ContentPicker];

protected override IContentType? GetByAlias(string alias)
=> _contentTypeService.Get(alias);
}
Comment thread
KevinJump marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -1,22 +1,32 @@
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Services;
using Umbraco.Extensions;
using uSync.Core.Extensions;

namespace uSync.Core.DataTypes.DataTypeSerializers;
internal class MediaPickerConfigSerializer : ConfigurationSerializerBase, IConfigurationSerializer
internal class MediaPickerConfigSerializer : PickerConfigurationSerializerBase<IMediaType>, IConfigurationSerializer
{
private readonly IMediaTypeService _mediaTypeService;

public MediaPickerConfigSerializer(IMediaTypeService mediaTypeService)
{
_mediaTypeService = mediaTypeService;
}

public string Name => nameof(MediaPickerConfigSerializer);

public string[] Editors => [
"Umbraco.MediaPicker",
"Umbraco.MediaPicker2"];
"Umbraco.MediaPicker2",
"Umbraco.MediaPicker3"];

/// <summary>
/// we migrate this one, from "Umbraco.MediaPicker" to "Umbraco.MediaPicker3"
/// </summary>
public string? GetEditorAlias()
=> Constants.PropertyEditors.Aliases.MediaPicker3;

public override IDictionary<string, object> GetConfigurationImport(IDictionary<string, object> configuration)
{
return base.GetConfigurationImport(configuration);
}
protected override IMediaType? GetByAlias(string alias)
=> _mediaTypeService.Get(alias);
}
Comment thread
KevinJump marked this conversation as resolved.
69 changes: 69 additions & 0 deletions uSync.Core/DataTypes/PickerConfigurationSerializerBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Models;
using Umbraco.Extensions;

namespace uSync.Core.DataTypes;

internal abstract class PickerConfigurationSerializerBase<TContentType> : ConfigurationSerializerBase
where TContentType : IContentTypeBase
{
public override IDictionary<string, object> GetConfigurationImport(IDictionary<string, object> configuration)
{
if (configuration.TryGetValue("filter", out var filterValue) is true)
configuration["filter"] = ConvertAliasesToGuidValues(filterValue) ?? filterValue;

if (configuration.TryGetValue("startNodeId", out var startNodeValue) is true)
configuration["startNodeId"] = ConvertUdiToGuid(startNodeValue) ?? startNodeValue;


Comment thread
KevinJump marked this conversation as resolved.
Outdated
return base.GetConfigurationImport(configuration);
}

protected abstract TContentType? GetByAlias(string alias);
protected string? ConvertAliasesToGuidValues(object? filterValue)
{
var item = filterValue?.ToString();
if (string.IsNullOrWhiteSpace(item)) return item;
Comment thread
KevinJump marked this conversation as resolved.
Outdated

List<string> result = [];

foreach (var value in item.ToDelimitedList())
{
// if this item is already a guid, we return it.
if (Guid.TryParse(value, out _) is true)
{
result.Add(value);
continue;
}

// Lookup the media type by alias - return the guid.
Comment thread
KevinJump marked this conversation as resolved.
Outdated
var mediaType = GetByAlias(value);
if (mediaType != null)
{
result.Add(mediaType.Key.ToString());
continue;
}

result.Add(value);
}

return string.Join(',', result);
}


/// <summary>
/// converts a string from UDI to Guid (if they are set)
/// </summary>
protected static string? ConvertUdiToGuid(object? idValue)
{
var id = idValue?.ToString();

if (string.IsNullOrWhiteSpace(id)) return id;
if (Guid.TryParse(id, out _) is true) return id;

if (UdiParser.TryParse(id, out GuidUdi? guidUdi) is false || guidUdi is null)
return id;

return guidUdi.Guid.ToString();
}
}
8 changes: 5 additions & 3 deletions uSync.Core/Mapping/Mappers/MediaPicker3Mapper.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Microsoft.Extensions.Logging;

using System.Text.Json.Nodes;

using Umbraco.Cms.Core;
Expand All @@ -16,17 +15,20 @@ namespace uSync.Core.Mapping.Mappers;
public class MediaPicker3Mapper : SyncValueMapperBase, ISyncMapper
{
private readonly ILogger<MediaPicker3Mapper> _logger;
private readonly IMediaTypeService _mediaTypeService;

public MediaPicker3Mapper(
IEntityService entityService,
ILogger<MediaPicker3Mapper> logger) : base(entityService)
ILogger<MediaPicker3Mapper> logger,
IMediaTypeService mediaTypeService) : base(entityService)
{
_logger = logger;
_mediaTypeService = mediaTypeService;
Comment thread
KevinJump marked this conversation as resolved.
Outdated
}

public override string Name => "MediaPicker3 Mapper";

public override string[] Editors => [Constants.PropertyEditors.Aliases.MediaPicker3];
public override string[] Editors => [Constants.PropertyEditors.Aliases.MediaPicker3];
Comment thread
KevinJump marked this conversation as resolved.
Outdated

public override Task<string?> GetExportValueAsync(object value, string editorAlias)
{
Expand Down
Loading