From 84acd43ccf089fdbf84e6bd32011b559bfab7b3f Mon Sep 17 00:00:00 2001 From: kjac Date: Thu, 29 May 2014 11:14:45 +0200 Subject: [PATCH] Enrich datatypes with default prevalues Datatypes can have default prevalues, that are not saved as part of the config and thus need to be added when loading the datatype - e.g. the "focalPoint" prevalue for the image cropper datatype. --- .../Api/ArchetypeDataTypeController.cs | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs b/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs index a544c3a..742f4d4 100644 --- a/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs +++ b/app/Umbraco/Umbraco.Archetype/Api/ArchetypeDataTypeController.cs @@ -8,6 +8,9 @@ using Umbraco.Core.Models; using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Mvc; using Umbraco.Web.Editors; +using Umbraco.Core.PropertyEditors; +using Archetype.Extensions; +using Newtonsoft.Json; namespace Archetype.Api { @@ -35,8 +38,32 @@ namespace Archetype.Api { throw new HttpResponseException(HttpStatusCode.NotFound); } + var dataTypeDisplay = Mapper.Map(dataType); - return new { selectedEditor = dataTypeDisplay.SelectedEditor, preValues = dataTypeDisplay.PreValues }; + + // enrich the prevalues with any missing default prevalues for the datatype (e.g. image cropper "focalPoint# prevalue) + var preValues = dataTypeDisplay.PreValues.ToList(); + if(string.IsNullOrEmpty(dataType.PropertyEditorAlias) == false) + { + // fetch the default prevalues for the datatype + var propEditor = PropertyEditorResolver.Current.GetByAlias(dataType.PropertyEditorAlias); + if(propEditor != null && propEditor.DefaultPreValues != null && propEditor.DefaultPreValues.Any()) + { + // add any missing prevalues + foreach(var missingPreValue in propEditor.DefaultPreValues.Where(p => preValues.Any(pre => pre.Key == p.Key) == false)) + { + var value = missingPreValue.Value; + // if the prevalue is a JSON object, deserialize it + if(value != null && value.ToString().DetectIsJson()) + { + value = JsonConvert.DeserializeObject(value.ToString()); + } + preValues.Add(new PreValueFieldDisplay { Key = missingPreValue.Key, Value = value }); + } + } + } + + return new { selectedEditor = dataTypeDisplay.SelectedEditor, preValues = preValues }; } } }