From fedf0c78de6d2ad365db1c112c22af13abd7b9fb Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Wed, 23 Jan 2019 08:56:20 +0100 Subject: [PATCH] Remove obsoleted RelatedLinks picker (replaced by Multi URL Picker) --- src/Umbraco.Core/Constants-PropertyEditors.cs | 7 +- .../Migrations/Install/DatabaseDataCreator.cs | 4 +- .../V_8_0_0/PropertyEditorsMigration.cs | 1 - .../Composing/TypeLoaderTests.cs | 2 +- .../Services/ContentServiceTests.cs | 2 +- .../TestHelpers/Entities/MockedContent.cs | 2 +- .../Entities/MockedContentTypes.cs | 2 +- .../Mvc/HtmlHelperExtensionMethodsTests.cs | 25 --- src/Umbraco.Web/HtmlHelperRenderExtensions.cs | 34 ---- src/Umbraco.Web/Models/RelatedLink.cs | 11 -- src/Umbraco.Web/Models/RelatedLinkBase.cs | 18 -- src/Umbraco.Web/Models/RelatedLinkType.cs | 27 --- src/Umbraco.Web/Models/RelatedLinks.cs | 42 ----- .../RelatedLinksConfiguration.cs | 13 -- .../RelatedLinksConfigurationEditor.cs | 18 -- .../RelatedLinksPropertyEditor.cs | 16 -- .../RelatedLinksLegacyValueConverter.cs | 132 -------------- .../RelatedLinksValueConverter.cs | 169 ------------------ src/Umbraco.Web/RelatedLinksTypeConverter.cs | 98 ---------- src/Umbraco.Web/Umbraco.Web.csproj | 10 -- 20 files changed, 7 insertions(+), 626 deletions(-) delete mode 100644 src/Umbraco.Web/Models/RelatedLink.cs delete mode 100644 src/Umbraco.Web/Models/RelatedLinkBase.cs delete mode 100644 src/Umbraco.Web/Models/RelatedLinkType.cs delete mode 100644 src/Umbraco.Web/Models/RelatedLinks.cs delete mode 100644 src/Umbraco.Web/PropertyEditors/RelatedLinksConfiguration.cs delete mode 100644 src/Umbraco.Web/PropertyEditors/RelatedLinksConfigurationEditor.cs delete mode 100644 src/Umbraco.Web/PropertyEditors/RelatedLinksPropertyEditor.cs delete mode 100644 src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksLegacyValueConverter.cs delete mode 100644 src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksValueConverter.cs delete mode 100644 src/Umbraco.Web/RelatedLinksTypeConverter.cs diff --git a/src/Umbraco.Core/Constants-PropertyEditors.cs b/src/Umbraco.Core/Constants-PropertyEditors.cs index b9f20fb449..8b637fe90e 100644 --- a/src/Umbraco.Core/Constants-PropertyEditors.cs +++ b/src/Umbraco.Core/Constants-PropertyEditors.cs @@ -118,12 +118,7 @@ namespace Umbraco.Core /// RadioButton list. /// public const string RadioButtonList = "Umbraco.RadioButtonList"; - - /// - /// Related Links. - /// - public const string RelatedLinks = "Umbraco.RelatedLinks"; - + /// /// Slider. /// diff --git a/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs b/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs index f32ea1cb6f..4e0b5dfa0f 100644 --- a/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs @@ -135,7 +135,7 @@ namespace Umbraco.Core.Migrations.Install _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1047, Trashed = false, ParentId = -1, UserId = -1, Level = 1, Path = "-1,1047", SortOrder = 2, UniqueId = new Guid("1EA2E01F-EBD8-4CE1-8D71-6B1149E63548"), Text = "Member Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1048, Trashed = false, ParentId = -1, UserId = -1, Level = 1, Path = "-1,1048", SortOrder = 2, UniqueId = new Guid("135D60E0-64D9-49ED-AB08-893C9BA44AE5"), Text = "Media Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1049, Trashed = false, ParentId = -1, UserId = -1, Level = 1, Path = "-1,1049", SortOrder = 2, UniqueId = new Guid("9DBBCBBB-2327-434A-B355-AF1B84E5010A"), Text = "Multiple Media Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1050, Trashed = false, ParentId = -1, UserId = -1, Level = 1, Path = "-1,1050", SortOrder = 2, UniqueId = new Guid("B4E3535A-1753-47E2-8568-602CF8CFEE6F"), Text = "Related Links", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1050, Trashed = false, ParentId = -1, UserId = -1, Level = 1, Path = "-1,1050", SortOrder = 2, UniqueId = new Guid("B4E3535A-1753-47E2-8568-602CF8CFEE6F"), Text = "Multi URL Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); } private void CreateLockData() @@ -301,7 +301,7 @@ namespace Umbraco.Core.Migrations.Install _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = 1048, EditorAlias = Constants.PropertyEditors.Aliases.MediaPicker, DbType = "Ntext" }); _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = 1049, EditorAlias = Constants.PropertyEditors.Aliases.MediaPicker, DbType = "Ntext", Configuration = "{\"multiPicker\":1}" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = 1050, EditorAlias = Constants.PropertyEditors.Aliases.RelatedLinks, DbType = "Ntext" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = 1050, EditorAlias = Constants.PropertyEditors.Aliases.MultiUrlPicker, DbType = "Ntext" }); } private void CreateRelationTypeData() diff --git a/src/Umbraco.Core/Migrations/Upgrade/V_8_0_0/PropertyEditorsMigration.cs b/src/Umbraco.Core/Migrations/Upgrade/V_8_0_0/PropertyEditorsMigration.cs index ee439088be..064ffc7228 100644 --- a/src/Umbraco.Core/Migrations/Upgrade/V_8_0_0/PropertyEditorsMigration.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/V_8_0_0/PropertyEditorsMigration.cs @@ -16,7 +16,6 @@ namespace Umbraco.Core.Migrations.Upgrade.V_8_0_0 RenameDataType(Constants.PropertyEditors.Aliases.MediaPicker + "2", Constants.PropertyEditors.Aliases.MediaPicker); RenameDataType(Constants.PropertyEditors.Aliases.MemberPicker + "2", Constants.PropertyEditors.Aliases.MemberPicker); RenameDataType(Constants.PropertyEditors.Aliases.MultiNodeTreePicker + "2", Constants.PropertyEditors.Aliases.MultiNodeTreePicker); - RenameDataType(Constants.PropertyEditors.Aliases.RelatedLinks + "2", Constants.PropertyEditors.Aliases.RelatedLinks); RenameDataType("Umbraco.TextboxMultiple", Constants.PropertyEditors.Aliases.TextArea, false); RenameDataType("Umbraco.Textbox", Constants.PropertyEditors.Aliases.TextBox, false); } diff --git a/src/Umbraco.Tests/Composing/TypeLoaderTests.cs b/src/Umbraco.Tests/Composing/TypeLoaderTests.cs index 6b3ce3eb4e..add3424599 100644 --- a/src/Umbraco.Tests/Composing/TypeLoaderTests.cs +++ b/src/Umbraco.Tests/Composing/TypeLoaderTests.cs @@ -279,7 +279,7 @@ AnotherContentFinder public void GetDataEditors() { var types = _typeLoader.GetDataEditors(); - Assert.AreEqual(40, types.Count()); + Assert.AreEqual(39, types.Count()); } /// diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index 039bcaed24..9490213d62 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -2215,7 +2215,7 @@ namespace Umbraco.Tests.Services Assert.That(sut.GetValue("contentPicker"), Is.EqualTo(Udi.Create(Constants.UdiEntityType.Document, new Guid("74ECA1D4-934E-436A-A7C7-36CC16D4095C")))); Assert.That(sut.GetValue("mediaPicker"), Is.EqualTo(Udi.Create(Constants.UdiEntityType.Media, new Guid("44CB39C8-01E5-45EB-9CF8-E70AAF2D1691")))); Assert.That(sut.GetValue("memberPicker"), Is.EqualTo(Udi.Create(Constants.UdiEntityType.Member, new Guid("9A50A448-59C0-4D42-8F93-4F1D55B0F47D")))); - Assert.That(sut.GetValue("relatedLinks"), Is.EqualTo("")); + Assert.That(sut.GetValue("multiUrlPicker"), Is.EqualTo("[{\"name\":\"https://test.com\",\"url\":\"https://test.com\"}]")); Assert.That(sut.GetValue("tags"), Is.EqualTo("this,is,tags")); } diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs index faf4acf8a4..19a57d7775 100644 --- a/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs +++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs @@ -132,7 +132,7 @@ namespace Umbraco.Tests.TestHelpers.Entities content.SetValue("contentPicker", Udi.Create(Constants.UdiEntityType.Document, new Guid("74ECA1D4-934E-436A-A7C7-36CC16D4095C")).ToString()); content.SetValue("mediaPicker", Udi.Create(Constants.UdiEntityType.Media, new Guid("44CB39C8-01E5-45EB-9CF8-E70AAF2D1691")).ToString()); content.SetValue("memberPicker", Udi.Create(Constants.UdiEntityType.Member, new Guid("9A50A448-59C0-4D42-8F93-4F1D55B0F47D")).ToString()); - content.SetValue("relatedLinks", ""); + content.SetValue("multiUrlPicker", "[{\"name\":\"https://test.com\",\"url\":\"https://test.com\"}]"); content.SetValue("tags", "this,is,tags"); return content; diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs index 14b967b1c9..d7dcf8e79a 100644 --- a/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs +++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs @@ -370,7 +370,7 @@ namespace Umbraco.Tests.TestHelpers.Entities contentCollection.Add(new PropertyType(Constants.PropertyEditors.Aliases.ContentPicker, ValueStorageType.Integer) { Alias = "contentPicker", Name = "Content Picker", Mandatory = false, SortOrder = 16, DataTypeId = 1046 }); contentCollection.Add(new PropertyType(Constants.PropertyEditors.Aliases.MediaPicker, ValueStorageType.Integer) { Alias = "mediaPicker", Name = "Media Picker", Mandatory = false, SortOrder = 17, DataTypeId = 1048 }); contentCollection.Add(new PropertyType(Constants.PropertyEditors.Aliases.MemberPicker, ValueStorageType.Integer) { Alias = "memberPicker", Name = "Member Picker", Mandatory = false, SortOrder = 18, DataTypeId = 1047 }); - contentCollection.Add(new PropertyType(Constants.PropertyEditors.Aliases.RelatedLinks, ValueStorageType.Ntext) { Alias = "relatedLinks", Name = "Related Links", Mandatory = false, SortOrder = 21, DataTypeId = 1050 }); + contentCollection.Add(new PropertyType(Constants.PropertyEditors.Aliases.MultiUrlPicker, ValueStorageType.Nvarchar) { Alias = "multiUrlPicker", Name = "Multi URL Picker", Mandatory = false, SortOrder = 21, DataTypeId = 1050 }); contentCollection.Add(new PropertyType(Constants.PropertyEditors.Aliases.Tags, ValueStorageType.Ntext) { Alias = "tags", Name = "Tags", Mandatory = false, SortOrder = 22, DataTypeId = 1041 }); contentType.PropertyGroups.Add(new PropertyGroup(contentCollection) { Name = "Content", SortOrder = 1 }); diff --git a/src/Umbraco.Tests/Web/Mvc/HtmlHelperExtensionMethodsTests.cs b/src/Umbraco.Tests/Web/Mvc/HtmlHelperExtensionMethodsTests.cs index cc83dcb1c9..ba19f41e74 100644 --- a/src/Umbraco.Tests/Web/Mvc/HtmlHelperExtensionMethodsTests.cs +++ b/src/Umbraco.Tests/Web/Mvc/HtmlHelperExtensionMethodsTests.cs @@ -29,30 +29,5 @@ namespace Umbraco.Tests.Web.Mvc var output = _htmlHelper.Wrap("div", "hello world", new {style = "color:red;", onclick = "void();"}); Assert.AreEqual("
hello world
", output.ToHtmlString()); } - - [Test] - public void GetRelatedLinkHtml_Simple() - { - var relatedLink = new Umbraco.Web.Models.RelatedLink { - Caption = "Link Caption", - NewWindow = true, - Link = "https://www.google.com/" - }; - var output = _htmlHelper.GetRelatedLinkHtml(relatedLink); - Assert.AreEqual("Link Caption", output.ToHtmlString()); - } - - [Test] - public void GetRelatedLinkHtml_HtmlAttributes() - { - var relatedLink = new Umbraco.Web.Models.RelatedLink - { - Caption = "Link Caption", - NewWindow = true, - Link = "https://www.google.com/" - }; - var output = _htmlHelper.GetRelatedLinkHtml(relatedLink, new { @class = "test-class"}); - Assert.AreEqual("Link Caption", output.ToHtmlString()); - } } } diff --git a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs index 626a19a369..1186102bc8 100644 --- a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs +++ b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs @@ -830,39 +830,5 @@ namespace Umbraco.Web } #endregion - - - #region RelatedLink - - /// - /// Renders an anchor element for a RelatedLink instance. - /// Format: <a href="relatedLink.Link" target="_blank/_self">relatedLink.Caption</a> - /// - /// The HTML helper instance that this method extends. - /// The RelatedLink instance - /// An anchor element - public static MvcHtmlString GetRelatedLinkHtml(this HtmlHelper htmlHelper, RelatedLink relatedLink) - { - return htmlHelper.GetRelatedLinkHtml(relatedLink, null); - } - - /// - /// Renders an anchor element for a RelatedLink instance, accepting htmlAttributes. - /// Format: <a href="relatedLink.Link" target="_blank/_self" htmlAttributes>relatedLink.Caption</a> - /// - /// The HTML helper instance that this method extends. - /// The RelatedLink instance - /// An object that contains the HTML attributes to set for the element. - /// - public static MvcHtmlString GetRelatedLinkHtml(this HtmlHelper htmlHelper, RelatedLink relatedLink, object htmlAttributes) - { - var tagBuilder = new TagBuilder("a"); - tagBuilder.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); - tagBuilder.MergeAttribute("href", relatedLink.Link); - tagBuilder.MergeAttribute("target", relatedLink.NewWindow ? "_blank" : "_self"); - tagBuilder.InnerHtml = HttpUtility.HtmlEncode(relatedLink.Caption); - return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal)); - } - #endregion } } diff --git a/src/Umbraco.Web/Models/RelatedLink.cs b/src/Umbraco.Web/Models/RelatedLink.cs deleted file mode 100644 index 1e1d7636ad..0000000000 --- a/src/Umbraco.Web/Models/RelatedLink.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Umbraco.Core.Models.PublishedContent; - -namespace Umbraco.Web.Models -{ - public class RelatedLink : RelatedLinkBase - { - public int? Id { get; internal set; } - internal bool IsDeleted { get; set; } - public IPublishedContent Content { get; set; } - } -} diff --git a/src/Umbraco.Web/Models/RelatedLinkBase.cs b/src/Umbraco.Web/Models/RelatedLinkBase.cs deleted file mode 100644 index c2077ce4a9..0000000000 --- a/src/Umbraco.Web/Models/RelatedLinkBase.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Newtonsoft.Json; - -namespace Umbraco.Web.Models -{ - public abstract class RelatedLinkBase - { - [JsonProperty("caption")] - public string Caption { get; set; } - [JsonProperty("link")] - public string Link { get; set; } - [JsonProperty("newWindow")] - public bool NewWindow { get; set; } - [JsonProperty("isInternal")] - public bool IsInternal { get; set; } - [JsonProperty("type")] - public RelatedLinkType Type { get; set; } - } -} diff --git a/src/Umbraco.Web/Models/RelatedLinkType.cs b/src/Umbraco.Web/Models/RelatedLinkType.cs deleted file mode 100644 index eec7817ab6..0000000000 --- a/src/Umbraco.Web/Models/RelatedLinkType.cs +++ /dev/null @@ -1,27 +0,0 @@ -// -------------------------------------------------------------------------------------------------------------------- -// -// Umbraco -// -// -// Defines the RelatedLinkType type. -// -// -------------------------------------------------------------------------------------------------------------------- - -namespace Umbraco.Web.Models -{ - /// - /// The related link type. - /// - public enum RelatedLinkType - { - /// - /// Internal link type - /// - Internal, - - /// - /// External link type - /// - External - } -} diff --git a/src/Umbraco.Web/Models/RelatedLinks.cs b/src/Umbraco.Web/Models/RelatedLinks.cs deleted file mode 100644 index 22cdcd11b6..0000000000 --- a/src/Umbraco.Web/Models/RelatedLinks.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; - -namespace Umbraco.Web.Models -{ - [TypeConverter(typeof(RelatedLinksTypeConverter))] - public class RelatedLinks : IEnumerable - { - private readonly string _propertyData; - - private readonly IEnumerable _relatedLinks; - - public RelatedLinks(IEnumerable relatedLinks, string propertyData) - { - _relatedLinks = relatedLinks; - _propertyData = propertyData; - } - - /// - /// Gets the property data. - /// - internal string PropertyData - { - get - { - return this._propertyData; - } - } - - public IEnumerator GetEnumerator() - { - return _relatedLinks.GetEnumerator(); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return this.GetEnumerator(); - } - } -} diff --git a/src/Umbraco.Web/PropertyEditors/RelatedLinksConfiguration.cs b/src/Umbraco.Web/PropertyEditors/RelatedLinksConfiguration.cs deleted file mode 100644 index 5db14c6842..0000000000 --- a/src/Umbraco.Web/PropertyEditors/RelatedLinksConfiguration.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Umbraco.Core.PropertyEditors; - -namespace Umbraco.Web.PropertyEditors -{ - /// - /// Represents the configuration for the related links value editor. - /// - public class RelatedLinksConfiguration - { - [ConfigurationField("max", "Maximum number of links", "number", Description = "Enter the maximum amount of links to be added, enter 0 for unlimited")] - public int Maximum { get; set; } - } -} \ No newline at end of file diff --git a/src/Umbraco.Web/PropertyEditors/RelatedLinksConfigurationEditor.cs b/src/Umbraco.Web/PropertyEditors/RelatedLinksConfigurationEditor.cs deleted file mode 100644 index 07ff359a82..0000000000 --- a/src/Umbraco.Web/PropertyEditors/RelatedLinksConfigurationEditor.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections.Generic; -using Umbraco.Core.PropertyEditors; - -namespace Umbraco.Web.PropertyEditors -{ - /// - /// Represents the configuration editor for the related links value editor. - /// - public class RelatedLinksConfigurationEditor : ConfigurationEditor - { - public override IDictionary ToValueEditor(object configuration) - { - var d = base.ToValueEditor(configuration); - d["idType"] = "udi"; - return d; - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Web/PropertyEditors/RelatedLinksPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/RelatedLinksPropertyEditor.cs deleted file mode 100644 index b450fcc67f..0000000000 --- a/src/Umbraco.Web/PropertyEditors/RelatedLinksPropertyEditor.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Umbraco.Core; -using Umbraco.Core.Logging; -using Umbraco.Core.PropertyEditors; - -namespace Umbraco.Web.PropertyEditors -{ - [DataEditor(Constants.PropertyEditors.Aliases.RelatedLinks, "Related links", "relatedlinks", ValueType = ValueTypes.Json, Icon = "icon-thumbnail-list", Group = "pickers")] - public class RelatedLinksPropertyEditor : DataEditor - { - public RelatedLinksPropertyEditor(ILogger logger) - : base(logger) - { } - - protected override IConfigurationEditor CreateConfigurationEditor() => new RelatedLinksConfigurationEditor(); - } -} diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksLegacyValueConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksLegacyValueConverter.cs deleted file mode 100644 index 6c2a4331d0..0000000000 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksLegacyValueConverter.cs +++ /dev/null @@ -1,132 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Xml; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Umbraco.Core; -using Umbraco.Core.Cache; -using Umbraco.Core.Logging; -using Umbraco.Core.Models.PublishedContent; -using Umbraco.Core.PropertyEditors; -using Umbraco.Core.PropertyEditors.ValueConverters; -using Umbraco.Core.Services; - -namespace Umbraco.Web.PropertyEditors.ValueConverters -{ - [DefaultPropertyValueConverter(typeof(JsonValueConverter))] //this shadows the JsonValueConverter - public class RelatedLinksLegacyValueConverter : PropertyValueConverterBase - { - private static readonly string[] MatchingEditors = { - Constants.PropertyEditors.Aliases.RelatedLinks - }; - - private readonly IUmbracoContextAccessor _umbracoContextAccessor; - private readonly ILogger _logger; - private readonly ServiceContext _services; - - public RelatedLinksLegacyValueConverter(IUmbracoContextAccessor umbracoContextAccessor, ServiceContext services, ILogger logger) - { - _umbracoContextAccessor = umbracoContextAccessor; - _services = services; - _logger = logger; - } - - public override bool IsConverter(PublishedPropertyType propertyType) - => MatchingEditors.Contains(propertyType.EditorAlias); - - public override Type GetPropertyValueType(PublishedPropertyType propertyType) - => typeof (JArray); - - public override PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType) - => PropertyCacheLevel.Element; - - public override object ConvertSourceToIntermediate(IPublishedElement owner, PublishedPropertyType propertyType, object source, bool preview) - { - if (source == null) return null; - var sourceString = source.ToString(); - - if (sourceString.DetectIsJson()) - { - try - { - var obj = JsonConvert.DeserializeObject(sourceString); - //update the internal links if we have a context - if (UmbracoContext.Current != null) - { - var helper = new UmbracoHelper(_umbracoContextAccessor.UmbracoContext, _services); - foreach (var a in obj) - { - var type = a.Value("type"); - if (type.IsNullOrWhiteSpace() == false) - { - if (type == "internal") - { - switch (propertyType.EditorAlias) - { - case Constants.PropertyEditors.Aliases.RelatedLinks: - var strLinkId = a.Value("link"); - var udiAttempt = strLinkId.TryConvertTo(); - if (udiAttempt) - { - var content = helper.PublishedContent(udiAttempt.Result); - if (content == null) break; - a["link"] = helper.Url(content.Id); - } - break; - } - } - } - } - } - return obj; - } - catch (Exception ex) - { - _logger.Error(ex, "Could not parse the string '{Json}' to a json object", sourceString); - } - } - - //it's not json, just return the string - return sourceString; - } - - public override object ConvertIntermediateToXPath(IPublishedElement owner, PublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object source, bool preview) - { - if (source == null) return null; - var sourceString = source.ToString(); - - if (sourceString.DetectIsJson()) - { - try - { - var obj = JsonConvert.DeserializeObject(sourceString); - - var d = new XmlDocument(); - var e = d.CreateElement("links"); - d.AppendChild(e); - - foreach (dynamic link in obj) - { - var ee = d.CreateElement("link"); - ee.SetAttribute("title", link.title); - ee.SetAttribute("link", link.link); - ee.SetAttribute("type", link.type); - ee.SetAttribute("newwindow", link.newWindow); - - e.AppendChild(ee); - } - - return d.CreateNavigator(); - } - catch (Exception ex) - { - _logger.Error(ex, "Could not parse the string '{Json}' to a json object", sourceString); - } - } - - //it's not json, just return the string - return sourceString; - } - } -} diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksValueConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksValueConverter.cs deleted file mode 100644 index 983d122a83..0000000000 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksValueConverter.cs +++ /dev/null @@ -1,169 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Umbraco.Core; -using Umbraco.Core.Logging; -using Umbraco.Core.Models.PublishedContent; -using Umbraco.Core.PropertyEditors; -using Umbraco.Core.PropertyEditors.ValueConverters; -using Umbraco.Web.Models; -using Umbraco.Web.PublishedCache; - -namespace Umbraco.Web.PropertyEditors.ValueConverters -{ - /// - /// The related links property value converter. - /// - [DefaultPropertyValueConverter(typeof(RelatedLinksLegacyValueConverter), typeof(JsonValueConverter))] - public class RelatedLinksValueConverter : PropertyValueConverterBase - { - private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor; - private readonly IUmbracoContextAccessor _umbracoContextAccessor; - private readonly ILogger _logger; - - public RelatedLinksValueConverter(IPublishedSnapshotAccessor publishedSnapshotAccessor, IUmbracoContextAccessor umbracoContextAccessor, ILogger logger) - { - _publishedSnapshotAccessor = publishedSnapshotAccessor; - _umbracoContextAccessor = umbracoContextAccessor; - _logger = logger; - } - - /// - /// Checks if this converter can convert the property editor and registers if it can. - /// - /// - /// The property type. - /// - /// - /// The . - /// - public override bool IsConverter(PublishedPropertyType propertyType) - => propertyType.EditorAlias.Equals(Constants.PropertyEditors.Aliases.RelatedLinks); - - public override Type GetPropertyValueType(PublishedPropertyType propertyType) - => typeof (JArray); - - public override PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType) - => PropertyCacheLevel.Element; - - public override object ConvertSourceToIntermediate(IPublishedElement owner, PublishedPropertyType propertyType, object source, bool preview) - { - if (source == null) return null; - var sourceString = source.ToString(); - - var relatedLinksData = JsonConvert.DeserializeObject>(sourceString); - var relatedLinks = new List(); - - foreach (var linkData in relatedLinksData) - { - var relatedLink = new RelatedLink - { - Caption = linkData.Caption, - NewWindow = linkData.NewWindow, - IsInternal = linkData.IsInternal, - Type = linkData.Type, - Link = linkData.Link - }; - - int contentId; - if (int.TryParse(relatedLink.Link, out contentId)) - { - relatedLink.Id = contentId; - relatedLink = CreateLink(relatedLink); - } - else - { - var strLinkId = linkData.Link; - var udiAttempt = strLinkId.TryConvertTo(); - if (udiAttempt.Success && udiAttempt.Result != null) - { - var content = _publishedSnapshotAccessor.PublishedSnapshot.Content.GetById(udiAttempt.Result.Guid); - if (content != null) - { - relatedLink.Id = content.Id; - relatedLink = CreateLink(relatedLink); - relatedLink.Content = content; - } - } - } - - if (relatedLink.IsDeleted == false) - { - relatedLinks.Add(relatedLink); - } - else - { - _logger.Warn("Related Links value converter skipped a link as the node has been unpublished/deleted (Internal Link NodeId: {RelatedLinkNodeId}, Link Caption: '{RelatedLinkCaption}')", relatedLink.Link, relatedLink.Caption); - } - } - - return new RelatedLinks(relatedLinks, sourceString); - } - - private RelatedLink CreateLink(RelatedLink link) - { - var umbracoContext = _umbracoContextAccessor.UmbracoContext; - - if (link.IsInternal && link.Id != null) - { - if (umbracoContext == null) - return null; - - var urlProvider = umbracoContext.UrlProvider; - - link.Link = urlProvider.GetUrl((int)link.Id); - if (link.Link.Equals("#")) - { - link.IsDeleted = true; - link.Link = link.Id.ToString(); - } - else - { - link.IsDeleted = false; - } - } - - return link; - } - - public override object ConvertIntermediateToXPath(IPublishedElement owner, PublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) - { - if (inter == null) return null; - var sourceString = inter.ToString(); - - if (sourceString.DetectIsJson()) - { - try - { - var obj = JsonConvert.DeserializeObject(sourceString); - - var d = new XmlDocument(); - var e = d.CreateElement("links"); - d.AppendChild(e); - - foreach (dynamic link in obj) - { - var ee = d.CreateElement("link"); - ee.SetAttribute("title", link.title); - ee.SetAttribute("link", link.link); - ee.SetAttribute("type", link.type); - ee.SetAttribute("newwindow", link.newWindow); - - e.AppendChild(ee); - } - - return d.CreateNavigator(); - } - catch (Exception ex) - { - _logger.Error(ex, "Could not parse the string {Json} to a json object", sourceString); - } - } - - //it's not json, just return the string - return sourceString; - } - } -} diff --git a/src/Umbraco.Web/RelatedLinksTypeConverter.cs b/src/Umbraco.Web/RelatedLinksTypeConverter.cs deleted file mode 100644 index 647959b920..0000000000 --- a/src/Umbraco.Web/RelatedLinksTypeConverter.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using System.ComponentModel; -using System.Globalization; -using System.Linq; - -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -using Umbraco.Core; -using Umbraco.Core.Logging; -using Umbraco.Core.Composing; -using Umbraco.Web.Models; - -namespace Umbraco.Web -{ - public class RelatedLinksTypeConverter : TypeConverter - { - private readonly UmbracoHelper _umbracoHelper; - - public RelatedLinksTypeConverter(UmbracoHelper umbracoHelper) - { - _umbracoHelper = umbracoHelper; - } - - public RelatedLinksTypeConverter() - { - - } - - private static readonly Type[] ConvertableTypes = new[] - { - typeof(JArray) - }; - - public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) - { - return ConvertableTypes.Any(x => TypeHelper.IsTypeAssignableFrom(x, destinationType)) - || base.CanConvertFrom(context, destinationType); - } - - public override object ConvertTo( - ITypeDescriptorContext context, - CultureInfo culture, - object value, - Type destinationType) - { - var relatedLinks = value as RelatedLinks; - if (relatedLinks == null) - return null; - - if (TypeHelper.IsTypeAssignableFrom(destinationType)) - { - // Conversion to JArray taken from old value converter - - var obj = JsonConvert.DeserializeObject(relatedLinks.PropertyData); - - var umbracoHelper = GetUmbracoHelper(); - - //update the internal links if we have a context - if (umbracoHelper != null) - { - foreach (var a in obj) - { - var type = a.Value("type"); - if (type.IsNullOrWhiteSpace() == false) - { - if (type == "internal") - { - var linkId = a.Value("link"); - var link = umbracoHelper.Url(linkId); - a["link"] = link; - } - } - } - } - return obj; - - } - - return base.ConvertTo(context, culture, value, destinationType); - } - - private UmbracoHelper GetUmbracoHelper() - { - if (_umbracoHelper != null) - return _umbracoHelper; - - if (UmbracoContext.Current == null) - { - Current.Logger.Warn("Cannot create an UmbracoHelper the UmbracoContext is null"); - return null; - } - - //DO NOT assign to _umbracoHelper variable, this is a singleton class and we cannot assign this based on an UmbracoHelper which is request based - return new UmbracoHelper(UmbracoContext.Current, Current.Services); - } - } -} diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 6736f7512b..64a60d824a 100755 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -404,10 +404,6 @@ - - - - @@ -453,9 +449,6 @@ - - - @@ -471,7 +464,6 @@ - @@ -535,7 +527,6 @@ - @@ -860,7 +851,6 @@ -