diff --git a/src/Umbraco.Web/Extensions/UdiExtensions.cs b/src/Umbraco.Web/Extensions/UdiExtensions.cs
new file mode 100644
index 0000000000..c814d63b8c
--- /dev/null
+++ b/src/Umbraco.Web/Extensions/UdiExtensions.cs
@@ -0,0 +1,43 @@
+using Umbraco.Core;
+using Umbraco.Core.Models;
+
+namespace Umbraco.Web.Extensions
+{
+ public static class UdiExtensions
+ {
+ ///
+ /// An extension method to easily acquire a typed version of content, media or member item for a given Udi
+ ///
+ ///
+ /// An item if the item is a Document, Media or Member
+ public static IPublishedContent ToPublishedContent(this Udi udi)
+ {
+ Udi identifier;
+ if (Udi.TryParse(udi.ToString(), out identifier) == false)
+ return null;
+
+ var guidUdi = GuidUdi.Parse(udi.ToString());
+ var umbracoType = Constants.UdiEntityType.ToUmbracoObjectType(identifier.EntityType);
+
+ var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);
+ var entityService = ApplicationContext.Current.Services.EntityService;
+ switch (umbracoType)
+ {
+ case UmbracoObjectTypes.Document:
+ return umbracoHelper.TypedContent(guidUdi.Guid);
+ case UmbracoObjectTypes.Media:
+ var mediaAttempt = entityService.GetIdForKey(guidUdi.Guid, umbracoType);
+ if (mediaAttempt.Success)
+ return umbracoHelper.TypedMedia(mediaAttempt.Result);
+ break;
+ case UmbracoObjectTypes.Member:
+ var memberAttempt = entityService.GetIdForKey(guidUdi.Guid, umbracoType);
+ if (memberAttempt.Success)
+ return umbracoHelper.TypedMember(memberAttempt.Result);
+ break;
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/ContentPickerPropertyConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/ContentPickerPropertyConverter.cs
index 71e559a734..9fdd28ec94 100644
--- a/src/Umbraco.Web/PropertyEditors/ValueConverters/ContentPickerPropertyConverter.cs
+++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/ContentPickerPropertyConverter.cs
@@ -16,6 +16,7 @@ using Umbraco.Core.Configuration;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.PropertyEditors;
+using Umbraco.Web.Extensions;
namespace Umbraco.Web.PropertyEditors.ValueConverters
{
@@ -121,12 +122,12 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
}
break;
case Constants.PropertyEditors.ContentPicker2Alias:
- GuidUdi sourceUdi;
- if (GuidUdi.TryParse(source.ToString(), out sourceUdi))
+ Udi udi;
+ if (Udi.TryParse(source.ToString(), out udi))
{
- var helper = new UmbracoHelper(UmbracoContext.Current);
- content = helper.TypedContent(sourceUdi.Guid);
- return content;
+ content = udi.ToPublishedContent();
+ if (content != null)
+ return content;
}
break;
}
diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/MediaPickerPropertyConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/MediaPickerPropertyConverter.cs
index dce303f75e..02363a5575 100644
--- a/src/Umbraco.Web/PropertyEditors/ValueConverters/MediaPickerPropertyConverter.cs
+++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/MediaPickerPropertyConverter.cs
@@ -13,6 +13,7 @@ using Umbraco.Core;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.PropertyEditors;
+using Umbraco.Web.Extensions;
namespace Umbraco.Web.PropertyEditors.ValueConverters
{
@@ -92,19 +93,14 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
return null;
}
- if (UmbracoContext.Current != null)
+ Udi udi;
+ if (Udi.TryParse(source.ToString(), out udi))
{
- GuidUdi sourceUdi;
- if (GuidUdi.TryParse(source.ToString(), out sourceUdi))
- {
- var helper = new UmbracoHelper(UmbracoContext.Current);
- var mediaAttempt = ApplicationContext.Current.Services.EntityService.GetIdForKey(sourceUdi.Guid, UmbracoObjectTypes.Media);
- if (mediaAttempt.Success)
- {
- return helper.TypedMedia(mediaAttempt.Result);
- }
- }
+ var media = udi.ToPublishedContent();
+ if (media != null)
+ return media;
}
+
return source;
}
}
diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/MemberPickerPropertyConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/MemberPickerPropertyConverter.cs
index 9e4ec3a315..b955e8ab66 100644
--- a/src/Umbraco.Web/PropertyEditors/ValueConverters/MemberPickerPropertyConverter.cs
+++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/MemberPickerPropertyConverter.cs
@@ -1,9 +1,9 @@
-using System;
-using Umbraco.Core;
+using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.PropertyEditors;
+using Umbraco.Web.Extensions;
using Umbraco.Web.Security;
namespace Umbraco.Web.PropertyEditors.ValueConverters
@@ -56,16 +56,12 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
}
break;
case Constants.PropertyEditors.MemberPicker2Alias:
- GuidUdi sourceUdi;
- if (GuidUdi.TryParse(source.ToString(), out sourceUdi))
+ Udi udi;
+ if (Udi.TryParse(source.ToString(), out udi))
{
- var helper = new UmbracoHelper(UmbracoContext.Current);
- var memberAttempt = ApplicationContext.Current.Services.EntityService.GetIdForKey(sourceUdi.Guid, UmbracoObjectTypes.Member);
- if (memberAttempt.Success)
- {
- member = helper.TypedMember(memberAttempt.Result);
+ member = udi.ToPublishedContent();
+ if (member != null)
return member;
- }
}
break;
}
diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerPropertyConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerPropertyConverter.cs
index 286d8e6cf8..e421cb03a6 100644
--- a/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerPropertyConverter.cs
+++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerPropertyConverter.cs
@@ -17,6 +17,7 @@ using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.PropertyEditors.ValueConverters;
+using Umbraco.Web.Extensions;
namespace Umbraco.Web.PropertyEditors.ValueConverters
{
@@ -165,24 +166,11 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
if (udis.Length > 0)
{
- var objectType = UmbracoObjectTypes.Unknown;
-
foreach (var udi in udis)
{
- GuidUdi sourceUdi;
- if (GuidUdi.TryParse(udi.ToString(), out sourceUdi))
- {
- var umbHelper = new UmbracoHelper(UmbracoContext.Current);
- var multiNodeTreePickerItem =
- GetPublishedContent(sourceUdi.Guid, ref objectType, UmbracoObjectTypes.Document, umbHelper.TypedContent)
- ?? GetPublishedContent(sourceUdi.Guid, ref objectType, UmbracoObjectTypes.Media, umbHelper.TypedMedia)
- ?? GetPublishedContent(sourceUdi.Guid, ref objectType, UmbracoObjectTypes.Member, umbHelper.TypedMember);
-
- if (multiNodeTreePickerItem != null)
- {
- multiNodeTreePicker.Add(multiNodeTreePickerItem);
- }
- }
+ var item = udi.ToPublishedContent();
+ if (item != null)
+ multiNodeTreePicker.Add(item);
}
}
//TODO: Get rid of this Yield thing
@@ -222,37 +210,5 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
}
return content;
}
-
- ///
- /// Attempt to get an IPublishedContent instance based on ID and content type
- ///
- /// The element UDI's Guid
- /// The type of content being requested
- /// The type of content expected/supported by
- /// A function to fetch content of type
- /// The requested content, or null if either it does not exist or does not match
- private IPublishedContent GetPublishedContent(Guid sourceUdi, ref UmbracoObjectTypes actualType, UmbracoObjectTypes expectedType, Func contentFetcher)
- {
- // is the actual type supported by the content fetcher?
- if (actualType != UmbracoObjectTypes.Unknown && actualType != expectedType)
- {
- // no, return null
- return null;
- }
-
- // attempt to get the content
- IPublishedContent content = null;
- var contentAttempt = ApplicationContext.Current.Services.EntityService.GetIdForKey(sourceUdi, expectedType);
- if (contentAttempt.Success)
- {
- content = contentFetcher(contentAttempt.Result);
- if (content != null)
- {
- // if we found the content, assign the expected type to the actual type so we don't have to keep looking for other types of content
- actualType = expectedType;
- }
- }
- return content;
- }
}
}
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index 5e8627e6fa..08d487edf8 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -321,6 +321,7 @@
+