diff --git a/appinfo/info.xml b/appinfo/info.xml index fbf28b5c1..a1f8164b1 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -17,7 +17,7 @@ - 🚀 Get your project organized - 1.4.0-alpha1 + 1.4.0 agpl Julius Härtl Deck diff --git a/lib/Controller/BoardController.php b/lib/Controller/BoardController.php index 9d0b9fcaf..e591e8f70 100644 --- a/lib/Controller/BoardController.php +++ b/lib/Controller/BoardController.php @@ -73,10 +73,11 @@ class BoardController extends ApiController { * @param $title * @param $color * @param $archived + * @param $upcoming_show_only_assigned_cards * @return \OCP\AppFramework\Db\Entity */ - public function update($id, $title, $color, $archived) { - return $this->boardService->update($id, $title, $color, $archived); + public function update($id, $title, $color, $archived, $upcoming_show_only_assigned_cards) { + return $this->boardService->update($id, $title, $color, $archived, $upcoming_show_only_assigned_cards); } /** diff --git a/lib/Db/Board.php b/lib/Db/Board.php index 31caa5b27..0e0fe732f 100644 --- a/lib/Db/Board.php +++ b/lib/Db/Board.php @@ -36,6 +36,7 @@ class Board extends RelationalEntity { protected $stacks = []; protected $deletedAt = 0; protected $lastModified = 0; + protected $upcoming_show_only_assigned_cards = true; protected $settings = []; @@ -45,6 +46,7 @@ class Board extends RelationalEntity { $this->addType('archived', 'boolean'); $this->addType('deletedAt', 'integer'); $this->addType('lastModified', 'integer'); + $this->addType('upcoming_show_only_assigned_cards', 'boolean'); $this->addRelation('labels'); $this->addRelation('acl'); $this->addRelation('shared'); diff --git a/lib/Db/BoardMapper.php b/lib/Db/BoardMapper.php index 834475307..3a722554c 100644 --- a/lib/Db/BoardMapper.php +++ b/lib/Db/BoardMapper.php @@ -66,7 +66,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper { * @throws DoesNotExistException */ public function find($id, $withLabels = false, $withAcl = false) { - $sql = 'SELECT id, title, owner, color, archived, deleted_at, last_modified FROM `*PREFIX*deck_boards` ' . + $sql = 'SELECT id, title, owner, color, archived, deleted_at, last_modified, upcoming_show_only_assigned_cards FROM `*PREFIX*deck_boards` ' . 'WHERE `id` = ?'; $board = $this->findEntity($sql, [$id]); @@ -105,12 +105,12 @@ class BoardMapper extends DeckMapper implements IPermissionMapper { */ 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 > ?'; + $sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified, upcoming_show_only_assigned_cards FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ?'; if (!$includeArchived) { $sql .= ' AND NOT archived AND deleted_at = 0'; } $sql .= ' UNION ' . - 'SELECT boards.id, title, owner, color, archived, deleted_at, 1 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' . + 'SELECT boards.id, title, owner, color, archived, deleted_at, 1 as shared, last_modified, upcoming_show_only_assigned_cards 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 AND deleted_at = 0'; @@ -142,7 +142,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper { if (count($groups) <= 0) { return []; } - $sql = 'SELECT boards.id, title, owner, color, archived, deleted_at, 2 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' . + $sql = 'SELECT boards.id, title, owner, color, archived, deleted_at, 2 as shared, last_modified, upcoming_show_only_assigned_cards FROM `*PREFIX*deck_boards` as boards ' . 'INNER JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE owner != ? AND type=? AND ('; for ($i = 0, $iMax = count($groups); $i < $iMax; $i++) { $sql .= 'acl.participant = ? '; @@ -174,7 +174,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper { return []; } - $sql = 'SELECT boards.id, title, owner, color, archived, deleted_at, 2 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' . + $sql = 'SELECT boards.id, title, owner, color, archived, deleted_at, 2 as shared, last_modified, upcoming_show_only_assigned_cards FROM `*PREFIX*deck_boards` as boards ' . 'INNER JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE owner != ? AND type=? AND ('; for ($i = 0, $iMax = count($circles); $i < $iMax; $i++) { $sql .= 'acl.participant = ? '; diff --git a/lib/Migration/Version010404Date20210305.php b/lib/Migration/Version010404Date20210305.php new file mode 100644 index 000000000..3f093eb6e --- /dev/null +++ b/lib/Migration/Version010404Date20210305.php @@ -0,0 +1,26 @@ +getTable('deck_boards'); + if (!$table->hasColumn('upcoming_show_only_assigned_cards')) { + $table->addColumn('upcoming_show_only_assigned_cards', 'boolean', [ + 'notnull' => false, + 'default' => true + ]); + } + return $schema; + } +} diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index 321d69ba4..16a1b96bd 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -422,13 +422,14 @@ class BoardService { * @param $title * @param $color * @param $archived + * @param $upcoming_show_only_assigned_cards * @return \OCP\AppFramework\Db\Entity * @throws DoesNotExistException * @throws \OCA\Deck\NoPermissionException * @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException * @throws BadRequestException */ - public function update($id, $title, $color, $archived) { + public function update($id, $title, $color, $archived, $upcoming_show_only_assigned_cards) { if (is_numeric($id) === false) { throw new BadRequestException('board id must be a number'); } @@ -445,12 +446,17 @@ class BoardService { throw new BadRequestException('archived must be a boolean'); } + if (is_bool($upcoming_show_only_assigned_cards) === false) { + throw new BadRequestException('upcoming_show_only_assigned_cards must be a boolean'); + } + $this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE); $board = $this->find($id); $changes = new ChangeSet($board); $board->setTitle($title); $board->setColor($color); $board->setArchived($archived); + $board->setUpcoming_show_only_assigned_cards($upcoming_show_only_assigned_cards); $changes->setAfter($board); $this->boardMapper->update($board); // operate on clone so we can check for updated fields $this->boardMapper->mapOwner($board); diff --git a/src/components/navigation/AppNavigationBoard.vue b/src/components/navigation/AppNavigationBoard.vue index 157d278c5..d58b776eb 100644 --- a/src/components/navigation/AppNavigationBoard.vue +++ b/src/components/navigation/AppNavigationBoard.vue @@ -112,6 +112,12 @@ {{ dueDateReminderText }} + + {{ t('deck', 'Show only cards assigned to me in upcoming view') }} + +