Skip to content

Commit

Permalink
Add support for Umbraco redirects in Multinode treepicker
Browse files Browse the repository at this point in the history
  • Loading branch information
skttl committed Jul 29, 2016
1 parent a6eee0e commit 3f4304c
Showing 1 changed file with 37 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
// </summary>
// --------------------------------------------------------------------------------------------------------------------

using System.Globalization;

namespace Our.Umbraco.PropertyConverters
{
using System;
Expand All @@ -29,6 +31,15 @@ namespace Our.Umbraco.PropertyConverters
/// </summary>
public class MultiNodeTreePickerPropertyConverter : PropertyValueConverterBase, IPropertyValueConverterMeta
{
/// <summary>
/// The properties to exclude.
/// </summary>
private static readonly List<string> PropertiesToExclude = new List<string>()
{
Constants.Conventions.Content.InternalRedirectId.ToLower(CultureInfo.InvariantCulture),
Constants.Conventions.Content.Redirect.ToLower(CultureInfo.InvariantCulture)
};

/// <summary>
/// Checks if this converter can convert the property editor and registers if it can.
/// </summary>
Expand Down Expand Up @@ -102,38 +113,46 @@ public override object ConvertSourceToObject(PublishedPropertyType propertyType,
return null;
}

var nodeIds = (int[])source;

var multiNodeTreePicker = new List<IPublishedContent>();

var dynamicInvocation = ConverterHelper.DynamicInvocation();

if (UmbracoContext.Current != null)
{
var umbHelper = new UmbracoHelper(UmbracoContext.Current);
var nodeIds = (int[])source;

if (nodeIds.Length > 0)
if (!(propertyType.PropertyTypeAlias != null && PropertiesToExclude.Contains(propertyType.PropertyTypeAlias.ToLower(CultureInfo.InvariantCulture))))
{

var objectType = UmbracoObjectTypes.Unknown;
var multiNodeTreePicker = new List<IPublishedContent>();

var dynamicInvocation = ConverterHelper.DynamicInvocation();

var umbHelper = new UmbracoHelper(UmbracoContext.Current);

foreach (var nodeId in nodeIds)
if (nodeIds.Length > 0)
{
var multiNodeTreePickerItem = GetPublishedContent(nodeId, ref objectType, UmbracoObjectTypes.Document, umbHelper.TypedContent)
?? GetPublishedContent(nodeId, ref objectType, UmbracoObjectTypes.Media, umbHelper.TypedMedia)
?? GetPublishedContent(nodeId, ref objectType, UmbracoObjectTypes.Member, umbHelper.TypedMember);

if (multiNodeTreePickerItem != null)
var objectType = UmbracoObjectTypes.Unknown;

foreach (var nodeId in nodeIds)
{
multiNodeTreePicker.Add(dynamicInvocation ? multiNodeTreePickerItem.AsDynamic() : multiNodeTreePickerItem);
var multiNodeTreePickerItem = GetPublishedContent(nodeId, ref objectType, UmbracoObjectTypes.Document, umbHelper.TypedContent)
?? GetPublishedContent(nodeId, ref objectType, UmbracoObjectTypes.Media, umbHelper.TypedMedia)
?? GetPublishedContent(nodeId, ref objectType, UmbracoObjectTypes.Member, umbHelper.TypedMember);

if (multiNodeTreePickerItem != null)
{
multiNodeTreePicker.Add(dynamicInvocation ? multiNodeTreePickerItem.AsDynamic() : multiNodeTreePickerItem);
}
}

}

return dynamicInvocation
? new DynamicPublishedContentList(multiNodeTreePicker.Where(x => x != null))
: multiNodeTreePicker.Yield().Where(x => x != null);
}

return dynamicInvocation
? new DynamicPublishedContentList(multiNodeTreePicker.Where(x => x != null))
: multiNodeTreePicker.Yield().Where(x => x != null);

// return the first nodeId
return nodeIds.FirstOrDefault();
}
else
{
Expand Down

0 comments on commit 3f4304c

Please sign in to comment.