From 2ee8f9dea2c3cb9ddc25db36094b03acdfd7e013 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Sat, 6 Apr 2019 08:00:44 +0200 Subject: [PATCH] Use the content type model when creating a "matching template" --- .../common/resources/contenttype.resource.js | 6 ++++ .../views/templates/templates.controller.js | 33 +++++++------------ .../Editors/ContentTypeController.cs | 17 ++++++++++ 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js index 86867ccff9..4e4c8d2eb5 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js @@ -344,6 +344,12 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca $http.post(umbRequestHelper.getApiUrl("contentTypeApiBaseUrl", "Import", { file: file })), "Failed to import document type " + file ); + }, + + createDefaultTemplate: function (id) { + return umbRequestHelper.resourcePromise( + $http.post(umbRequestHelper.getApiUrl("contentTypeApiBaseUrl", "PostCreateDefaultTemplate", { id: id })), + 'Failed to create default template for content type with id ' + id); } }; } diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/views/templates/templates.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/views/templates/templates.controller.js index 1d825fdf26..a147da3afb 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/views/templates/templates.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/views/templates/templates.controller.js @@ -9,7 +9,7 @@ (function () { 'use strict'; - function TemplatesController($scope, entityResource, contentTypeHelper, templateResource, $routeParams) { + function TemplatesController($scope, entityResource, contentTypeHelper, templateResource, contentTypeResource, $routeParams) { /* ----------- SCOPE VARIABLES ----------- */ @@ -48,34 +48,25 @@ vm.createTemplateButtonState = "busy"; - templateResource.getScaffold(-1).then(function (template) { - - template.alias = $scope.model.alias; - template.name = $scope.model.name; - - templateResource.save(template).then(function (savedTemplate) { - - // add icon - savedTemplate.icon = "icon-layout"; + contentTypeResource.createDefaultTemplate($scope.model.id).then(function (savedTemplate) { + // add icon + savedTemplate.icon = "icon-layout"; - vm.availableTemplates.push(savedTemplate); - vm.canCreateTemplate = false; + vm.availableTemplates.push(savedTemplate); + vm.canCreateTemplate = false; - $scope.model.allowedTemplates.push(savedTemplate); + $scope.model.allowedTemplates.push(savedTemplate); - if ($scope.model.defaultTemplate === null) { - $scope.model.defaultTemplate = savedTemplate; - } + if ($scope.model.defaultTemplate === null) { + $scope.model.defaultTemplate = savedTemplate; + } - vm.createTemplateButtonState = "success"; - - }, function() { - vm.createTemplateButtonState = "error"; - }); + vm.createTemplateButtonState = "success"; }, function() { vm.createTemplateButtonState = "error"; }); + }; function checkIfTemplateExists() { diff --git a/src/Umbraco.Web/Editors/ContentTypeController.cs b/src/Umbraco.Web/Editors/ContentTypeController.cs index ede480e29a..f95a4da30e 100644 --- a/src/Umbraco.Web/Editors/ContentTypeController.cs +++ b/src/Umbraco.Web/Editors/ContentTypeController.cs @@ -322,6 +322,23 @@ namespace Umbraco.Web.Editors return display; } + public TemplateDisplay PostCreateDefaultTemplate(int id) + { + var contentType = Services.ContentTypeService.Get(id); + if (contentType == null) + { + throw new NullReferenceException("No content type found with id " + id); + } + + var template = CreateTemplateForContentType(contentType.Alias, contentType.Name); + if (template == null) + { + throw new NullReferenceException("Could not create default template for content type with id " + id); + } + + return Mapper.Map(template); + } + private ITemplate CreateTemplateForContentType(string contentTypeAlias, string contentTypeName) { var template = Services.FileService.GetTemplate(contentTypeAlias);