From 180e93a3bf7cd5baee010193fa1281137f705bc9 Mon Sep 17 00:00:00 2001 From: AndyButland Date: Mon, 28 Jul 2014 22:34:30 +0200 Subject: [PATCH] Refactor of ContentTypeContainerConfiguration to use a collection instead of multiple delimited strings --- .../listview/listview.controller.js | 17 ++++---- .../propertyeditors/listview/listview.html | 12 +++--- .../ContentAndMediaTypeBaseController.cs | 41 ++++++++++--------- .../ContentTypeContainerConfiguration.cs | 37 ++++++++++------- 4 files changed, 58 insertions(+), 49 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js index 4a86da02bc..c22316872b 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js @@ -39,9 +39,10 @@ function listViewController($rootScope, $scope, $routeParams, $injector, notific allowBulkPublish: true, allowBulkUnpublish: true, allowBulkDelete: true, - additionalColumnAliases: ['UpdateDate', 'Owner'], - additionalColumnHeaders: ['Last edited', 'Updated by'], - additionalColumnLocalizationKeys: ['defaultdialogs_lastEdited', 'content_updatedBy'] + additionalColumns: [ + { alias: 'UpdateDate', header: 'Last edited', localizationKey: 'defaultdialogs_lastEdited' }, + { alias: 'Owner', header: 'Last edited', localizationKey: 'content_updatedBy' } + ] }; // Retrieve the container configuration for the content type and set options before presenting initial view @@ -50,10 +51,8 @@ function listViewController($rootScope, $scope, $routeParams, $injector, notific if (typeof config.pageSize !== 'undefined') { $scope.options.pageSize = config.pageSize; } - if (typeof config.additionalColumnAliases !== 'undefined') { - $scope.options.additionalColumnAliases = config.additionalColumnAliases.split(','); - $scope.options.additionalColumnHeaders = config.additionalColumnHeaders.split(','); - $scope.options.additionalColumnLocalizationKeys = config.additionalColumnLocalizationKeys.split(','); + if (typeof config.additionalColumns !== 'undefined') { + $scope.options.additionalColumns = config.additionalColumns; } if (typeof config.orderBy !== 'undefined') { $scope.options.orderBy = config.orderBy; @@ -138,11 +137,11 @@ function listViewController($rootScope, $scope, $routeParams, $injector, notific }; $scope.getColumnName = function (index) { - return $scope.options.additionalColumnHeaders[index]; + return $scope.options.additionalColumns[index].header; }; $scope.getColumnLocalizationKey = function (index) { - return $scope.options.additionalColumnLocalizationKeys[index]; + return $scope.options.additionalColumns[index].localizationKey; }; $scope.getPropertyValue = function (alias, result) { diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html index d6f419d1e0..f133ce11b6 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html @@ -58,10 +58,10 @@ - - - {{getColumnName($index)}} - {{getColumnName($index)}} + + + {{getColumnName($index)}} + {{getColumnName($index)}} @@ -87,8 +87,8 @@ {{result.name}} - - {{getPropertyValue(alias, result)}} + + {{getPropertyValue(column.alias, result)}} diff --git a/src/Umbraco.Web/Editors/ContentAndMediaTypeBaseController.cs b/src/Umbraco.Web/Editors/ContentAndMediaTypeBaseController.cs index ecb9175b97..193938cf30 100644 --- a/src/Umbraco.Web/Editors/ContentAndMediaTypeBaseController.cs +++ b/src/Umbraco.Web/Editors/ContentAndMediaTypeBaseController.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Net; using System.Text.RegularExpressions; @@ -48,14 +49,11 @@ namespace Umbraco.Web.Editors if (!string.IsNullOrEmpty(contentItem.ContentType.ContainerConfig)) { var containerConfig = JsonConvert.DeserializeObject(contentItem.ContentType.ContainerConfig); + containerConfig.AdditionalColumns = new List(); - // Populate the column headings and localization keys + // Populate the column headings and localization keys if (!string.IsNullOrEmpty(containerConfig.AdditionalColumnAliases)) { - var aliases = containerConfig.AdditionalColumnAliases.Split(','); - var headings = new string[aliases.Length]; - var localizationKeys = new string[aliases.Length]; - // Find all the properties for doc types that might be in the list var allowedContentTypeIds = contentItem.ContentType.AllowedContentTypes .Select(x => x.Id.Value) @@ -65,38 +63,43 @@ namespace Umbraco.Web.Editors .SelectMany(x => x.PropertyTypes) .ToList(); - for (int i = 0; i < aliases.Length; i++) + foreach (var alias in containerConfig.AdditionalColumnAliases.Split(',')) { + var column = new ContentTypeContainerConfiguration.AdditionalColumnDetail + { + Alias = alias, + }; + // Try to find heading from custom property (getting the name from the alias) // - need to look in children of the current content's content type var property = allPropertiesOfAllowedContentTypes - .FirstOrDefault(x => x.Alias == aliases[i].ToFirstLower()); + .FirstOrDefault(x => x.Alias == alias.ToFirstLower()); if (property != null) { - headings[i] = property.Name; + column.Header = property.Name; + column.LocalizationKey = string.Empty; } - else if (aliases[i] == "UpdateDate") + else if (alias == "UpdateDate") { // Special case to restore hard-coded column titles - headings[i] = "Last edited"; - localizationKeys[i] = "defaultdialogs_lastEdited"; + column.Header = "Last edited"; + column.LocalizationKey = "defaultdialogs_lastEdited"; } - else if (aliases[i] == "Owner") + else if (alias == "Owner") { // Special case to restore hard-coded column titles (2) - headings[i] = "Updated by"; - localizationKeys[i] = "content_updatedBy"; + column.Header = "Updated by"; + column.LocalizationKey = "content_updatedBy"; } else { // Otherwise just sentence case the alias - headings[i] = aliases[i].ToFirstUpper().SplitPascalCasing(); - localizationKeys[i] = "content_" + aliases[i].ToFirstLower(); + column.Header = alias.ToFirstUpper().SplitPascalCasing(); + column.LocalizationKey = "content_" + alias.ToFirstLower(); } - } - containerConfig.AdditionalColumnHeaders = string.Join(",", headings); - containerConfig.AdditionalColumnLocalizationKeys = string.Join(",", localizationKeys); + containerConfig.AdditionalColumns.Add(column); + } } return containerConfig; diff --git a/src/Umbraco.Web/Models/ContentEditing/ContentTypeContainerConfiguration.cs b/src/Umbraco.Web/Models/ContentEditing/ContentTypeContainerConfiguration.cs index 7fc3c19dc8..70184d6d32 100644 --- a/src/Umbraco.Web/Models/ContentEditing/ContentTypeContainerConfiguration.cs +++ b/src/Umbraco.Web/Models/ContentEditing/ContentTypeContainerConfiguration.cs @@ -1,4 +1,5 @@ -using System.ComponentModel.DataAnnotations; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Runtime.Serialization; namespace Umbraco.Web.Models.ContentEditing @@ -20,20 +21,6 @@ namespace Umbraco.Web.Models.ContentEditing /// [DataMember(Name = "additionalColumnAliases")] public string AdditionalColumnAliases { get; set; } - - /// - /// The headers for the additional columns displayed after the node name in the list - /// - /// This isn't persisted, but is calculated from the aliases when passed to the UI - [DataMember(Name = "additionalColumnHeaders")] - public string AdditionalColumnHeaders { get; set; } - - /// - /// The localization keys for the additional columns displayed after the node name in the list - /// - /// This isn't persisted, but is calculated from the aliases when passed to the UI - [DataMember(Name = "additionalColumnLocalizationKeys")] - public string AdditionalColumnLocalizationKeys { get; set; } /// /// The default order by column for the list @@ -64,5 +51,25 @@ namespace Umbraco.Web.Models.ContentEditing /// [DataMember(Name = "allowBulkDelete")] public bool AllowBulkDelete { get; set; } + + /// + /// The column details for the additional columns displayed after the node name in the list + /// + /// This isn't persisted, but is calculated from the aliases when passed to the UI + [DataMember(Name = "additionalColumns")] + public IList AdditionalColumns { get; set; } + + [DataContract(Namespace = "")] + public class AdditionalColumnDetail + { + [DataMember(Name = "alias")] + public string Alias { get; set; } + + [DataMember(Name = "header")] + public string Header { get; set; } + + [DataMember(Name = "localizationKey")] + public string LocalizationKey { get; set; } + } } }