From 2f088d0562ad998120fd512e844545ee834da352 Mon Sep 17 00:00:00 2001 From: Lars-Erik Aabech Date: Wed, 23 Aug 2017 18:18:00 +0200 Subject: [PATCH 1/7] Renaming document type containers --- .../Services/ContentTypeService.cs | 25 +++++++++++ .../Services/IContentTypeService.cs | 1 + .../common/resources/contenttype.resource.js | 11 +++++ .../views/documenttypes/rename.controller.js | 44 +++++++++++++++++++ .../src/views/documenttypes/rename.html | 21 +++++++++ .../Editors/ContentTypeController.cs | 9 ++++ .../Trees/ContentTypeTreeController.cs | 8 +++- 7 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js create mode 100644 src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html diff --git a/src/Umbraco.Core/Services/ContentTypeService.cs b/src/Umbraco.Core/Services/ContentTypeService.cs index 895d97f658..09608fa8ff 100644 --- a/src/Umbraco.Core/Services/ContentTypeService.cs +++ b/src/Umbraco.Core/Services/ContentTypeService.cs @@ -76,6 +76,31 @@ namespace Umbraco.Core.Services } } + public Attempt> RenameContentTypeContainer(int id, string name, int userId = 0) + { + var evtMsgs = EventMessagesFactory.Get(); + var uow = UowProvider.GetUnitOfWork(); + using (var repo = RepositoryFactory.CreateEntityContainerRepository(uow, Constants.ObjectTypes.DocumentTypeContainerGuid)) + { + try + { + var container = repo.Get(id); + + container.Name = name; + + repo.AddOrUpdate(container); + uow.Commit(); + //TODO: Audit trail ? (yep, I'm sure, but there's nothing to duplicate ;) ) + + return Attempt.Succeed(new OperationStatus(container, OperationStatusType.Success, evtMsgs)); + } + catch (Exception ex) + { + return Attempt.Fail(new OperationStatus(null, OperationStatusType.FailedExceptionThrown, evtMsgs), ex); + } + } + } + public Attempt> CreateMediaTypeContainer(int parentId, string name, int userId = 0) { var evtMsgs = EventMessagesFactory.Get(); diff --git a/src/Umbraco.Core/Services/IContentTypeService.cs b/src/Umbraco.Core/Services/IContentTypeService.cs index f470bbce05..de7424210d 100644 --- a/src/Umbraco.Core/Services/IContentTypeService.cs +++ b/src/Umbraco.Core/Services/IContentTypeService.cs @@ -29,6 +29,7 @@ namespace Umbraco.Core.Services Attempt ValidateComposition(IContentTypeComposition compo); Attempt> CreateContentTypeContainer(int parentId, string name, int userId = 0); + Attempt> RenameContentTypeContainer(int id, string name, int userId = 0); Attempt> CreateMediaTypeContainer(int parentId, string name, int userId = 0); Attempt SaveContentTypeContainer(EntityContainer container, int userId = 0); Attempt SaveMediaTypeContainer(EntityContainer container, int userId = 0); 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 365b4dfd44..8bfcdfcc5a 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 @@ -266,6 +266,17 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter) { $http.post(umbRequestHelper.getApiUrl("contentTypeApiBaseUrl", "PostCreateContainer", { parentId: parentId, name: name })), 'Failed to create a folder under parent id ' + parentId); + }, + + renameContainer: function(id, name) { + + return umbRequestHelper.resourcePromise( + $http.post(umbRequestHelper.getApiUrl("contentTypeApiBaseUrl", + "PostRenameContainer", + { id: id, name: name })), + "Failed to rename the folder with id " + id + ); + } }; diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js new file mode 100644 index 0000000000..6aee713aa4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js @@ -0,0 +1,44 @@ +angular.module("umbraco") + .controller("Umbraco.Editors.DocumentTypes.RenameController", + [ + "$scope", + "contentTypeResource", + "navigationService", + "notificationsService", + "localizationService", + function (scope, contentTypeResource, navigationService, notificationsService, localizationService) { + scope.strings = { + + } + + scope.model = { + folderName: scope.currentNode.name + } + + scope.renameContainer = function () { + + contentTypeResource.renameContainer(scope.currentNode.id, scope.model.folderName) + .then(function() { + + notificationsService.showNotification({ + type: 0, + header: "Renamed", + message: scope.currentNode.name + " was renamed to " + scope.model.folderName + }); + + navigationService.hideMenu(); + + }, function (err) { + scope.error = err; + + if (angular.isArray(err.data.notifications)) { + for (var i = 0; i < err.data.notifications.length; i++) { + notificationsService.showNotification(err.data.notifications[i]); + } + } + }); + + } + + } + ]); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html new file mode 100644 index 0000000000..7aaa2cf572 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html @@ -0,0 +1,21 @@ + diff --git a/src/Umbraco.Web/Editors/ContentTypeController.cs b/src/Umbraco.Web/Editors/ContentTypeController.cs index f0e67ac14b..8581e28d6d 100644 --- a/src/Umbraco.Web/Editors/ContentTypeController.cs +++ b/src/Umbraco.Web/Editors/ContentTypeController.cs @@ -182,6 +182,15 @@ namespace Umbraco.Web.Editors : Request.CreateNotificationValidationErrorResponse(result.Exception.Message); } + public HttpResponseMessage PostRenameContainer(int id, string name) + { + var result = Services.ContentTypeService.RenameContentTypeContainer(id, name, Security.CurrentUser.Id); + + return result + ? Request.CreateResponse(HttpStatusCode.OK, result.Result) //return the id + : Request.CreateNotificationValidationErrorResponse(result.Exception.Message); + } + public DocumentTypeDisplay PostSave(DocumentTypeSave contentTypeSave) { var savedCt = PerformPostSave( diff --git a/src/Umbraco.Web/Trees/ContentTypeTreeController.cs b/src/Umbraco.Web/Trees/ContentTypeTreeController.cs index 7f3a6dfddf..1b1d9d9b76 100644 --- a/src/Umbraco.Web/Trees/ContentTypeTreeController.cs +++ b/src/Umbraco.Web/Trees/ContentTypeTreeController.cs @@ -100,7 +100,13 @@ namespace Umbraco.Web.Trees //can delete doc type menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionDelete.Instance.Alias)), true); } - menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionRefresh.Instance.Alias)), true); + menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionRefresh.Instance.Alias)), true); + + var menuItem = new MenuItem( + "rename", + Services.TextService.Localize(String.Format("actions/{0}", "rename")) + ); + menu.Items.Add(menuItem); } else { From 0a7bcbcc696c8244a76fdf8523f6d7603998fc9a Mon Sep 17 00:00:00 2001 From: Lars-Erik Aabech Date: Wed, 23 Aug 2017 18:18:27 +0200 Subject: [PATCH 2/7] Getting localization fixed - trying to tokenize --- .../views/documenttypes/rename.controller.js | 29 +++++++++++++------ .../src/views/documenttypes/rename.html | 2 +- src/Umbraco.Web.UI/umbraco/config/lang/en.xml | 5 ++++ .../Trees/ContentTypeTreeController.cs | 8 ++--- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js index 6aee713aa4..81107c9870 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js @@ -7,9 +7,9 @@ "notificationsService", "localizationService", function (scope, contentTypeResource, navigationService, notificationsService, localizationService) { - scope.strings = { - - } + var notificationHeader; + localizationService.localize("general_renamed") + .then(function(s) { notificationHeader = s; }); scope.model = { folderName: scope.currentNode.name @@ -19,12 +19,23 @@ contentTypeResource.renameContainer(scope.currentNode.id, scope.model.folderName) .then(function() { - - notificationsService.showNotification({ - type: 0, - header: "Renamed", - message: scope.currentNode.name + " was renamed to " + scope.model.folderName - }); + + localizationService.localize("renamecontainer_folderWasRenamed", + scope.currentNode.name, + scope.model.folderName) + .then(function(msg) { + notificationsService.showNotification({ + type: 0, + header: notificationHeader, + message: msg + }); + }); + + //notificationsService.showNotification({ + // type: 0, + // header: notificationHeader, + // message: scope.currentNode.name + " was renamed to " + scope.model.folderName + //}); navigationService.hideMenu(); diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html index 7aaa2cf572..fb3dcb5b07 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html @@ -10,7 +10,7 @@

{{error.data.message}}

- + diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml index 5d0779f8b6..218a5962cd 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml @@ -27,6 +27,7 @@ Unpublish Reload Republish entire site + Rename Restore Set permissions for the page %0% Choose where to move @@ -424,6 +425,10 @@ Create custom list view Remove custom list view + + Enter a new folder name here + %0% was renamed to %1% + Add prevalue Database datatype diff --git a/src/Umbraco.Web/Trees/ContentTypeTreeController.cs b/src/Umbraco.Web/Trees/ContentTypeTreeController.cs index 1b1d9d9b76..986f40f9c9 100644 --- a/src/Umbraco.Web/Trees/ContentTypeTreeController.cs +++ b/src/Umbraco.Web/Trees/ContentTypeTreeController.cs @@ -102,10 +102,10 @@ namespace Umbraco.Web.Trees } menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionRefresh.Instance.Alias)), true); - var menuItem = new MenuItem( - "rename", - Services.TextService.Localize(String.Format("actions/{0}", "rename")) - ); + var menuItem = new MenuItem("rename", Services.TextService.Localize(String.Format("actions/{0}", "rename"))) + { + Icon = "icon icon-edit" + }; menu.Items.Add(menuItem); } else From 00d00dac260c135619a03dfd83abf3d1d5470569 Mon Sep 17 00:00:00 2001 From: Lars-Erik Aabech Date: Thu, 3 Nov 2016 14:27:18 +0100 Subject: [PATCH 3/7] Localized for english --- .../views/documenttypes/rename.controller.js | 54 +++++++++++-------- src/Umbraco.Web.UI/umbraco/config/lang/en.xml | 1 + 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js index 81107c9870..c75023f60a 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js @@ -8,7 +8,36 @@ "localizationService", function (scope, contentTypeResource, navigationService, notificationsService, localizationService) { var notificationHeader; - localizationService.localize("general_renamed") + + function reportSuccessAndClose() { + var lastComma = scope.currentNode.path.lastIndexOf(","), + path = lastComma === -1 + ? scope.currentNode.path + : scope.currentNode.path.substring(0, lastComma - 1); + + navigationService.syncTree({ + tree: "documenttypes", + path: path, + forceReload: true, + activate: true + }); + + localizationService.localize( + "renamecontainer_folderWasRenamed", + [scope.currentNode.name, scope.model.folderName]) + .then(function (msg) { + notificationsService.showNotification({ + type: 0, + header: notificationHeader, + message: msg + }); + }); + + navigationService.hideMenu(); + } + + + localizationService.localize("renamecontainer_renamed") .then(function(s) { notificationHeader = s; }); scope.model = { @@ -18,28 +47,7 @@ scope.renameContainer = function () { contentTypeResource.renameContainer(scope.currentNode.id, scope.model.folderName) - .then(function() { - - localizationService.localize("renamecontainer_folderWasRenamed", - scope.currentNode.name, - scope.model.folderName) - .then(function(msg) { - notificationsService.showNotification({ - type: 0, - header: notificationHeader, - message: msg - }); - }); - - //notificationsService.showNotification({ - // type: 0, - // header: notificationHeader, - // message: scope.currentNode.name + " was renamed to " + scope.model.folderName - //}); - - navigationService.hideMenu(); - - }, function (err) { + .then(reportSuccessAndClose, function (err) { scope.error = err; if (angular.isArray(err.data.notifications)) { diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml index 218a5962cd..f05086f4c3 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml @@ -426,6 +426,7 @@ Remove custom list view + Renamed Enter a new folder name here %0% was renamed to %1% From c116da7545e718307f19e307a8339681d675f79e Mon Sep 17 00:00:00 2001 From: Lars-Erik Aabech Date: Thu, 3 Nov 2016 15:48:16 +0100 Subject: [PATCH 4/7] Also solves U4-9143 --- .../Services/ContentTypeService.cs | 12 ++++++- .../Services/IContentTypeService.cs | 1 + .../common/resources/mediatype.resource.js | 11 ++++++ .../views/documenttypes/rename.controller.js | 13 +++---- .../src/views/documenttypes/rename.html | 35 ++++++++++--------- .../src/views/mediatypes/rename.html | 23 ++++++++++++ .../Editors/MediaTypeController.cs | 10 ++++++ .../Trees/ContentTypeTreeController.cs | 5 ++- .../Trees/MediaTypeTreeController.cs | 5 +++ 9 files changed, 89 insertions(+), 26 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/views/mediatypes/rename.html diff --git a/src/Umbraco.Core/Services/ContentTypeService.cs b/src/Umbraco.Core/Services/ContentTypeService.cs index 09608fa8ff..1461d75e72 100644 --- a/src/Umbraco.Core/Services/ContentTypeService.cs +++ b/src/Umbraco.Core/Services/ContentTypeService.cs @@ -77,10 +77,15 @@ namespace Umbraco.Core.Services } public Attempt> RenameContentTypeContainer(int id, string name, int userId = 0) + { + return RenameTypeContainer(id, name, Constants.ObjectTypes.DocumentTypeContainerGuid); + } + + private Attempt> RenameTypeContainer(int id, string name, Guid typeCode) { var evtMsgs = EventMessagesFactory.Get(); var uow = UowProvider.GetUnitOfWork(); - using (var repo = RepositoryFactory.CreateEntityContainerRepository(uow, Constants.ObjectTypes.DocumentTypeContainerGuid)) + using (var repo = RepositoryFactory.CreateEntityContainerRepository(uow, typeCode)) { try { @@ -139,6 +144,11 @@ namespace Umbraco.Core.Services } } + public Attempt> RenameMediaTypeContainer(int id, string name, int userId = 0) + { + return RenameTypeContainer(id, name, Constants.ObjectTypes.MediaTypeContainerGuid); + } + public Attempt SaveContentTypeContainer(EntityContainer container, int userId = 0) { return SaveContainer( diff --git a/src/Umbraco.Core/Services/IContentTypeService.cs b/src/Umbraco.Core/Services/IContentTypeService.cs index de7424210d..0e80526b93 100644 --- a/src/Umbraco.Core/Services/IContentTypeService.cs +++ b/src/Umbraco.Core/Services/IContentTypeService.cs @@ -308,5 +308,6 @@ namespace Umbraco.Core.Services Attempt> MoveContentType(IContentType toMove, int containerId); Attempt> CopyMediaType(IMediaType toCopy, int containerId); Attempt> CopyContentType(IContentType toCopy, int containerId); + Attempt> RenameMediaTypeContainer(int id, string name, int userId = 0); } } \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js index 117edef77f..06df2e0695 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js @@ -203,6 +203,17 @@ function mediaTypeResource($q, $http, umbRequestHelper, umbDataFormatter) { "PostCreateContainer", { parentId: parentId, name: name })), 'Failed to create a folder under parent id ' + parentId); + }, + + renameContainer: function (id, name) { + + return umbRequestHelper.resourcePromise( + $http.post(umbRequestHelper.getApiUrl("mediaTypeApiBaseUrl", + "PostRenameContainer", + { id: id, name: name })), + "Failed to rename the folder with id " + id + ); + } }; diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js index c75023f60a..fd0445965e 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.controller.js @@ -1,13 +1,14 @@ angular.module("umbraco") - .controller("Umbraco.Editors.DocumentTypes.RenameController", + .controller("Umbraco.Editors.ContentTypeContainers.RenameController", [ "$scope", - "contentTypeResource", + "$injector", "navigationService", "notificationsService", "localizationService", - function (scope, contentTypeResource, navigationService, notificationsService, localizationService) { - var notificationHeader; + function (scope, injector, navigationService, notificationsService, localizationService) { + var notificationHeader, + resource = injector.get(scope.resource); function reportSuccessAndClose() { var lastComma = scope.currentNode.path.lastIndexOf(","), @@ -16,7 +17,7 @@ : scope.currentNode.path.substring(0, lastComma - 1); navigationService.syncTree({ - tree: "documenttypes", + tree: scope.tree, path: path, forceReload: true, activate: true @@ -46,7 +47,7 @@ scope.renameContainer = function () { - contentTypeResource.renameContainer(scope.currentNode.id, scope.model.folderName) + resource.renameContainer(scope.currentNode.id, scope.model.folderName) .then(reportSuccessAndClose, function (err) { scope.error = err; diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html index fb3dcb5b07..60509513f7 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/rename.html @@ -1,21 +1,24 @@ -