diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs index 04e57c5e1d..912582f1ef 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs @@ -180,13 +180,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings [ConfigurationProperty("EnablePropertyValueConverters")] internal InnerTextConfigurationElement EnablePropertyValueConverters { - get - { - return new OptionalInnerTextConfigurationElement( - (InnerTextConfigurationElement)this["EnablePropertyValueConverters"], - //set the default - false); - } + get { return GetOptionalTextElement("EnablePropertyValueConverters", false); } } string IContentSection.NotificationEmailAddress diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedContentEnumerable.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedContentEnumerable.cs index 8d242cf299..7891253188 100644 --- a/src/Umbraco.Core/Models/PublishedContent/PublishedContentEnumerable.cs +++ b/src/Umbraco.Core/Models/PublishedContent/PublishedContentEnumerable.cs @@ -1,4 +1,5 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; using System.Linq; @@ -12,7 +13,7 @@ namespace Umbraco.Core.Models.PublishedContent /// /// The items in the collection /// - private readonly List _items = new List(); + private readonly IEnumerable _items; /// /// Initializes a new instance of the class. @@ -22,7 +23,8 @@ namespace Umbraco.Core.Models.PublishedContent /// public PublishedContentEnumerable(IEnumerable publishedContent) { - _items.AddRange(publishedContent); + if (publishedContent == null) throw new ArgumentNullException("publishedContent"); + _items = publishedContent; } /// diff --git a/src/Umbraco.Core/PublishedContentTypeConverter.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedContentTypeConverter.cs similarity index 74% rename from src/Umbraco.Core/PublishedContentTypeConverter.cs rename to src/Umbraco.Core/Models/PublishedContent/PublishedContentTypeConverter.cs index 485ee40f7d..4141a19b35 100644 --- a/src/Umbraco.Core/PublishedContentTypeConverter.cs +++ b/src/Umbraco.Core/Models/PublishedContent/PublishedContentTypeConverter.cs @@ -1,21 +1,20 @@ -using System; +using System; using System.ComponentModel; using System.Globalization; using System.Linq; -using Umbraco.Core.Models; -namespace Umbraco.Core +namespace Umbraco.Core.Models.PublishedContent { - public class PublishedContentTypeConverter : TypeConverter + internal class PublishedContentTypeConverter : TypeConverter { + private static readonly Type[] ConvertableTypes = new[] + { + typeof(int) + }; + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { - var convertableTypes = new[] - { - typeof(int) - }; - - return convertableTypes.Any(x => TypeHelper.IsTypeAssignableFrom(x, destinationType)) + return ConvertableTypes.Any(x => TypeHelper.IsTypeAssignableFrom(x, destinationType)) || base.CanConvertFrom(context, destinationType); } @@ -37,4 +36,4 @@ namespace Umbraco.Core return base.ConvertTo(context, culture, value, destinationType); } } -} +} \ No newline at end of file diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/CheckboxListValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/CheckboxListValueConverter.cs index 851518b8ea..3b97b5e3e6 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/CheckboxListValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/CheckboxListValueConverter.cs @@ -6,7 +6,10 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { - public class CheckboxListValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(IEnumerable))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class CheckboxListValueConverter : PropertyValueConverterBase { public override bool IsConverter(PublishedPropertyType propertyType) { @@ -19,7 +22,7 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters public override object ConvertSourceToObject(PublishedPropertyType propertyType, object source, bool preview) { - var sourceString = (source ?? "").ToString(); + var sourceString = (source ?? string.Empty).ToString(); if (string.IsNullOrEmpty(sourceString)) return Enumerable.Empty(); @@ -28,17 +31,6 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters sourceString.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(v => v.Trim()); return values; - } - - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(IEnumerable); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, - PropertyCacheValue cacheValue) - { - return PropertyCacheLevel.Content; - } + } } } diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/ColorPickerValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/ColorPickerValueConverter.cs index 5cac747818..987640716b 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/ColorPickerValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/ColorPickerValueConverter.cs @@ -4,7 +4,10 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { - public class ColorPickerValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(string))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class ColorPickerValueConverter : PropertyValueConverterBase { public override bool IsConverter(PublishedPropertyType propertyType) { @@ -18,17 +21,8 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview) { // make sure it's a string - return source.ToString(); - } - - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(string); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, PropertyCacheValue cacheValue) - { - return PropertyCacheLevel.Content; + return source == null ? string.Empty : source.ToString(); } + } } diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/DatePickerValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/DatePickerValueConverter.cs index 769f3928a7..ce10dd202e 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/DatePickerValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/DatePickerValueConverter.cs @@ -6,6 +6,7 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { + [DefaultPropertyValueConverter] [PropertyValueType(typeof(DateTime))] [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] public class DatePickerValueConverter : PropertyValueConverterBase diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs index e32ff7af02..89af76ea12 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs @@ -3,6 +3,7 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { + [DefaultPropertyValueConverter] [PropertyValueType(typeof(decimal))] [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] public class DecimalValueConverter : PropertyValueConverterBase diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListMultipleValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListMultipleValueConverter.cs index f6692028ed..80a8a18a5d 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListMultipleValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListMultipleValueConverter.cs @@ -6,7 +6,10 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { - public class DropdownListMultipleValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(IEnumerable))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class DropdownListMultipleValueConverter : PropertyValueConverterBase { public override bool IsConverter(PublishedPropertyType propertyType) { @@ -29,16 +32,6 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters return values; } - - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(IEnumerable); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, - PropertyCacheValue cacheValue) - { - return PropertyCacheLevel.Content; - } + } } diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListMultipleWithKeysValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListMultipleWithKeysValueConverter.cs index 539de12d0d..649d50746f 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListMultipleWithKeysValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListMultipleWithKeysValueConverter.cs @@ -6,7 +6,11 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { - public class DropdownListMultipleWithKeysValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(IEnumerable))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class DropdownListMultipleWithKeysValueConverter : PropertyValueConverterBase { public override bool IsConverter(PublishedPropertyType propertyType) { @@ -30,16 +34,6 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters return prevalueIds; } - - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(IEnumerable); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, - PropertyCacheValue cacheValue) - { - return PropertyCacheLevel.Content; - } + } } diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListValueConverter.cs index b5ffcbf93e..69b2ff1adb 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListValueConverter.cs @@ -1,28 +1,28 @@ using System; +using Umbraco.Core.Configuration; using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { - public class DropdownListValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(string))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class DropdownListValueConverter : PropertyValueConverterBase { public override bool IsConverter(PublishedPropertyType propertyType) { - return propertyType.PropertyEditorAlias.InvariantEquals(Constants.PropertyEditors.DropDownListAlias); + if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters) + { + return propertyType.PropertyEditorAlias.InvariantEquals(Constants.PropertyEditors.DropDownListAlias); + } + return false; } public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview) { return source == null ? string.Empty : source.ToString(); } - - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(string); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, PropertyCacheValue cacheValue) - { - return PropertyCacheLevel.Content; - } + } } diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListWithKeysValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListWithKeysValueConverter.cs index 848c3ba402..de95906469 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListWithKeysValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/DropdownListWithKeysValueConverter.cs @@ -4,7 +4,10 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { - public class DropdownListWithKeysValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(int))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class DropdownListWithKeysValueConverter : PropertyValueConverterBase { public override bool IsConverter(PublishedPropertyType propertyType) { @@ -23,16 +26,6 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters return null; } - - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(int); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, - PropertyCacheValue cacheValue) - { - return PropertyCacheLevel.Content; - } + } } diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/EmailAddressValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/EmailAddressValueConverter.cs index e9b0f7357f..7a2a06cf67 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/EmailAddressValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/EmailAddressValueConverter.cs @@ -1,29 +1,27 @@ using System; +using Umbraco.Core.Configuration; using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { - public class EmailAddressValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(string))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class EmailAddressValueConverter : PropertyValueConverterBase { public override bool IsConverter(PublishedPropertyType propertyType) { - return propertyType.PropertyEditorAlias.InvariantEquals(Constants.PropertyEditors.EmailAddressAlias); + if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters) + { + return propertyType.PropertyEditorAlias.InvariantEquals(Constants.PropertyEditors.EmailAddressAlias); + } + return false; } public override object ConvertSourceToObject(PublishedPropertyType propertyType, object source, bool preview) { return source.ToString(); } - - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(string); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, - PropertyCacheValue cacheValue) - { - return PropertyCacheLevel.Content; - } + } } diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/IntegerValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/IntegerValueConverter.cs index c9b0306e32..34b1ebffb1 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/IntegerValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/IntegerValueConverter.cs @@ -2,6 +2,7 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters { + [DefaultPropertyValueConverter] [PropertyValueType(typeof(int))] [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] public class IntegerValueConverter : PropertyValueConverterBase diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/MarkdownEditorValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/MarkdownEditorValueConverter.cs index aae8da4be7..1d6425133e 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/MarkdownEditorValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/MarkdownEditorValueConverter.cs @@ -4,6 +4,7 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { + [DefaultPropertyValueConverter] [PropertyValueType(typeof(IHtmlString))] [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] public class MarkdownEditorValueConverter : PropertyValueConverterBase diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/MemberGroupPickerValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/MemberGroupPickerValueConverter.cs index a962fb55aa..2d56dcba58 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/MemberGroupPickerValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/MemberGroupPickerValueConverter.cs @@ -1,29 +1,27 @@ using System; +using Umbraco.Core.Configuration; using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { - public class MemberGroupPickerValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(string))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class MemberGroupPickerValueConverter : PropertyValueConverterBase { public override bool IsConverter(PublishedPropertyType propertyType) { - return propertyType.PropertyEditorAlias.InvariantEquals(Constants.PropertyEditors.MemberGroupPickerAlias); + if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters) + { + return propertyType.PropertyEditorAlias.InvariantEquals(Constants.PropertyEditors.MemberGroupPickerAlias); + } + return false; } public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview) { return source == null ? string.Empty : source.ToString(); } - - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(string); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, - PropertyCacheValue cacheValue) - { - return PropertyCacheLevel.Content; - } + } } diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/MultipleTextStringValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/MultipleTextStringValueConverter.cs index a3b12a6688..fcbdb1cdaf 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/MultipleTextStringValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/MultipleTextStringValueConverter.cs @@ -8,6 +8,7 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { + [DefaultPropertyValueConverter] [PropertyValueType(typeof(IEnumerable))] [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] public class MultipleTextStringValueConverter : PropertyValueConverterBase diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/RadioButtonListValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/RadioButtonListValueConverter.cs index 7e58c721d5..9427ccecdb 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/RadioButtonListValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/RadioButtonListValueConverter.cs @@ -4,7 +4,10 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { - public class RadioButtonListValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(int))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class RadioButtonListValueConverter : PropertyValueConverterBase { public override bool IsConverter(PublishedPropertyType propertyType) { @@ -23,15 +26,6 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters return null; } - - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(int); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, PropertyCacheValue cacheValue) - { - return PropertyCacheLevel.Content; - } + } } diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/SliderValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/SliderValueConverter.cs index 1e7446a101..f3354eb631 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/SliderValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/SliderValueConverter.cs @@ -3,11 +3,27 @@ using System.Linq; using Umbraco.Core.Configuration; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; +using Umbraco.Core.Services; namespace Umbraco.Core.PropertyEditors.ValueConverters { + [DefaultPropertyValueConverter] public class SliderValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta { + private readonly IDataTypeService _dataTypeService; + + //TODO: Remove this ctor in v8 since the other one will use IoC + public SliderValueConverter() + : this(ApplicationContext.Current.Services.DataTypeService) + { + } + + public SliderValueConverter(IDataTypeService dataTypeService) + { + if (dataTypeService == null) throw new ArgumentNullException("dataTypeService"); + _dataTypeService = dataTypeService; + } + public override bool IsConverter(PublishedPropertyType propertyType) { if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters) @@ -72,10 +88,9 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters /// private bool IsRangeDataType(int dataTypeId) { - // ** This must be cached (U4-8862) ** - var dts = ApplicationContext.Current.Services.DataTypeService; + // ** This must be cached (U4-8862) ** var enableRange = - dts.GetPreValuesCollectionByDataTypeId(dataTypeId) + _dataTypeService.GetPreValuesCollectionByDataTypeId(dataTypeId) .PreValuesAsDictionary.FirstOrDefault( x => string.Equals(x.Key, "enableRange", StringComparison.InvariantCultureIgnoreCase)).Value; diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/TagsValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/TagsValueConverter.cs index 4984bca7c9..a6fadcf8d0 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/TagsValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/TagsValueConverter.cs @@ -5,11 +5,29 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Umbraco.Core.Configuration; using Umbraco.Core.Models.PublishedContent; +using Umbraco.Core.Services; namespace Umbraco.Core.PropertyEditors.ValueConverters { - public class TagsValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(IEnumerable))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class TagsValueConverter : PropertyValueConverterBase { + private readonly IDataTypeService _dataTypeService; + + //TODO: Remove this ctor in v8 since the other one will use IoC + public TagsValueConverter() + : this(ApplicationContext.Current.Services.DataTypeService) + { + } + + public TagsValueConverter(IDataTypeService dataTypeService) + { + if (dataTypeService == null) throw new ArgumentNullException("dataTypeService"); + _dataTypeService = dataTypeService; + } + public override bool IsConverter(PublishedPropertyType propertyType) { if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters) @@ -45,16 +63,6 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters return (string[]) source; } - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(IEnumerable); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, PropertyCacheValue cacheValue) - { - return PropertyCacheLevel.Content; - } - /// /// Discovers if the tags data type is storing its data in a Json format /// @@ -64,12 +72,11 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters /// /// The . /// - private static bool JsonStorageType(int dataTypeId) + private bool JsonStorageType(int dataTypeId) { // ** This must be cached (U4-8862) ** - var dts = ApplicationContext.Current.Services.DataTypeService; var storageType = - dts.GetPreValuesCollectionByDataTypeId(dataTypeId) + _dataTypeService.GetPreValuesCollectionByDataTypeId(dataTypeId) .PreValuesAsDictionary.FirstOrDefault( x => string.Equals(x.Key, "storageType", StringComparison.InvariantCultureIgnoreCase)).Value; diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/TextStringValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/TextStringValueConverter.cs index b64065c801..bffb073df2 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/TextStringValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/TextStringValueConverter.cs @@ -6,11 +6,12 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { + [DefaultPropertyValueConverter] [PropertyValueType(typeof(string))] [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] public class TextStringValueConverter : PropertyValueConverterBase { - private readonly static string[] PropertyTypeAliases = + private static readonly string[] PropertyTypeAliases = { Constants.PropertyEditors.TextboxAlias, Constants.PropertyEditors.TextboxMultipleAlias diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/TinyMceValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/TinyMceValueConverter.cs index 937808b96b..89fc5fb268 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/TinyMceValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/TinyMceValueConverter.cs @@ -4,10 +4,11 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { - /// - /// Value converter for the RTE so that it always returns IHtmlString so that Html.Raw doesn't have to be used. - /// + /// + /// Value converter for the RTE so that it always returns IHtmlString so that Html.Raw doesn't have to be used. + /// // PropertyCacheLevel.Content is ok here because that version of RTE converter does not parse {locallink} nor executes macros + [DefaultPropertyValueConverter] [PropertyValueType(typeof(IHtmlString))] [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] public class TinyMceValueConverter : PropertyValueConverterBase diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/UploadPropertyConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/UploadPropertyConverter.cs index f41667b83d..4953cf3d5e 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/UploadPropertyConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/UploadPropertyConverter.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Generic; using Umbraco.Core; +using Umbraco.Core.Configuration; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors; @@ -8,7 +10,10 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters /// /// The upload property value converter. /// - public class UploadPropertyConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(string))] + [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] + public class UploadPropertyConverter : PropertyValueConverterBase { /// /// Checks if this converter can convert the property editor and registers if it can. @@ -21,21 +26,11 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters /// public override bool IsConverter(PublishedPropertyType propertyType) { - return propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.UploadFieldAlias); - } - - /// - /// The CLR type that the value converter returns. - /// - /// - /// The property type. - /// - /// - /// The . - /// - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(string); + if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters) + { + return propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.UploadFieldAlias); + } + return false; } /// @@ -57,23 +52,6 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters { return (source ?? "").ToString(); } - - /// - /// The get property cache level. - /// - /// - /// The property type. - /// - /// - /// The cache value. - /// - /// - /// The . - /// - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, PropertyCacheValue cacheValue) - { - return PropertyCacheLevel.Content; - } - + } } \ No newline at end of file diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/UserPickerValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/UserPickerValueConverter.cs deleted file mode 100644 index 1ca94990d9..0000000000 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/UserPickerValueConverter.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Umbraco.Core.Configuration; -using Umbraco.Core.Models.Membership; -using Umbraco.Core.Models.PublishedContent; -using Umbraco.Core.Services; - -namespace Umbraco.Core.PropertyEditors.ValueConverters -{ - public class UserPickerValueConverter : PropertyValueConverterBase, IPropertyValueConverterMeta - { - private readonly IUserService _userService; - - public UserPickerValueConverter() - { - _userService = ApplicationContext.Current.Services.UserService; - } - - public UserPickerValueConverter(IUserService userService) - { - Mandate.That(userService != null); - _userService = userService; - } - - public override bool IsConverter(PublishedPropertyType propertyType) - { - if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters) - { - return propertyType.PropertyEditorAlias.InvariantEquals(Constants.PropertyEditors.UserPickerAlias); - } - return false; - } - - public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview) - { - var intAttempt = source.TryConvertTo(); - if (intAttempt.Success) - return intAttempt.Result; - - return null; - } - - public override object ConvertSourceToObject(PublishedPropertyType propertyType, object source, bool preview) - { - if (source == null) - { - return null; - } - - var userId = (int) source; - var user = _userService.GetUserById(userId); - if (user != null) - { - return user; - } - - return userId; - } - - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(IUser); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, PropertyCacheValue cacheValue) - { - PropertyCacheLevel returnLevel; - switch (cacheValue) - { - case PropertyCacheValue.Object: - returnLevel = PropertyCacheLevel.ContentCache; - break; - case PropertyCacheValue.Source: - returnLevel = PropertyCacheLevel.Content; - break; - case PropertyCacheValue.XPath: - returnLevel = PropertyCacheLevel.Content; - break; - default: - returnLevel = PropertyCacheLevel.None; - break; - } - - return returnLevel; - } - } -} diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/YesNoValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/YesNoValueConverter.cs index 1e3b684b08..b9e8639d72 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/YesNoValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/YesNoValueConverter.cs @@ -3,6 +3,7 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Core.PropertyEditors.ValueConverters { + [DefaultPropertyValueConverter] [PropertyValueType(typeof(bool))] [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)] public class YesNoValueConverter : PropertyValueConverterBase diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 57b98b4d6e..c7fe4c87fb 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -318,6 +318,7 @@ + @@ -576,8 +577,6 @@ - - diff --git a/src/Umbraco.Web.UI/config/umbracoSettings.Release.config b/src/Umbraco.Web.UI/config/umbracoSettings.Release.config index 4d229c7dcc..1dc6f8aae1 100644 --- a/src/Umbraco.Web.UI/config/umbracoSettings.Release.config +++ b/src/Umbraco.Web.UI/config/umbracoSettings.Release.config @@ -55,6 +55,9 @@ Textstring + + + true diff --git a/src/Umbraco.Web.UI/config/umbracoSettings.config b/src/Umbraco.Web.UI/config/umbracoSettings.config index 48cec26198..42e21e1b3d 100644 --- a/src/Umbraco.Web.UI/config/umbracoSettings.config +++ b/src/Umbraco.Web.UI/config/umbracoSettings.config @@ -106,6 +106,7 @@ Textstring true + true diff --git a/src/Umbraco.Web/Models/RelatedLink.cs b/src/Umbraco.Web/Models/RelatedLink.cs index 2c57fb3337..884bdebeef 100644 --- a/src/Umbraco.Web/Models/RelatedLink.cs +++ b/src/Umbraco.Web/Models/RelatedLink.cs @@ -1,13 +1,4 @@ -// -------------------------------------------------------------------------------------------------------------------- -// -// Umbraco -// -// -// Defines the RelatedLink type. -// -// -------------------------------------------------------------------------------------------------------------------- - -namespace Umbraco.Web.Models +namespace Umbraco.Web.Models { public class RelatedLink : RelatedLinkBase { diff --git a/src/Umbraco.Web/Models/RelatedLinkBase.cs b/src/Umbraco.Web/Models/RelatedLinkBase.cs index f40f2d939d..c2077ce4a9 100644 --- a/src/Umbraco.Web/Models/RelatedLinkBase.cs +++ b/src/Umbraco.Web/Models/RelatedLinkBase.cs @@ -1,17 +1,8 @@ -// -------------------------------------------------------------------------------------------------------------------- -// -// Umbraco -// -// -// Defines the RelatedLink base type. -// -// -------------------------------------------------------------------------------------------------------------------- - -using Newtonsoft.Json; +using Newtonsoft.Json; namespace Umbraco.Web.Models { - public class RelatedLinkBase + public abstract class RelatedLinkBase { [JsonProperty("caption")] public string Caption { get; set; } diff --git a/src/Umbraco.Web/Models/RelatedLinkData.cs b/src/Umbraco.Web/Models/RelatedLinkData.cs deleted file mode 100644 index 9bb341346c..0000000000 --- a/src/Umbraco.Web/Models/RelatedLinkData.cs +++ /dev/null @@ -1,25 +0,0 @@ -// -------------------------------------------------------------------------------------------------------------------- -// -// Umbraco -// -// -// Defines the RelatedLink json data type. -// -// -------------------------------------------------------------------------------------------------------------------- - -using Newtonsoft.Json; - -namespace Umbraco.Web.Models -{ - public class RelatedLinkData : RelatedLinkBase - { - [JsonProperty("internal")] - public int? Internal { get; set; } - [JsonProperty("edit")] - public bool Edit { get; set; } - [JsonProperty("internalName")] - public string InternalName { get; set; } - [JsonProperty("title")] - public string Title { get; set; } - } -} diff --git a/src/Umbraco.Web/Models/RelatedLinks.cs b/src/Umbraco.Web/Models/RelatedLinks.cs index 4585f2f291..afccdfb31f 100644 --- a/src/Umbraco.Web/Models/RelatedLinks.cs +++ b/src/Umbraco.Web/Models/RelatedLinks.cs @@ -1,13 +1,4 @@ -// -------------------------------------------------------------------------------------------------------------------- -// -// Umbraco -// -// -// Defines the RelatedLinks type. -// -// -------------------------------------------------------------------------------------------------------------------- - -using System.Collections; +using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Linq; @@ -19,9 +10,9 @@ namespace Umbraco.Web.Models { private readonly string _propertyData; - private readonly List _relatedLinks; + private readonly IEnumerable _relatedLinks; - public RelatedLinks(List relatedLinks, string propertyData) + public RelatedLinks(IEnumerable relatedLinks, string propertyData) { _relatedLinks = relatedLinks; _propertyData = propertyData; @@ -36,12 +27,7 @@ namespace Umbraco.Web.Models { return this._propertyData; } - } - - public bool Any() - { - return Enumerable.Any(this); - } + } public IEnumerator GetEnumerator() { diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/ContentPickerPropertyConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/ContentPickerPropertyConverter.cs index 2ea058eca2..815e07612f 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/ContentPickerPropertyConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/ContentPickerPropertyConverter.cs @@ -22,7 +22,12 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters /// /// The content picker property value converter. /// - public class ContentPickerPropertyConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(IPublishedContent))] + [PropertyValueCache(PropertyCacheValue.Object, PropertyCacheLevel.ContentCache)] + [PropertyValueCache(PropertyCacheValue.Source, PropertyCacheLevel.Content)] + [PropertyValueCache(PropertyCacheValue.XPath, PropertyCacheLevel.Content)] + public class ContentPickerPropertyConverter : PropertyValueConverterBase { /// /// The properties to exclude. @@ -130,53 +135,6 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters { return source.ToString(); } - - /// - /// The CLR type that the value converter returns. - /// - /// - /// The property type. - /// - /// - /// The . - /// - public virtual Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(IPublishedContent); - } - - /// - /// The get property cache level. - /// - /// - /// The property type. - /// - /// - /// The cache value. - /// - /// - /// The . - /// - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, PropertyCacheValue cacheValue) - { - PropertyCacheLevel returnLevel; - switch (cacheValue) - { - case PropertyCacheValue.Object: - returnLevel = PropertyCacheLevel.ContentCache; - break; - case PropertyCacheValue.Source: - returnLevel = PropertyCacheLevel.Content; - break; - case PropertyCacheValue.XPath: - returnLevel = PropertyCacheLevel.Content; - break; - default: - returnLevel = PropertyCacheLevel.None; - break; - } - - return returnLevel; - } + } } \ No newline at end of file diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/ImageCropDataSetConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/ImageCropDataSetConverter.cs index 82278676cd..19e87f7d23 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/ImageCropDataSetConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/ImageCropDataSetConverter.cs @@ -13,14 +13,14 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters /// public class ImageCropDataSetConverter : TypeConverter { + private static readonly Type[] ConvertableTypes = new[] + { + typeof(JObject) + }; + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { - var convertableTypes = new[] - { - typeof(JObject) - }; - - return convertableTypes.Any(x => TypeHelper.IsTypeAssignableFrom(x, destinationType)) + return ConvertableTypes.Any(x => TypeHelper.IsTypeAssignableFrom(x, destinationType)) || base.CanConvertFrom(context, destinationType); } diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/MediaPickerPropertyConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/MediaPickerPropertyConverter.cs index 3bdba5d07b..aee456c9d1 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/MediaPickerPropertyConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/MediaPickerPropertyConverter.cs @@ -19,7 +19,12 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters /// /// The media picker property value converter. /// - public class MediaPickerPropertyConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(IPublishedContent))] + [PropertyValueCache(PropertyCacheValue.Object, PropertyCacheLevel.ContentCache)] + [PropertyValueCache(PropertyCacheValue.Source, PropertyCacheLevel.Content)] + [PropertyValueCache(PropertyCacheValue.XPath, PropertyCacheLevel.Content)] + public class MediaPickerPropertyConverter : PropertyValueConverterBase { /// /// Checks if this converter can convert the property editor and registers if it can. @@ -94,52 +99,6 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters return null; } - /// - /// The get property cache level. - /// - /// - /// The property type. - /// - /// - /// The cache value. - /// - /// - /// The . - /// - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, PropertyCacheValue cacheValue) - { - PropertyCacheLevel returnLevel; - switch (cacheValue) - { - case PropertyCacheValue.Object: - returnLevel = PropertyCacheLevel.ContentCache; - break; - case PropertyCacheValue.Source: - returnLevel = PropertyCacheLevel.Content; - break; - case PropertyCacheValue.XPath: - returnLevel = PropertyCacheLevel.Content; - break; - default: - returnLevel = PropertyCacheLevel.None; - break; - } - - return returnLevel; - } - - /// - /// The CLR type that the value converter returns. - /// - /// - /// The property type. - /// - /// - /// The . - /// - public virtual Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(IPublishedContent); - } + } } \ No newline at end of file diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/MemberPickerPropertyConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/MemberPickerPropertyConverter.cs index d9355ad3d7..5f4c9ff92f 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/MemberPickerPropertyConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/MemberPickerPropertyConverter.cs @@ -8,7 +8,12 @@ using Umbraco.Web.Security; namespace Umbraco.Web.PropertyEditors.ValueConverters { - public class MemberPickerPropertyConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(IPublishedContent))] + [PropertyValueCache(PropertyCacheValue.Object, PropertyCacheLevel.ContentCache)] + [PropertyValueCache(PropertyCacheValue.Source, PropertyCacheLevel.Content)] + [PropertyValueCache(PropertyCacheValue.XPath, PropertyCacheLevel.Content)] + public class MemberPickerPropertyConverter : PropertyValueConverterBase { public override bool IsConverter(PublishedPropertyType propertyType) { @@ -42,32 +47,5 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters return null; } - public Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(IPublishedContent); - } - - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, - PropertyCacheValue cacheValue) - { - PropertyCacheLevel returnLevel; - switch (cacheValue) - { - case PropertyCacheValue.Object: - returnLevel = PropertyCacheLevel.ContentCache; - break; - case PropertyCacheValue.Source: - returnLevel = PropertyCacheLevel.Content; - break; - case PropertyCacheValue.XPath: - returnLevel = PropertyCacheLevel.Content; - break; - default: - returnLevel = PropertyCacheLevel.None; - break; - } - - return returnLevel; - } } } diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerPropertyConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerPropertyConverter.cs index 9a18c0948a..431efda8f4 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerPropertyConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerPropertyConverter.cs @@ -23,7 +23,12 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters /// /// The multi node tree picker property editor value converter. /// - public class MultiNodeTreePickerPropertyConverter : PropertyValueConverterBase, IPropertyValueConverterMeta + [DefaultPropertyValueConverter] + [PropertyValueType(typeof(IEnumerable))] + [PropertyValueCache(PropertyCacheValue.Object, PropertyCacheLevel.ContentCache)] + [PropertyValueCache(PropertyCacheValue.Source, PropertyCacheLevel.Content)] + [PropertyValueCache(PropertyCacheValue.XPath, PropertyCacheLevel.Content)] + public class MultiNodeTreePickerPropertyConverter : PropertyValueConverterBase { /// /// The properties to exclude. @@ -100,6 +105,7 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters return null; } + //TODO: Inject an UmbracoHelper and create a GetUmbracoHelper method based on either injected or singleton if (UmbracoContext.Current != null) { var nodeIds = (int[])source; @@ -126,6 +132,7 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters } } } + //TODO: Get rid of this Yield thing return multiNodeTreePicker.Yield().Where(x => x != null); } @@ -138,54 +145,6 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters } } - /// - /// The get property cache level. - /// - /// - /// The property type. - /// - /// - /// The cache value. - /// - /// - /// The . - /// - public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyType, PropertyCacheValue cacheValue) - { - PropertyCacheLevel returnLevel; - switch (cacheValue) - { - case PropertyCacheValue.Object: - returnLevel = PropertyCacheLevel.ContentCache; - break; - case PropertyCacheValue.Source: - returnLevel = PropertyCacheLevel.Content; - break; - case PropertyCacheValue.XPath: - returnLevel = PropertyCacheLevel.Content; - break; - default: - returnLevel = PropertyCacheLevel.None; - break; - } - - return returnLevel; - } - - /// - /// The CLR type that the value converter returns. - /// - /// - /// The property type. - /// - /// - /// The . - /// - public virtual Type GetPropertyValueType(PublishedPropertyType propertyType) - { - return typeof(IEnumerable); - } - /// /// Attempt to get an IPublishedContent instance based on ID and content type /// diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/MultipleMediaPickerPropertyConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/MultipleMediaPickerPropertyConverter.cs index d9832e854d..3b759fc9ff 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/MultipleMediaPickerPropertyConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/MultipleMediaPickerPropertyConverter.cs @@ -17,14 +17,30 @@ using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors; +using Umbraco.Core.Services; namespace Umbraco.Web.PropertyEditors.ValueConverters { /// /// The multiple media picker property value converter. /// + [DefaultPropertyValueConverter] public class MultipleMediaPickerPropertyConverter : PropertyValueConverterBase, IPropertyValueConverterMeta { + private readonly IDataTypeService _dataTypeService; + + //TODO: Remove this ctor in v8 since the other one will use IoC + public MultipleMediaPickerPropertyConverter() + : this(ApplicationContext.Current.Services.DataTypeService) + { + } + + public MultipleMediaPickerPropertyConverter(IDataTypeService dataTypeService) + { + if (dataTypeService == null) throw new ArgumentNullException("dataTypeService"); + _dataTypeService = dataTypeService; + } + /// /// Checks if this converter can convert the property editor and registers if it can. /// @@ -207,9 +223,8 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters public bool IsMultipleDataType(int dataTypeId) { // ** This must be cached (U4-8862) ** - var dts = ApplicationContext.Current.Services.DataTypeService; var multiPickerPreValue = - dts.GetPreValuesCollectionByDataTypeId(dataTypeId) + _dataTypeService.GetPreValuesCollectionByDataTypeId(dataTypeId) .PreValuesAsDictionary.FirstOrDefault( x => string.Equals(x.Key, "multiPicker", StringComparison.InvariantCultureIgnoreCase)).Value; diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksEditorValueConvertor.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksEditorValueConvertor.cs index 3940d3b850..ec46889fae 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksEditorValueConvertor.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/RelatedLinksEditorValueConvertor.cs @@ -7,6 +7,7 @@ // // -------------------------------------------------------------------------------------------------------------------- +using System; using System.Collections.Generic; using Newtonsoft.Json; using Umbraco.Core; @@ -15,16 +16,30 @@ using Umbraco.Core.Logging; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors; using Umbraco.Web.Models; +using Umbraco.Web.Routing; namespace Umbraco.Web.PropertyEditors.ValueConverters { /// /// The related links property value converter. /// + [DefaultPropertyValueConverter] [PropertyValueType(typeof(RelatedLinks))] [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.ContentCache)] public class RelatedLinksPropertyConverter : PropertyValueConverterBase { + private readonly UrlProvider _urlProvider; + + public RelatedLinksPropertyConverter() + { + } + + public RelatedLinksPropertyConverter(UrlProvider urlProvider) + { + if (urlProvider == null) throw new ArgumentNullException("urlProvider"); + _urlProvider = urlProvider; + } + /// /// Checks if this converter can convert the property editor and registers if it can. /// @@ -89,7 +104,7 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters } else { - LogHelper.Warn( + LogHelper.Warn( string.Format("Related Links value converter skipped a link as the node has been unpublished/deleted (Internal Link NodeId: {0}, Link Caption: \"{1}\")", relatedLink.Link, relatedLink.Caption)); } } @@ -101,12 +116,14 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters { if (link.IsInternal && link.Id != null) { - if (UmbracoContext.Current == null) + if (_urlProvider == null && UmbracoContext.Current == null) { return null; } - link.Link = UmbracoContext.Current.UrlProvider.GetUrl((int)link.Id); + var urlProvider = _urlProvider ?? UmbracoContext.Current.UrlProvider; + + link.Link = urlProvider.GetUrl((int)link.Id); if (link.Link.Equals("#")) { link.IsDeleted = true; @@ -120,5 +137,17 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters return link; } + + internal class RelatedLinkData : RelatedLinkBase + { + [JsonProperty("internal")] + public int? Internal { get; set; } + [JsonProperty("edit")] + public bool Edit { get; set; } + [JsonProperty("internalName")] + public string InternalName { get; set; } + [JsonProperty("title")] + public string Title { get; set; } + } } } \ No newline at end of file diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/RteMacroRenderingValueConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/RteMacroRenderingValueConverter.cs index 2802a4d631..a6ea79d283 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/RteMacroRenderingValueConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/RteMacroRenderingValueConverter.cs @@ -15,14 +15,15 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters { /// - /// A value converter for TinyMCE that will ensure any macro content is rendered properly even when - /// used dynamically. - /// + /// A value converter for TinyMCE that will ensure any macro content is rendered properly even when + /// used dynamically. + /// // because that version of RTE converter parses {locallink} and executes macros, when going from // data to source, its source value has to be cached at the request level, because we have no idea // what the macros may depend on actually. An so, object and xpath need to follow... request, too. // note: the TinyMceValueConverter is NOT inherited, so the PropertyValueCache attribute here is not // actually required (since Request is default) but leave it here to be absolutely explicit. + [DefaultPropertyValueConverter] [PropertyValueType(typeof(IHtmlString))] [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Request)] public class RteMacroRenderingValueConverter : TinyMceValueConverter diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/TextStringValueConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/TextStringValueConverter.cs index 8938325c35..8354ca629d 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/TextStringValueConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/TextStringValueConverter.cs @@ -10,11 +10,12 @@ using Umbraco.Web.Templates; namespace Umbraco.Web.PropertyEditors.ValueConverters { + [DefaultPropertyValueConverter] [PropertyValueType(typeof(string))] [PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Request)] public class TextStringValueConverter : PropertyValueConverterBase { - private readonly static string[] PropertyTypeAliases = + private static readonly string[] PropertyTypeAliases = { Constants.PropertyEditors.TextboxAlias, Constants.PropertyEditors.TextboxMultipleAlias diff --git a/src/Umbraco.Web/RelatedLinksTypeConverter.cs b/src/Umbraco.Web/RelatedLinksTypeConverter.cs index c3c765133a..2debe5f3ac 100644 --- a/src/Umbraco.Web/RelatedLinksTypeConverter.cs +++ b/src/Umbraco.Web/RelatedLinksTypeConverter.cs @@ -7,20 +7,33 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Umbraco.Core; +using Umbraco.Core.Logging; 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) { - var convertableTypes = new[] - { - typeof(JArray) - }; - - return convertableTypes.Any(x => TypeHelper.IsTypeAssignableFrom(x, destinationType)) + return ConvertableTypes.Any(x => TypeHelper.IsTypeAssignableFrom(x, destinationType)) || base.CanConvertFrom(context, destinationType); } @@ -39,10 +52,12 @@ namespace Umbraco.Web // 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 (UmbracoContext.Current != null) + if (umbracoHelper != null) { - var helper = new UmbracoHelper(UmbracoContext.Current); foreach (var a in obj) { var type = a.Value("type"); @@ -51,7 +66,7 @@ namespace Umbraco.Web if (type == "internal") { var linkId = a.Value("link"); - var link = helper.NiceUrl(linkId); + var link = umbracoHelper.NiceUrl(linkId); a["link"] = link; } } @@ -63,5 +78,20 @@ namespace Umbraco.Web return base.ConvertTo(context, culture, value, destinationType); } + + private UmbracoHelper GetUmbracoHelper() + { + if (_umbracoHelper != null) + return _umbracoHelper; + + if (UmbracoContext.Current == null) + { + LogHelper.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); + } } } diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 964cf3dd99..a76becd775 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -350,7 +350,6 @@ -