diff --git a/js/controller/BoardController.js b/js/controller/BoardController.js index 69254c9c8..e3d4f91ec 100644 --- a/js/controller/BoardController.js +++ b/js/controller/BoardController.js @@ -214,7 +214,10 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St $scope.status.addSharee = null; }; $scope.aclDelete = function (acl) { - BoardService.deleteAcl(acl); + BoardService.deleteAcl(acl).then(function(data) { + $scope.loadDefault(); + $scope.refreshData(); + }); }; $scope.aclUpdate = function (acl) { BoardService.updateAcl(acl); diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 29b367db7..e8f89e6f7 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -25,6 +25,7 @@ use OCA\Deck\Db\Acl; use OCA\Deck\Db\AclMapper; +use OCA\Deck\Db\AssignedUsersMapper; use OCA\Deck\Notification\Notifier; use OCP\AppFramework\App; use OCA\Deck\Middleware\SharingMiddleware; @@ -65,12 +66,19 @@ public function __construct(array $urlParams = array()) { /** @var IUserManager $userManager */ $userManager = $server->getUserManager(); $userManager->listen('\OC\User', 'postDelete', function(IUser $user) use ($container) { + // delete existing acl entries for deleted user /** @var AclMapper $aclMapper */ $aclMapper = $container->query(AclMapper::class); $acls = $aclMapper->findByParticipant(Acl::PERMISSION_TYPE_USER, $user->getUID()); foreach ($acls as $acl) { $aclMapper->delete($acl); } + // delete existing user assignments + $assignmentMapper = $container->query(AssignedUsersMapper::class); + $assignments = $assignmentMapper->findByUserId($user->getUID()); + foreach ($assignments as $assignment) { + $assignmentMapper->delete($assignment); + } }); /** @var IUserManager $userManager */ diff --git a/lib/Db/AssignedUsersMapper.php b/lib/Db/AssignedUsersMapper.php index d2500043c..5edab10d0 100644 --- a/lib/Db/AssignedUsersMapper.php +++ b/lib/Db/AssignedUsersMapper.php @@ -50,6 +50,12 @@ public function find($cardId) { return $users; } + public function findByUserId($uid) { + $sql = 'SELECT * FROM `*PREFIX*deck_assigned_users` ' . + 'WHERE `participant` = ?'; + return $this->findEntities($sql, [$uid]); + } + public function isOwner($userId, $cardId) { return $this->cardMapper->isOwner($userId, $cardId); diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index 072f7c1f5..36be5c341 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -25,6 +25,7 @@ use OCA\Deck\Db\Acl; use OCA\Deck\Db\AclMapper; +use OCA\Deck\Db\AssignedUsersMapper; use OCA\Deck\Db\IPermissionMapper; use OCA\Deck\Db\Label; use OCA\Deck\Notification\NotificationHelper; @@ -43,6 +44,7 @@ class BoardService { private $l10n; private $permissionService; private $notificationHelper; + private $assignedUsersMapper; public function __construct( BoardMapper $boardMapper, @@ -50,7 +52,8 @@ public function __construct( LabelMapper $labelMapper, AclMapper $aclMapper, PermissionService $permissionService, - NotificationHelper $notificationHelper + NotificationHelper $notificationHelper, + AssignedUsersMapper $assignedUsersMapper ) { $this->boardMapper = $boardMapper; $this->labelMapper = $labelMapper; @@ -58,6 +61,7 @@ public function __construct( $this->l10n = $l10n; $this->permissionService = $permissionService; $this->notificationHelper = $notificationHelper; + $this->assignedUsersMapper = $assignedUsersMapper; } public function findAll($userInfo) { @@ -243,6 +247,12 @@ public function deleteAcl($id) { /** @var Acl $acl */ $acl = $this->aclMapper->find($id); $this->boardMapper->mapAcl($acl); + if ($acl->getType() === Acl::PERMISSION_TYPE_USER) { + $assignements = $this->assignedUsersMapper->findByUserId($acl->getParticipant()); + foreach($assignements as $assignement) { + $this->assignedUsersMapper->delete($assignement); + } + } return $this->aclMapper->delete($acl); } diff --git a/templates/part.board.sidebarView.php b/templates/part.board.sidebarView.php index 8d44d34dd..45c2d394c 100644 --- a/templates/part.board.sidebarView.php +++ b/templates/part.board.sidebarView.php @@ -44,7 +44,7 @@ {{ boardservice.getCurrent().owner.displayname }} -