From a8c22482f67a7440c88c7d450bba6fb04d2a71ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Tue, 10 Nov 2020 12:54:36 +0100 Subject: [PATCH] Make queries work with the new base mapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl fix: conflicts --- lib/Db/AclMapper.php | 9 ++++----- lib/Db/AssignmentMapper.php | 9 +++++---- lib/Service/BoardService.php | 16 +++++++++------- .../database/TransferOwnershipTest.php | 9 +++++---- 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/lib/Db/AclMapper.php b/lib/Db/AclMapper.php index 327d8aa34..c45a2d421 100644 --- a/lib/Db/AclMapper.php +++ b/lib/Db/AclMapper.php @@ -63,19 +63,18 @@ class AclMapper extends DeckMapper implements IPermissionMapper { * @param $newOwnerId * @return void */ - public function transferOwnership($ownerId, $newOwnerId) { + public function transferOwnership($boardId, $ownerId, $newOwnerId) { $params = [ - 'owner' => $ownerId, 'newOwner' => $newOwnerId, - 'type' => Acl::PERMISSION_TYPE_USER + 'type' => Acl::PERMISSION_TYPE_USER, + 'boardId' => $boardId ]; // Drop existing ACL rules for the new owner $sql = "DELETE FROM `{$this->tableName}` WHERE `participant` = :newOwner AND `type` = :type - AND EXISTS (SELECT `id` FROM (SELECT `id` FROM `{$this->tableName}` - WHERE `participant` = :newOwner AND `type` = :type) as tmp)"; + AND `board_id` = :boardId"; $stmt = $this->execute($sql, $params); $stmt->closeCursor(); } diff --git a/lib/Db/AssignmentMapper.php b/lib/Db/AssignmentMapper.php index 1c5e43819..a5000184d 100644 --- a/lib/Db/AssignmentMapper.php +++ b/lib/Db/AssignmentMapper.php @@ -157,16 +157,17 @@ class AssignmentMapper extends QBMapper implements IPermissionMapper { 'newOwner' => $newOwnerId, 'type' => AssignedUsers::TYPE_USER ]; - $sql = "DELETE FROM `{$this->tableName}` WHERE `participant` = :newOwner AND `type`= :type"; - $stmt = $this->execute($sql, $params); + $qb = $this->db->getQueryBuilder(); + $sql = "DELETE FROM `*PREFIX*{$this->tableName}` WHERE `participant` = :newOwner AND `type`= :type"; + $stmt = $this->db->executeQuery($sql, $params); $stmt->closeCursor(); $params = [ 'owner' => $ownerId, 'newOwner' => $newOwnerId, 'type' => AssignedUsers::TYPE_USER ]; - $sql = "UPDATE `{$this->tableName}` SET `participant` = :newOwner WHERE `participant` = :owner AND `type`= :type"; - $stmt = $this->execute($sql, $params); + $sql = "UPDATE `*PREFIX*{$this->tableName}` SET `participant` = :newOwner WHERE `participant` = :owner AND `type`= :type"; + $stmt = $this->db->executeQuery($sql, $params); $stmt->closeCursor(); } } diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index 89652f286..671354905 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -678,14 +678,12 @@ class BoardService { return $newBoard; } - /** - * @param $ownerId - * @param $newOwnerId - * @return void - */ - public function transferOwnership($owner, $newOwner) { + public function transferOwnership(string $owner, string $newOwner): void { + $boards = $this->boardMapper->findAllByUser($owner); + foreach ($boards as $board) { + $this->aclMapper->transferOwnership($board->getId(), $owner, $newOwner); + } $this->boardMapper->transferOwnership($owner, $newOwner); - $this->aclMapper->transferOwnership($owner, $newOwner); $this->assignedUsersMapper->transferOwnership($owner, $newOwner); $this->cardMapper->transferOwnership($owner, $newOwner); } @@ -721,4 +719,8 @@ class BoardService { public function getBoardUrl($endpoint) { return $this->urlGenerator->linkToRouteAbsolute('deck.page.index') . '#' . $endpoint; } + + private function clearBoardsCache() { + $this->boardsCache = null; + } } diff --git a/tests/integration/database/TransferOwnershipTest.php b/tests/integration/database/TransferOwnershipTest.php index 582fca85d..fbfab856f 100644 --- a/tests/integration/database/TransferOwnershipTest.php +++ b/tests/integration/database/TransferOwnershipTest.php @@ -82,6 +82,7 @@ class TransferOwnershipTest extends \Test\TestCase { */ public function testTransferBoardOwnership() { $this->boardService->transferOwnership(self::TEST_USER_1, self::TEST_USER_2); + $this->invokePrivate($this->boardService, 'clearBoardsCache'); $board = $this->boardService->find($this->board->getId()); $boardOwner = $board->getOwner(); $this->assertEquals(self::TEST_USER_2, $boardOwner); @@ -94,10 +95,10 @@ class TransferOwnershipTest extends \Test\TestCase { $this->boardService->transferOwnership(self::TEST_USER_1, self::TEST_USER_2); $board = $this->boardService->find($this->board->getId()); $acl = $board->getAcl(); - $isTargetInAcl = (bool)array_filter($acl, function ($item) { - return $item->getParticipant() === self::TEST_USER_2 && $item->getType() === Acl::PERMISSION_TYPE_USER; - }); - $this->assertTrue($isTargetInAcl); + // Check if old owner is no longer in ACL + $this->assertTrue((bool)array_filter($acl, function ($item) { + return $item->getParticipant() === self::TEST_USER_1 && $item->getType() === Acl::PERMISSION_TYPE_USER; + })); } /**