Skip to content

Commit 899d8a6

Browse files
authored
fix: only delete assignments on unshared board (#6932)
Signed-off-by: grnd-alt <github@belakkaf.net>
1 parent 9a2fcf6 commit 899d8a6

3 files changed

Lines changed: 19 additions & 7 deletions

File tree

lib/Db/AssignmentMapper.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,21 @@ public function findByParticipant(string $participant, $type = Assignment::TYPE_
7676
return $this->findEntities($qb);
7777
}
7878

79+
public function deleteByParticipantOnBoard(string $participant, int $boardId, $type = Assignment::TYPE_USER) {
80+
$qb = $this->db->getQueryBuilder();
81+
$cardIdQuery = $this->db->getQueryBuilder();
82+
$cardIdQuery->select('a.card_id')
83+
->from('deck_assigned_users', 'a')
84+
->innerJoin('a', 'deck_cards', 'c', 'c.id = a.card_id')
85+
->innerJoin('c', 'deck_stacks', 's', 's.id = c.stack_id')
86+
->where($cardIdQuery->expr()->eq('a.participant', $qb->createNamedParameter($participant, IQueryBuilder::PARAM_STR)))
87+
->andWhere($cardIdQuery->expr()->eq('s.board_id', $qb->createNamedParameter($boardId, IQueryBuilder::PARAM_INT)))
88+
->andWhere($cardIdQuery->expr()->eq('a.type', $qb->createNamedParameter($type, IQueryBuilder::PARAM_INT)));
89+
$qb->delete('deck_assigned_users')
90+
->where($qb->expr()->in('card_id', $qb->createFunction($cardIdQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY));
91+
$qb->executeStatement();
92+
}
93+
7994

8095
public function isOwner($userId, $id): bool {
8196
return $this->cardMapper->isOwner($userId, $id);

lib/Service/BoardService.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -444,10 +444,7 @@ public function deleteAcl(int $id): ?Acl {
444444
$acl = $this->aclMapper->find($id);
445445
$this->boardMapper->mapAcl($acl);
446446
if ($acl->getType() === Acl::PERMISSION_TYPE_USER) {
447-
$assignements = $this->assignedUsersMapper->findByParticipant($acl->getParticipant());
448-
foreach ($assignements as $assignement) {
449-
$this->assignedUsersMapper->delete($assignement);
450-
}
447+
$this->assignedUsersMapper->deleteByParticipantOnBoard($acl->getParticipant(), $acl->getBoardId());
451448
}
452449

453450
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_BOARD, $acl, ActivityManager::SUBJECT_BOARD_UNSHARE);

tests/unit/Service/BoardServiceTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -437,10 +437,10 @@ public function testDeleteAcl() {
437437
$assignment = new Assignment();
438438
$assignment->setParticipant('admin');
439439
$this->assignedUsersMapper->expects($this->once())
440-
->method('findByParticipant')
441-
->with('admin')
440+
->method('deleteByParticipantOnBoard')
441+
->with('admin', 123)
442442
->willReturn([$assignment]);
443-
$this->assignedUsersMapper->expects($this->once())
443+
$this->assignedUsersMapper->expects($this->never())
444444
->method('delete')
445445
->with($assignment);
446446
$this->aclMapper->expects($this->once())

0 commit comments

Comments
 (0)