diff --git a/js/controller/BoardController.js b/js/controller/BoardController.js index bce35642f..9b5e2bc59 100644 --- a/js/controller/BoardController.js +++ b/js/controller/BoardController.js @@ -144,7 +144,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St }, function (error) { $scope.statusservice.setError('Error occured', error); }); - } + }; $scope.loadDefault = function () { StackService.fetchAll($scope.id).then(function (data) { @@ -203,10 +203,25 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St } CardService.delete(card.id).then(function () { StackService.removeCard(card); - $scope.loadDeletedCards(); + $scope.deletedCards.push(card); }); }); }; + + $scope.cardUndoDelete = function (deletedCard) { + CardService.undoDelete(deletedCard); + StackService.addCard(deletedCard); + $scope.removeFromDeletedCards(deletedCard); + }; + + $scope.removeFromDeletedCards = function(deletedCard) { + for(var i=0;i<$scope.deletedCards.length;i++) { + if($scope.deletedCards[i].id === deletedCard.id) { + $scope.deletedCards.splice(i, 1); + } + } + }; + $scope.cardArchive = function (card) { CardService.archive(card); StackService.removeCard(card); @@ -247,6 +262,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St // TODO: remove from cards }; $scope.labelCreate = function (label) { + alert(label); label.boardId = $scope.id; LabelService.create(label).then(function (data) { $scope.newStack.title = ''; diff --git a/js/service/ApiService.js b/js/service/ApiService.js index 2705739a7..e6af62f65 100644 --- a/js/service/ApiService.js +++ b/js/service/ApiService.js @@ -114,18 +114,18 @@ app.factory('ApiService', function ($http, $q) { }; - ApiService.prototype.softDelete = function (id) { - var deferred = $q.defer(); - var self = this; - - $http.delete(this.baseUrl + '/' + id).then(function (response) { - self.data[id].deletedAt = response.data.deletedAt; - deferred.resolve(response.data); - }, function (error) { - deferred.reject('Deleting ' + self.endpoint + ' failed'); - }); - return deferred.promise; - }; + ApiService.prototype.softDelete = function (id) { + var deferred = $q.defer(); + var self = this; + + $http.delete(this.baseUrl + '/' + id).then(function (response) { + self.data[id].deletedAt = response.data.deletedAt; + deferred.resolve(response.data); + }, function (error) { + deferred.reject('Deleting ' + self.endpoint + ' failed'); + }); + return deferred.promise; + }; // methods for managing data ApiService.prototype.clear = function () { diff --git a/js/service/CardService.js b/js/service/CardService.js index 614ef1e8e..840d21156 100644 --- a/js/service/CardService.js +++ b/js/service/CardService.js @@ -29,6 +29,11 @@ app.factory('CardService', function (ApiService, $http, $q) { CardService.prototype.delete = CardService.prototype.softDelete; + CardService.prototype.undoDelete = function(card) { + card.deletedAt = 0; + this.update(card); + }; + CardService.prototype.reorder = function (card, order) { var deferred = $q.defer(); var self = this; @@ -175,18 +180,15 @@ app.factory('CardService', function (ApiService, $http, $q) { }; CardService.prototype.fetchDeleted = function (boardId) { - var deferred = $q.defer(); var self = this; $http.get(this.baseUrl + '/deleted/' + boardId).then(function (response) { var objects = response.data; - return objects; - deferred.resolve(self.data); + deferred.resolve(objects); }, function (error) { deferred.reject('Fetching ' + self.endpoint + ' failed'); }); return deferred.promise; - }; diff --git a/lib/Controller/CardController.php b/lib/Controller/CardController.php index 1084ece45..22502f27e 100644 --- a/lib/Controller/CardController.php +++ b/lib/Controller/CardController.php @@ -89,10 +89,11 @@ class CardController extends Controller { * @param $order * @param $description * @param $duedate + * @param $deletedAt * @return \OCP\AppFramework\Db\Entity */ - public function update($id, $title, $stackId, $type, $order, $description, $duedate) { - return $this->cardService->update($id, $title, $stackId, $type, $order, $description, $this->userId, $duedate); + public function update($id, $title, $stackId, $type, $order, $description, $duedate, $deletedAt) { + return $this->cardService->update($id, $title, $stackId, $type, $order, $description, $this->userId, $duedate, $deletedAt); } /** diff --git a/lib/Db/CardMapper.php b/lib/Db/CardMapper.php index 7cb5d1f57..31f363398 100644 --- a/lib/Db/CardMapper.php +++ b/lib/Db/CardMapper.php @@ -120,15 +120,15 @@ class CardMapper extends DeckMapper implements IPermissionMapper { public function findAll($stackId, $limit = null, $offset = null) { $sql = 'SELECT * FROM `*PREFIX*deck_cards` - WHERE `stack_id` = ? AND NOT archived ORDER BY `order`'; + WHERE `stack_id` = ? AND NOT archived AND deleted_at = 0 ORDER BY `order`'; return $this->findEntities($sql, [$stackId], $limit, $offset); } public function findDeleted($boardId, $limit = null, $offset = null) { $sql = 'SELECT c.* FROM `*PREFIX*deck_cards` c INNER JOIN `*PREFIX*deck_stacks` s ON s.id = c.stack_id - WHERE `s`.`board_id` = ? AND NOT c.archived AND NOT c.deleted_at = 0 AND c.deleted_at <= ? ORDER BY `c`.`order`'; - return $this->findEntities($sql, [$boardId, time()], $limit, $offset); + WHERE `s`.`board_id` = ? AND NOT c.archived AND NOT c.deleted_at = 0 ORDER BY `c`.`order`'; + return $this->findEntities($sql, [$boardId], $limit, $offset); } public function findAllArchived($stackId, $limit = null, $offset = null) { diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index 3f9a905cc..ab6baf225 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -256,4 +256,4 @@ class BoardService { return $this->aclMapper->delete($acl); } -} \ No newline at end of file +} diff --git a/lib/Service/CardService.php b/lib/Service/CardService.php index 8b040f4e7..723bc43cd 100644 --- a/lib/Service/CardService.php +++ b/lib/Service/CardService.php @@ -30,6 +30,7 @@ use OCA\Deck\Db\CardMapper; use OCA\Deck\Db\Acl; use OCA\Deck\Db\StackMapper; use OCA\Deck\Notification\NotificationHelper; +use OCA\Deck\Db\BoardMapper; use OCA\Deck\NotFoundException; use OCA\Deck\StatusException; @@ -38,6 +39,7 @@ class CardService { private $cardMapper; private $stackMapper; + private $boardMapper; private $permissionService; private $boardService; private $notificationHelper; @@ -45,9 +47,17 @@ class CardService { private $attachmentService; private $currentUser; - public function __construct(CardMapper $cardMapper, StackMapper $stackMapper, PermissionService $permissionService, BoardService $boardService, NotificationHelper $notificationHelper, AssignedUsersMapper $assignedUsersMapper, AttachmentService $attachmentService, $userId) { + public function __construct( + CardMapper $cardMapper, + StackMapper $stackMapper, + BoardMapper $boardMapper, + PermissionService $permissionService, + BoardService $boardService, + AssignedUsersMapper $assignedUsersMapper, + AttachmentService $attachmentService) { $this->cardMapper = $cardMapper; $this->stackMapper = $stackMapper; + $this->boardMapper = $boardMapper; $this->permissionService = $permissionService; $this->boardService = $boardService; $this->notificationHelper = $notificationHelper; @@ -57,6 +67,7 @@ class CardService { } public function fetchDeleted($boardId) { + $this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ); return $this->cardMapper->findDeleted($boardId); } @@ -99,7 +110,7 @@ class CardService { return $card; } - public function update($id, $title, $stackId, $type, $order, $description, $owner, $duedate) { + public function update($id, $title, $stackId, $type, $order, $description, $owner, $duedate, $deletedAt) { $this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT); if ($this->boardService->isArchived($this->cardMapper, $id)) { throw new StatusException('Operation not allowed. This board is archived.'); @@ -115,6 +126,7 @@ class CardService { $card->setOwner($owner); $card->setDescription($description); $card->setDuedate($duedate); + $card->setDeletedAt($deletedAt); return $this->cardMapper->update($card); } diff --git a/lib/Service/StackService.php b/lib/Service/StackService.php index 30e40cc6e..581543623 100644 --- a/lib/Service/StackService.php +++ b/lib/Service/StackService.php @@ -154,4 +154,4 @@ class StackService { return $result; } -} \ No newline at end of file +} diff --git a/templates/part.board.sidebarView.php b/templates/part.board.sidebarView.php index b168d0cfa..4e92bb427 100644 --- a/templates/part.board.sidebarView.php +++ b/templates/part.board.sidebarView.php @@ -123,8 +123,13 @@