diff --git a/lib/DAV/DeckCalendarBackend.php b/lib/DAV/DeckCalendarBackend.php index 6d3ca0239..a1849abe9 100644 --- a/lib/DAV/DeckCalendarBackend.php +++ b/lib/DAV/DeckCalendarBackend.php @@ -59,7 +59,7 @@ class DeckCalendarBackend { } public function getBoards(): array { - return $this->boardService->findAll(); + return $this->boardService->findAll(-1, null, false); } public function getBoard(int $id): Board { diff --git a/lib/Db/BoardMapper.php b/lib/Db/BoardMapper.php index f122e05a4..49cfebb88 100644 --- a/lib/Db/BoardMapper.php +++ b/lib/Db/BoardMapper.php @@ -93,10 +93,18 @@ class BoardMapper extends DeckMapper implements IPermissionMapper { * @param null $offset * @return array */ - public function findAllByUser($userId, $limit = null, $offset = null, $since = -1) { - $sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ? UNION ' . + public function findAllByUser($userId, $limit = null, $offset = null, $since = -1, $includeArchived = true) { + // FIXME: One moving to QBMapper we should allow filtering the boards probably by method chaining for additional where clauses + $sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ?'; + if (!$includeArchived) { + $sql .= ' AND NOT archived'; + } + $sql .= ' UNION ' . 'SELECT boards.id, title, owner, color, archived, deleted_at, 1 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' . 'JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE acl.participant=? AND acl.type=? AND boards.owner != ? AND last_modified > ?'; + if (!$includeArchived) { + $sql .= ' AND NOT archived'; + } $entries = $this->findEntities($sql, [$userId, $since, $userId, Acl::PERMISSION_TYPE_USER, $userId, $since], $limit, $offset); /* @var Board $entry */ foreach ($entries as $entry) { @@ -120,7 +128,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper { * @param null $offset * @return array */ - public function findAllByGroups($userId, $groups, $limit = null, $offset = null) { + public function findAllByGroups($userId, $groups, $limit = null, $offset = null, $since = -1,$includeArchived = true) { if (count($groups) <= 0) { return []; } @@ -132,7 +140,10 @@ class BoardMapper extends DeckMapper implements IPermissionMapper { $sql .= ' OR '; } } - $sql .= ');'; + $sql .= ')'; + if (!$includeArchived) { + $sql .= ' AND NOT archived'; + } $entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_GROUP], $groups), $limit, $offset); /* @var Board $entry */ foreach ($entries as $entry) { @@ -142,7 +153,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper { return $entries; } - public function findAllByCircles($userId, $limit = null, $offset = null) { + public function findAllByCircles($userId, $limit = null, $offset = null, $since = -1,$includeArchived = true) { if (!$this->circlesEnabled) { return []; } @@ -161,7 +172,10 @@ class BoardMapper extends DeckMapper implements IPermissionMapper { $sql .= ' OR '; } } - $sql .= ');'; + $sql .= ')'; + if (!$includeArchived) { + $sql .= ' AND NOT archived'; + } $entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_CIRCLE], $circles), $limit, $offset); /* @var Board $entry */ foreach ($entries as $entry) { diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index 91c0999bf..477add264 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -107,11 +107,11 @@ class BoardService { $this->userId = $userId; } - public function getUserBoards(int $since = -1): array { + public function getUserBoards(int $since = -1, $includeArchived = true): array { $userInfo = $this->getBoardPrerequisites(); - $userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since); - $groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since); - $circleBoards = $this->boardMapper->findAllByCircles($userInfo['user'], null, null, $since); + $userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since, $includeArchived); + $groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since, $includeArchived); + $circleBoards = $this->boardMapper->findAllByCircles($userInfo['user'], null, null, $since, $includeArchived); $mergedBoards = array_merge($userBoards, $groupBoards, $circleBoards); $result = []; /** @var Board $item */ @@ -125,11 +125,11 @@ class BoardService { /** * @return array */ - public function findAll($since = -1, $details = null) { + public function findAll($since = -1, $details = null, $includeArchived = true) { if ($this->boardsCache) { return $this->boardsCache; } - $complete = $this->getUserBoards($since); + $complete = $this->getUserBoards($since, $includeArchived); $result = []; /** @var Board $item */ foreach ($complete as &$item) { diff --git a/package-lock.json b/package-lock.json index 88c8b2b63..2c85dde7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3631,9 +3631,9 @@ } }, "@nextcloud/vue": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-2.6.5.tgz", - "integrity": "sha512-ZeY4n/TJ0cRu/iDgLGCwFSksvStMO+fAeJfANwjp52LjrpFXuJjxqG8ZKBdr7zJewj/yTOq6k0wMDnyBFTgnXA==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-2.6.8.tgz", + "integrity": "sha512-9yi9V4gX4Y1uxh2hNxCAlTHaS9zolzAy7x1sowII/WZfxMysF/yIGmEsnYGyz6CZ5eYCzxNUgrU5p/HQ21/09Q==", "requires": { "@nextcloud/auth": "^1.2.3", "@nextcloud/axios": "^1.3.2", @@ -7434,9 +7434,9 @@ "dev": true }, "emoji-mart-vue-fast": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-7.0.4.tgz", - "integrity": "sha512-VZuyclCe7ZNPhSvt7WT258MscqRBZTB2Is/7vBilCXgpiZqByaA4AhM1xdIIZZik/aA+5BQiZVmbsDK0jk78Eg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-7.0.5.tgz", + "integrity": "sha512-+ayg30hhxqqM9oMtN9uUG470hT9gtOdFenByJJBm3XTfzI2QMVJ69euwk+xF55OphLfKZxQG7mnVz13lDOjb3g==", "requires": { "@babel/polyfill": "7.2.5", "@babel/runtime": "7.3.4", diff --git a/package.json b/package.json index 84aed08d9..c8810d012 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@nextcloud/l10n": "^1.4.1", "@nextcloud/moment": "^1.1.1", "@nextcloud/router": "^1.2.0", - "@nextcloud/vue": "^2.6.5", + "@nextcloud/vue": "^2.6.8", "@nextcloud/vue-dashboard": "^1.0.1", "blueimp-md5": "^2.18.0", "dompurify": "^2.1.1", diff --git a/src/components/board/SharingTabSidebar.vue b/src/components/board/SharingTabSidebar.vue index ec9f4aed3..c23fc0a13 100644 --- a/src/components/board/SharingTabSidebar.vue +++ b/src/components/board/SharingTabSidebar.vue @@ -119,7 +119,7 @@ export default { sharee.value = item.value return sharee - }) + }).slice(0, 10) }, unallocatedSharees() { return this.sharees.filter((sharee) => { diff --git a/src/components/cards/CardItem.vue b/src/components/cards/CardItem.vue index 92990445f..a1ff4947d 100644 --- a/src/components/cards/CardItem.vue +++ b/src/components/cards/CardItem.vue @@ -118,7 +118,7 @@ export default { return this.$store.getters.canEdit } const board = this.$store.getters.boards.find((item) => item.id === this.card.boardId) - return board.permissions.PERMISSION_EDIT + return board ? board.permissions.PERMISSION_EDIT : false }, card() { return this.item ? this.item : this.$store.getters.cardById(this.id)