From 7f93b1f38220eed85c9fe5f4837a1a7ac04ab99b Mon Sep 17 00:00:00 2001
From: Ric Carey <ric.carey@northernwolf.marketing>
Date: Tue, 5 May 2020 17:45:03 +0100
Subject: [PATCH] upgraded to latest version of Umbraco + fixed issue with null
 check on render macro by injecting UmbracoComponentRenderer

---
 .../Shared/CustomLabel/CustomLabel.cs         | 13 ++++++-
 source/nuPickers/Shared/Editor/Editor.cs      | 17 +++++++--
 .../Shared/RelationMapping/RelationMapping.cs |  4 +-
 source/nuPickers/nuPickers.csproj             | 38 +++++++++----------
 source/nuPickers/packages.config              | 10 ++---
 5 files changed, 49 insertions(+), 33 deletions(-)

diff --git a/source/nuPickers/Shared/CustomLabel/CustomLabel.cs b/source/nuPickers/Shared/CustomLabel/CustomLabel.cs
index 87f9bfb..a3fe6fb 100644
--- a/source/nuPickers/Shared/CustomLabel/CustomLabel.cs
+++ b/source/nuPickers/Shared/CustomLabel/CustomLabel.cs
@@ -3,8 +3,10 @@
 using System.Linq;
 using System.Web;
 using nuPickers.Shared.Editor;
+using Umbraco.Core.Dictionary;
 using Umbraco.Core.Models;
 using Umbraco.Core.Models.PublishedContent;
+using Umbraco.Web;
 using Umbraco.Web.Composing;
 
 namespace nuPickers.Shared.CustomLabel
@@ -23,14 +25,20 @@ internal class CustomLabel
 
         private string PropertyAlias { get; set; }
 
+        
+
+        private readonly IUmbracoComponentRenderer _componentRenderer;
+
         /// <summary>
         ///
         /// </summary>
         /// <param name="macroAlias">alias of Macro to execute</param>
         /// <param name="contextId">node, media or member id</param>
         /// <param name="propertyAlias">property alias</param>
-        internal CustomLabel(string macroAlias, int contextId, string propertyAlias)
+        internal CustomLabel(string macroAlias, int contextId, string propertyAlias, IUmbracoComponentRenderer componentRenderer)
         {
+            _componentRenderer = componentRenderer;
+
             MacroAlias = macroAlias;
             ContextId = contextId;
             PropertyAlias = propertyAlias;
@@ -52,6 +60,7 @@ internal CustomLabel(string macroAlias, int contextId, string propertyAlias)
                 if (contextNode != null)
                 {
                     HttpContext.Current.Items["pageID"] = contextNode.Id;
+                    ContextId = contextNode.Id;
                     HasMacroContext = true;
                 }
             }
@@ -118,7 +127,7 @@ private string ProcessMacro(string key, string label, string keys, int counter,
         /// <param name="properties"></param>
         private string RenderToString(Macro macro, Dictionary<string, object> properties)
         {
-            return Current.UmbracoHelper.RenderMacro(macro.Alias, properties).ToHtmlString();
+            return _componentRenderer.RenderMacro(ContextId, macro.Alias, properties).ToHtmlString();
         }
     }
 }
\ No newline at end of file
diff --git a/source/nuPickers/Shared/Editor/Editor.cs b/source/nuPickers/Shared/Editor/Editor.cs
index 8509fd1..998933d 100644
--- a/source/nuPickers/Shared/Editor/Editor.cs
+++ b/source/nuPickers/Shared/Editor/Editor.cs
@@ -10,9 +10,20 @@ namespace nuPickers.Shared.Editor
     using System.Collections.Generic;
     using System.Linq;
     using Umbraco.Core;
+    using Umbraco.Core.Composing;
+    using Umbraco.Web;
 
     internal static class Editor
     {
+
+        public static IFactory Factory
+        => Umbraco.Core.Composing.Current.Factory;
+
+        public static IUmbracoComponentRenderer UmbracoComponentRenderer
+                 => Factory.GetInstance<IUmbracoComponentRenderer>();
+
+
+
         /// <summary>
         /// Get a collection of all the (key/label) items for a picker (with optional typeahead)
         /// </summary>
@@ -39,7 +50,7 @@ internal static IEnumerable<EditorDataItem> GetEditorDataItems(
 
                 if (!string.IsNullOrWhiteSpace(customLabelMacro))
                 {
-                    editorDataItems = new CustomLabel(customLabelMacro, currentId, propertyAlias).ProcessEditorDataItems(editorDataItems);
+                    editorDataItems = new CustomLabel(customLabelMacro, currentId, propertyAlias, UmbracoComponentRenderer).ProcessEditorDataItems(editorDataItems);
                 }
 
                 // if the datasource didn't handle the typeahead text, then it needs to be done here (post custom label processing ?)
@@ -78,7 +89,7 @@ internal static IEnumerable<EditorDataItem> GetEditorDataItems(
 
                 if (!string.IsNullOrWhiteSpace(customLabelMacro))
                 {
-                    editorDataItems = new CustomLabel(customLabelMacro, currentId, propertyAlias).ProcessEditorDataItems(editorDataItems);
+                    editorDataItems = new CustomLabel(customLabelMacro, currentId, propertyAlias, UmbracoComponentRenderer).ProcessEditorDataItems(editorDataItems);
                 }
 
                 // ensure sort order matches order of keys supplied
@@ -122,7 +133,7 @@ internal static IEnumerable<EditorDataItem> GetEditorDataItems(
 
                 if (!string.IsNullOrWhiteSpace(customLabelMacro))
                 {
-                    editorDataItems = new CustomLabel(customLabelMacro, currentId, propertyAlias).ProcessEditorDataItems(editorDataItems);
+                    editorDataItems = new CustomLabel(customLabelMacro, currentId, propertyAlias, UmbracoComponentRenderer).ProcessEditorDataItems(editorDataItems);
                 }
             }
 
diff --git a/source/nuPickers/Shared/RelationMapping/RelationMapping.cs b/source/nuPickers/Shared/RelationMapping/RelationMapping.cs
index 46981c2..45b8b54 100644
--- a/source/nuPickers/Shared/RelationMapping/RelationMapping.cs
+++ b/source/nuPickers/Shared/RelationMapping/RelationMapping.cs
@@ -96,13 +96,13 @@ internal static void UpdateRelationMapping(int contextId, string propertyAlias,
                 }
 
                 // check current context is of the correct object type (as according to the relation type)
-                if (Current.Services.EntityService.GetObjectType(contextId) ==  ObjectTypes.GetUmbracoObjectType(relationType.ChildObjectType))
+                if (Current.Services.EntityService.GetObjectType(contextId) ==  ObjectTypes.GetUmbracoObjectType(relationType.ChildObjectType.Value))
                 {
                     // for each picked item
                     foreach (int pickedId in pickedIds)
                     {
                         // check picked item context if of the correct object type (as according to the relation type)
-                        if (Current.Services.EntityService.GetObjectType(pickedId) ==  ObjectTypes.GetUmbracoObjectType(relationType.ParentObjectType))
+                        if (Current.Services.EntityService.GetObjectType(pickedId) ==  ObjectTypes.GetUmbracoObjectType(relationType.ParentObjectType.Value))
                         {
                             // if relation doesn't already exist (new picked item)
                             if (!relations.Exists(x => x.ParentId == pickedId))
diff --git a/source/nuPickers/nuPickers.csproj b/source/nuPickers/nuPickers.csproj
index 2f5bbee..fe05688 100644
--- a/source/nuPickers/nuPickers.csproj
+++ b/source/nuPickers/nuPickers.csproj
@@ -38,13 +38,11 @@
     <Reference Include="AutoMapper.Net4">
       <HintPath>..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.Net4.dll</HintPath>
     </Reference>
-    <Reference Include="ClientDependency.Core, Version=1.9.7.0, Culture=neutral, PublicKeyToken=null">
-      <HintPath>..\packages\ClientDependency.1.9.7\lib\net45\ClientDependency.Core.dll</HintPath>
-      <Private>True</Private>
+    <Reference Include="ClientDependency.Core, Version=1.9.9.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\ClientDependency.1.9.9\lib\net45\ClientDependency.Core.dll</HintPath>
     </Reference>
-    <Reference Include="ClientDependency.Core.Mvc, Version=1.8.0.0, Culture=neutral, PublicKeyToken=null">
-      <HintPath>..\packages\ClientDependency-Mvc5.1.8.0.0\lib\net45\ClientDependency.Core.Mvc.dll</HintPath>
-      <Private>True</Private>
+    <Reference Include="ClientDependency.Core.Mvc, Version=1.9.3.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\ClientDependency-Mvc5.1.9.3\lib\net45\ClientDependency.Core.Mvc.dll</HintPath>
     </Reference>
     <Reference Include="CookComputing.XmlRpcV2">
       <HintPath>..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll</HintPath>
@@ -53,9 +51,8 @@
       <HintPath>..\packages\CSharpTest.Net.Collections.14.906.1403.1082\lib\net40\CSharpTest.Net.Collections.dll</HintPath>
       <Private>True</Private>
     </Reference>
-    <Reference Include="Examine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
-      <HintPath>..\packages\Examine.1.0.0\lib\net452\Examine.dll</HintPath>
-      <Private>True</Private>
+    <Reference Include="Examine, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\Examine.1.0.2\lib\net452\Examine.dll</HintPath>
     </Reference>
     <Reference Include="HtmlAgilityPack, Version=1.8.14.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a">
       <HintPath>..\packages\HtmlAgilityPack.1.8.14\lib\Net45\HtmlAgilityPack.dll</HintPath>
@@ -290,21 +287,20 @@
     <Reference Include="Microsoft.CSharp" />
     <Reference Include="System.Data" />
     <Reference Include="System.Xml" />
-    <Reference Include="Umbraco.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=null">
-      <HintPath>..\packages\UmbracoCms.Core.8.1.1\lib\net472\Umbraco.Core.dll</HintPath>
-      <Private>True</Private>
+    <Reference Include="Umbraco.Core, Version=8.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\UmbracoCms.Core.8.6.1\lib\net472\Umbraco.Core.dll</HintPath>
     </Reference>
-    <Reference Include="Umbraco.Examine, Version=8.0.0.0, Culture=neutral, PublicKeyToken=null">
-      <HintPath>..\packages\UmbracoCms.Web.8.1.1\lib\net472\Umbraco.Examine.dll</HintPath>
-      <Private>True</Private>
+    <Reference Include="Umbraco.Examine, Version=8.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\UmbracoCms.Web.8.6.1\lib\net472\Umbraco.Examine.dll</HintPath>
     </Reference>
-    <Reference Include="Umbraco.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=null">
-      <HintPath>..\packages\UmbracoCms.Web.8.1.1\lib\net472\Umbraco.Web.dll</HintPath>
-      <Private>True</Private>
+    <Reference Include="Umbraco.ModelsBuilder.Embedded, Version=8.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\UmbracoCms.Web.8.6.1\lib\net472\Umbraco.ModelsBuilder.Embedded.dll</HintPath>
     </Reference>
-    <Reference Include="Umbraco.Web.UI, Version=8.0.0.0, Culture=neutral, PublicKeyToken=null">
-      <HintPath>..\packages\UmbracoCms.Web.8.1.1\lib\net472\Umbraco.Web.UI.dll</HintPath>
-      <Private>True</Private>
+    <Reference Include="Umbraco.Web, Version=8.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\UmbracoCms.Web.8.6.1\lib\net472\Umbraco.Web.dll</HintPath>
+    </Reference>
+    <Reference Include="Umbraco.Web.UI, Version=8.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\UmbracoCms.Web.8.6.1\lib\net472\Umbraco.Web.UI.dll</HintPath>
     </Reference>
   </ItemGroup>
   <ItemGroup>
diff --git a/source/nuPickers/packages.config b/source/nuPickers/packages.config
index 85d862f..7c9c87b 100644
--- a/source/nuPickers/packages.config
+++ b/source/nuPickers/packages.config
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
   <package id="AutoMapper" version="3.0.0" targetFramework="net45" />
-  <package id="ClientDependency" version="1.9.7" targetFramework="net472" />
+  <package id="ClientDependency" version="1.9.9" targetFramework="net472" />
   <package id="ClientDependency-Mvc" version="1.8.0.0" targetFramework="net45" />
-  <package id="ClientDependency-Mvc5" version="1.8.0.0" targetFramework="net472" />
+  <package id="ClientDependency-Mvc5" version="1.9.3" targetFramework="net472" />
   <package id="CSharpTest.Net.Collections" version="14.906.1403.1082" targetFramework="net472" />
-  <package id="Examine" version="1.0.0" targetFramework="net472" />
+  <package id="Examine" version="1.0.2" targetFramework="net472" />
   <package id="HtmlAgilityPack" version="1.8.14" targetFramework="net472" />
   <package id="ImageProcessor" version="2.7.0.100" targetFramework="net472" />
   <package id="ImageProcessor.Web" version="3.3.1.0" targetFramework="net45" />
@@ -57,7 +57,7 @@
   <package id="System.Threading.Tasks.Dataflow" version="4.9.0" targetFramework="net472" />
   <package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
   <package id="Umbraco.SqlServerCE" version="4.0.0.1" targetFramework="net472" />
-  <package id="UmbracoCms.Core" version="8.1.1" targetFramework="net472" />
-  <package id="UmbracoCms.Web" version="8.1.1" targetFramework="net472" />
+  <package id="UmbracoCms.Core" version="8.6.1" targetFramework="net472" />
+  <package id="UmbracoCms.Web" version="8.6.1" targetFramework="net472" />
   <package id="xmlrpcnet" version="2.5.0" targetFramework="net45" />
 </packages>
\ No newline at end of file