From 07533e014590c809cf148b533b01614a2ec448ff Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 16 Dec 2015 16:51:12 +0100 Subject: [PATCH 1/4] U4-7551 New Content type editor dialog to select an editor for a property type needs the "Default" and "Reuse" tab functionality changed Removes unused/non-required methods from data type controller/service. --- .../src/common/resources/datatype.resource.js | 24 +----- .../editorpicker/editorpicker.controller.js | 16 ++-- src/Umbraco.Web/Editors/DataTypeController.cs | 74 +------------------ 3 files changed, 14 insertions(+), 100 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js index 678e8547d5..efa7cc4e84 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js @@ -114,28 +114,8 @@ function dataTypeResource($q, $http, umbDataFormatter, umbRequestHelper) { "GetAll")), "Failed to retrieve data"); }, - - getAllUserConfigured: function () { - - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetAllUserConfigured")), - "Failed to retrieve data"); - }, - - getAllUserPropertyEditors: function () { - - return umbRequestHelper.resourcePromise( - $http.get( - umbRequestHelper.getApiUrl( - "dataTypeApiBaseUrl", - "GetAllUserPropertyEditors")), - "Failed to retrieve data"); - }, - - getAllTypesAndEditors : function(){ + + getGroupedPropertyEditors : function(){ return umbRequestHelper.resourcePromise( $http.get( umbRequestHelper.getApiUrl( diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.controller.js index 90dc6a2e4e..83968bda9e 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.controller.js @@ -21,14 +21,14 @@ { active: true, id: 1, - label: "Default", + label: "Available Editors", alias: "Default", typesAndEditors: [] }, { active: false, id: 2, - label: "Reuse", + label: "Re-use", alias: "Reuse", userConfigured: [] } @@ -41,14 +41,14 @@ function activate() { - getAllUserConfiguredDataTypes(); - getAllTypesAndEditors(); + getAllDataTypes(); + getGroupedPropertyEditors(); } - function getAllTypesAndEditors() { + function getGroupedPropertyEditors() { - dataTypeResource.getAllTypesAndEditors().then(function(data){ + dataTypeResource.getGroupedPropertyEditors().then(function(data){ vm.tabs[0].typesAndEditors = data; vm.tabsLoaded = vm.tabsLoaded + 1; checkIfTabContentIsLoaded(); @@ -56,9 +56,9 @@ } - function getAllUserConfiguredDataTypes() { + function getAllDataTypes() { - dataTypeResource.getAllUserConfigured().then(function(data){ + dataTypeResource.getAll().then(function (data) { vm.tabs[1].userConfigured = data; vm.tabsLoaded = vm.tabsLoaded + 1; checkIfTabContentIsLoaded(); diff --git a/src/Umbraco.Web/Editors/DataTypeController.cs b/src/Umbraco.Web/Editors/DataTypeController.cs index 1336166c2c..d53e266060 100644 --- a/src/Umbraco.Web/Editors/DataTypeController.cs +++ b/src/Umbraco.Web/Editors/DataTypeController.cs @@ -285,48 +285,6 @@ namespace Umbraco.Web.Editors .Select(Mapper.Map).Where(x => x.IsSystemDataType == false); } - /// - /// Gets the content json for all data types added by the user - /// - /// - /// - /// Permission is granted to this method if the user has access to any of these sections: Content, media, settings, developer, members - /// - [UmbracoApplicationAuthorize( - Constants.Applications.Content, Constants.Applications.Media, Constants.Applications.Members, - Constants.Applications.Settings, Constants.Applications.Developer)] - public IEnumerable GetAllUserConfigured() - { - //find all user configured for re-reference - return Services.DataTypeService - .GetAllDataTypeDefinitions() - //TODO: This is pretty nasty :( - .Where(x => x.Id > 1045) - .Select(Mapper.Map).Where(x => x.IsSystemDataType == false); - - //find all custom editors added by non-core manifests - - //find the rest - } - - /// - /// Gets the content json for all user added property editors - /// - /// - /// - /// Permission is granted to this method if the user has access to any of these sections: Content, media, settings, developer, members - /// - [UmbracoTreeAuthorize( - Constants.Applications.Content, Constants.Applications.Media, Constants.Applications.Members, - Constants.Applications.Settings, Constants.Applications.Developer)] - public IEnumerable GetAllUserPropertyEditors() - { - return PropertyEditorResolver.Current.PropertyEditors - .OrderBy(x => x.Name) - .Where(x => x.ValueEditor.View.IndexOf("app_plugins", StringComparison.InvariantCultureIgnoreCase) >= 0) - .Select(Mapper.Map); - } - /// /// Returns all configured data types and all potential data types that could exist based on unused property editors grouped /// by their property editor defined group. @@ -340,41 +298,17 @@ namespace Umbraco.Web.Editors Constants.Applications.Settings, Constants.Applications.Developer)] public IDictionary> GetGroupedPropertyEditors() { - var datadefs = Services.DataTypeService - .GetAllDataTypeDefinitions() - .ToArray(); - var datatypes = new List(); - - //this is a very specific map - if a property editor does not have prevalue - and there is a datatype already using this type, return that. - //also, we exclude all the system listviews from the list + var propertyEditors = PropertyEditorResolver.Current.PropertyEditors; foreach (var propertyEditor in propertyEditors) { var hasPrevalues = propertyEditor.PreValueEditor.Fields.Any(); - - //check if a data type exists for this property editor - var dataDef = datadefs.FirstOrDefault(x => x.PropertyEditorAlias == propertyEditor.Alias); - - //if no prevalues and a datatype exists with this property editor - if (hasPrevalues == false && dataDef != null) - { - //exclude system list views - if (dataDef.Name.InvariantStartsWith(Constants.Conventions.DataTypes.ListViewPrefix) == false) - { - datatypes.Add(Mapper.Map(dataDef)); - } - } - else - { - //else, just add a clean property editor - var basic = Mapper.Map(propertyEditor); - basic.HasPrevalues = hasPrevalues; - datatypes.Add(basic); - } + var basic = Mapper.Map(propertyEditor); + basic.HasPrevalues = hasPrevalues; + datatypes.Add(basic); } - var grouped = datatypes .GroupBy(x => x.Group.IsNullOrWhiteSpace() ? "" : x.Group.ToLower()) .ToDictionary(group => group.Key, group => group.AsEnumerable()); From c18ed7fa364290c4616d5df9b65b861ce6df46b4 Mon Sep 17 00:00:00 2001 From: Shannon Date: Thu, 17 Dec 2015 10:35:44 +0100 Subject: [PATCH 2/4] reverts the GetGroupedPropertyEditors method to return the data type definition for a property editor if it has no pre-values and is defined as a data type --- src/Umbraco.Web/Editors/DataTypeController.cs | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web/Editors/DataTypeController.cs b/src/Umbraco.Web/Editors/DataTypeController.cs index d53e266060..d5d18f5c0d 100644 --- a/src/Umbraco.Web/Editors/DataTypeController.cs +++ b/src/Umbraco.Web/Editors/DataTypeController.cs @@ -286,8 +286,9 @@ namespace Umbraco.Web.Editors } /// - /// Returns all configured data types and all potential data types that could exist based on unused property editors grouped - /// by their property editor defined group. + /// Returns all Property Editors - if a Property Editor has no pre-values and a data type exists for this property editor than it's + /// configuration is returned instead of a non-configured property editor, this is because only one data type with this Property Editor should exist + /// (since it cannot be configured differently) /// /// /// @@ -298,15 +299,36 @@ namespace Umbraco.Web.Editors Constants.Applications.Settings, Constants.Applications.Developer)] public IDictionary> GetGroupedPropertyEditors() { + var datadefs = Services.DataTypeService + .GetAllDataTypeDefinitions() + .ToArray(); + var datatypes = new List(); var propertyEditors = PropertyEditorResolver.Current.PropertyEditors; foreach (var propertyEditor in propertyEditors) { var hasPrevalues = propertyEditor.PreValueEditor.Fields.Any(); - var basic = Mapper.Map(propertyEditor); - basic.HasPrevalues = hasPrevalues; - datatypes.Add(basic); + + //check if a data type exists for this property editor + var dataDef = datadefs.FirstOrDefault(x => x.PropertyEditorAlias == propertyEditor.Alias); + + //if no prevalues and a datatype exists with this property editor + if (hasPrevalues == false && dataDef != null) + { + //exclude system list views + if (dataDef.Name.InvariantStartsWith(Constants.Conventions.DataTypes.ListViewPrefix) == false) + { + datatypes.Add(Mapper.Map(dataDef)); + } + } + else + { + //else, just add a clean property editor + var basic = Mapper.Map(propertyEditor); + basic.HasPrevalues = hasPrevalues; + datatypes.Add(basic); + } } var grouped = datatypes From 62db58110a49a160e00a8fadd8d79976979af18c Mon Sep 17 00:00:00 2001 From: Shannon Date: Thu, 17 Dec 2015 11:13:49 +0100 Subject: [PATCH 3/4] re-reverts GetGroupedPropertyEditors and adds GetGroupedDataTypes --- .../src/common/resources/datatype.resource.js | 9 +++ src/Umbraco.Web/Editors/DataTypeController.cs | 67 +++++++++++-------- 2 files changed, 48 insertions(+), 28 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js index efa7cc4e84..7bc65c89a6 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/datatype.resource.js @@ -115,6 +115,15 @@ function dataTypeResource($q, $http, umbDataFormatter, umbRequestHelper) { "Failed to retrieve data"); }, + getGroupedDataTypes: function () { + return umbRequestHelper.resourcePromise( + $http.get( + umbRequestHelper.getApiUrl( + "dataTypeApiBaseUrl", + "GetGroupedDataTypes")), + "Failed to retrieve data"); + }, + getGroupedPropertyEditors : function(){ return umbRequestHelper.resourcePromise( $http.get( diff --git a/src/Umbraco.Web/Editors/DataTypeController.cs b/src/Umbraco.Web/Editors/DataTypeController.cs index d5d18f5c0d..252c739778 100644 --- a/src/Umbraco.Web/Editors/DataTypeController.cs +++ b/src/Umbraco.Web/Editors/DataTypeController.cs @@ -286,9 +286,41 @@ namespace Umbraco.Web.Editors } /// - /// Returns all Property Editors - if a Property Editor has no pre-values and a data type exists for this property editor than it's - /// configuration is returned instead of a non-configured property editor, this is because only one data type with this Property Editor should exist - /// (since it cannot be configured differently) + /// Returns all data types grouped by their property editor group + /// + /// + /// + /// Permission is granted to this method if the user has access to any of these sections: Content, media, settings, developer, members + /// + [UmbracoTreeAuthorize( + Constants.Applications.Content, Constants.Applications.Media, Constants.Applications.Members, + Constants.Applications.Settings, Constants.Applications.Developer)] + public IDictionary> GetGroupedDataTypes() + { + var datadefs = Services.DataTypeService + .GetAllDataTypeDefinitions(); + + var datatypes = new List(); + + var propertyEditors = PropertyEditorResolver.Current.PropertyEditors.ToArray(); + foreach (var datatype in datadefs) + { + var propertyEditor = propertyEditors.Single(x => x.Name == datatype.PropertyEditorAlias); + var hasPrevalues = propertyEditor.PreValueEditor.Fields.Any(); + var basic = Mapper.Map(propertyEditor); + basic.HasPrevalues = hasPrevalues; + datatypes.Add(basic); + } + + var grouped = datatypes + .GroupBy(x => x.Group.IsNullOrWhiteSpace() ? "" : x.Group.ToLower()) + .ToDictionary(group => group.Key, group => group.OrderBy(d => d.Name).AsEnumerable()); + + return grouped; + } + + /// + /// Returns all property editors grouped /// /// /// @@ -299,41 +331,20 @@ namespace Umbraco.Web.Editors Constants.Applications.Settings, Constants.Applications.Developer)] public IDictionary> GetGroupedPropertyEditors() { - var datadefs = Services.DataTypeService - .GetAllDataTypeDefinitions() - .ToArray(); - var datatypes = new List(); var propertyEditors = PropertyEditorResolver.Current.PropertyEditors; foreach (var propertyEditor in propertyEditors) { var hasPrevalues = propertyEditor.PreValueEditor.Fields.Any(); - - //check if a data type exists for this property editor - var dataDef = datadefs.FirstOrDefault(x => x.PropertyEditorAlias == propertyEditor.Alias); - - //if no prevalues and a datatype exists with this property editor - if (hasPrevalues == false && dataDef != null) - { - //exclude system list views - if (dataDef.Name.InvariantStartsWith(Constants.Conventions.DataTypes.ListViewPrefix) == false) - { - datatypes.Add(Mapper.Map(dataDef)); - } - } - else - { - //else, just add a clean property editor - var basic = Mapper.Map(propertyEditor); - basic.HasPrevalues = hasPrevalues; - datatypes.Add(basic); - } + var basic = Mapper.Map(propertyEditor); + basic.HasPrevalues = hasPrevalues; + datatypes.Add(basic); } var grouped = datatypes .GroupBy(x => x.Group.IsNullOrWhiteSpace() ? "" : x.Group.ToLower()) - .ToDictionary(group => group.Key, group => group.AsEnumerable()); + .ToDictionary(group => group.Key, group => group.OrderBy(d => d.Name).AsEnumerable()); return grouped; } From c7ac6e5e7053f59a3a4f75bc0ed8d0e5b7424f6a Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 17 Dec 2015 12:32:18 +0100 Subject: [PATCH 4/4] Loading grouped datatypes when reusing in content type editor. Create new data type from available editor, get data type from reuse. --- .../editorpicker/editorpicker.controller.js | 72 +++++++++---------- .../editorpicker/editorpicker.html | 28 +++++--- src/Umbraco.Web/Editors/DataTypeController.cs | 19 +++-- 3 files changed, 60 insertions(+), 59 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.controller.js index 83968bda9e..5b2dbbb26d 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.controller.js @@ -38,10 +38,11 @@ vm.showDetailsOverlay = showDetailsOverlay; vm.hideDetailsOverlay = hideDetailsOverlay; vm.pickEditor = pickEditor; + vm.pickDataType = pickDataType; function activate() { - getAllDataTypes(); + getGroupedDataTypes(); getGroupedPropertyEditors(); } @@ -56,9 +57,9 @@ } - function getAllDataTypes() { + function getGroupedDataTypes() { - dataTypeResource.getAll().then(function (data) { + dataTypeResource.getGroupedDataTypes().then(function (data) { vm.tabs[1].userConfigured = data; vm.tabsLoaded = vm.tabsLoaded + 1; checkIfTabContentIsLoaded(); @@ -93,58 +94,51 @@ function pickEditor(editor) { - if(editor.id === null) { + var parentId = -1; - // add scaffold in data type root - var parentId = -1; + dataTypeResource.getScaffold(parentId).then(function(dataType) { - dataTypeResource.getScaffold(parentId).then(function(dataType) { + // set alias + dataType.selectedEditor = editor.alias; - // set alias - dataType.selectedEditor = editor.alias; + // set name + var nameArray = []; - // set name - var nameArray = []; + if($scope.model.contentTypeName) { + nameArray.push($scope.model.contentTypeName); + } - if($scope.model.contentTypeName) { - nameArray.push($scope.model.contentTypeName); - } + if($scope.model.property.label) { + nameArray.push($scope.model.property.label); + } - if($scope.model.property.label) { - nameArray.push($scope.model.property.label); - } + if(editor.name) { + nameArray.push(editor.name); + } - if(editor.name) { - nameArray.push(editor.name); - } + // make name + dataType.name = nameArray.join(" - "); - // make name - dataType.name = nameArray.join(" - "); + // get pre values + dataTypeResource.getPreValues(dataType.selectedEditor).then(function(preValues) { - // get pre values - dataTypeResource.getPreValues(dataType.selectedEditor).then(function(preValues) { + dataType.preValues = preValues; - dataType.preValues = preValues; - - openEditorSettingsOverlay(dataType, true); - - }); + openEditorSettingsOverlay(dataType, true); }); - } else { + }); - dataTypeResource.getById(editor.id).then(function(dataType) { + } - contentTypeResource.getPropertyTypeScaffold(dataType.id).then(function(propertyType) { + function pickDataType(selectedDataType) { - submitOverlay(dataType, propertyType, false); - - }); - - }); - - } + dataTypeResource.getById(selectedDataType.id).then(function(dataType) { + contentTypeResource.getPropertyTypeScaffold(dataType.id).then(function(propertyType) { + submitOverlay(dataType, propertyType, false); + }); + }); } diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.html b/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.html index a09101a54f..671d9083c4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/editorpicker/editorpicker.html @@ -42,15 +42,25 @@
-
Your configurations
- + +
+ +
+
{{key}}
+ + + +
+ +
+
diff --git a/src/Umbraco.Web/Editors/DataTypeController.cs b/src/Umbraco.Web/Editors/DataTypeController.cs index 252c739778..c2d7ec37d2 100644 --- a/src/Umbraco.Web/Editors/DataTypeController.cs +++ b/src/Umbraco.Web/Editors/DataTypeController.cs @@ -297,22 +297,19 @@ namespace Umbraco.Web.Editors Constants.Applications.Settings, Constants.Applications.Developer)] public IDictionary> GetGroupedDataTypes() { - var datadefs = Services.DataTypeService - .GetAllDataTypeDefinitions(); - - var datatypes = new List(); + var dataTypes = Services.DataTypeService + .GetAllDataTypeDefinitions() + .Select(Mapper.Map); var propertyEditors = PropertyEditorResolver.Current.PropertyEditors.ToArray(); - foreach (var datatype in datadefs) + + foreach (var dataType in dataTypes) { - var propertyEditor = propertyEditors.Single(x => x.Name == datatype.PropertyEditorAlias); - var hasPrevalues = propertyEditor.PreValueEditor.Fields.Any(); - var basic = Mapper.Map(propertyEditor); - basic.HasPrevalues = hasPrevalues; - datatypes.Add(basic); + var propertyEditor = propertyEditors.Single(x => x.Alias == dataType.Alias); + dataType.HasPrevalues = propertyEditor.PreValueEditor.Fields.Any(); ; } - var grouped = datatypes + var grouped = dataTypes .GroupBy(x => x.Group.IsNullOrWhiteSpace() ? "" : x.Group.ToLower()) .ToDictionary(group => group.Key, group => group.OrderBy(d => d.Name).AsEnumerable());