diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/media.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/media.resource.js index fc138fe28c..ceceebacc3 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/media.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/media.resource.js @@ -88,6 +88,37 @@ function mediaResource($q, $http, umbDataFormatter, umbRequestHelper) { [{ id: id }])), 'Failed to retreive data for media id ' + id); }, + + /** + * @ngdoc method + * @name umbraco.resources.mediaResource#deleteById + * @methodOf umbraco.resources.mediaResource + * + * @description + * Deletes a media item with a given id + * + * ##usage + *
+         * mediaResource.deleteById(1234)
+         *    .then(function() {
+         *        alert('its gone!');
+         *    });
+         * 
+ * + * @param {Int} id id of media item to delete + * @returns {Promise} resourcePromise object. + * + */ + deleteById: function(id) { + return umbRequestHelper.resourcePromise( + $http.delete( + umbRequestHelper.getApiUrl( + "mediaApiBaseUrl", + "DeleteById", + [{ id: id }])), + 'Failed to delete item ' + id); + }, + /** * @ngdoc method * @name umbraco.resources.mediaResource#getByIds diff --git a/src/Umbraco.Web.UI.Client/src/views/content/delete.html b/src/Umbraco.Web.UI.Client/src/views/content/delete.html index 9b8aed9e2e..d3e44fce25 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/delete.html +++ b/src/Umbraco.Web.UI.Client/src/views/content/delete.html @@ -1,6 +1,10 @@
+

+ Are you sure you want to delete {{currentNode.name}} ? +

+ diff --git a/src/Umbraco.Web.UI.Client/src/views/directives/umb-confirm.html b/src/Umbraco.Web.UI.Client/src/views/directives/umb-confirm.html index 1bb51d078e..d9f4f18e53 100644 --- a/src/Umbraco.Web.UI.Client/src/views/directives/umb-confirm.html +++ b/src/Umbraco.Web.UI.Client/src/views/directives/umb-confirm.html @@ -1,13 +1,6 @@

{{caption}}

- - - + + Cancel + Ok
\ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/media/delete.html b/src/Umbraco.Web.UI.Client/src/views/media/delete.html new file mode 100644 index 0000000000..dcbedf8ed7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/media/delete.html @@ -0,0 +1,10 @@ +
+
+ +

+ Are you sure you want to delete {{currentNode.name}} ? +

+ + +
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/media/media.delete.controller.js b/src/Umbraco.Web.UI.Client/src/views/media/media.delete.controller.js new file mode 100644 index 0000000000..3b06e080bc --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/media/media.delete.controller.js @@ -0,0 +1,43 @@ +/** + * @ngdoc controller + * @name Umbraco.Editors.ContentDeleteController + * @function + * + * @description + * The controller for deleting content + */ +function MediaDeleteController($scope, mediaResource, treeService, navigationService) { + + $scope.performDelete = function() { + + //mark it for deletion (used in the UI) + $scope.currentNode.loading = true; + + mediaResource.deleteById($scope.currentNode.id).then(function () { + $scope.currentNode.loading = false; + + //get the root node before we remove it + var rootNode = treeService.getTreeRoot($scope.currentNode); + + //TODO: Need to sync tree, etc... + treeService.removeNode($scope.currentNode); + + //ensure the recycle bin has child nodes now + var recycleBin = treeService.getDescendantNode(rootNode, -21); + if(recycleBin){ + recycleBin.hasChildren = true; + } + + navigationService.hideMenu(); + + },function() { + $scope.currentNode.loading = false; + }); + }; + + $scope.cancel = function() { + navigationService.hideDialog(); + }; +} + +angular.module("umbraco").controller("Umbraco.Editors.Media.DeleteController", MediaDeleteController); diff --git a/src/Umbraco.Web/Editors/MediaController.cs b/src/Umbraco.Web/Editors/MediaController.cs index d1e72831ad..fc4c83b416 100644 --- a/src/Umbraco.Web/Editors/MediaController.cs +++ b/src/Umbraco.Web/Editors/MediaController.cs @@ -126,6 +126,40 @@ namespace Umbraco.Web.Editors .Select(Mapper.Map>); } + /// + /// Moves an item to the recycle bin, if it is already there then it will permanently delete it + /// + /// + /// + /// + /// The CanAccessContentAuthorize attribute will deny access to this method if the current user + /// does not have Delete access to this node. + /// + + [EnsureUserPermissionForMedia("id")] + public HttpResponseMessage DeleteById(int id) + { + //TODO: We need to check if the user is allowed to do this! + + var foundMedia = Services.MediaService.GetById(id); + if (foundMedia == null) + { + return HandleContentNotFound(id, false); + } + + //if the current item is in the recycle bin + if (foundMedia.IsInRecycleBin() == false) + { + Services.MediaService.MoveToRecycleBin(foundMedia, UmbracoUser.Id); + } + else + { + Services.MediaService.Delete(foundMedia, UmbracoUser.Id); + } + + return Request.CreateResponse(HttpStatusCode.OK); + } + /// /// Saves content ///