From c3b4ed6e1fe706195176e011c6004d3a301a9458 Mon Sep 17 00:00:00 2001 From: Thanos Kamber Date: Wed, 30 Aug 2023 22:17:53 +0300 Subject: [PATCH 1/8] Added ability to mark card as done Closes #534 Signed-off-by: Thanos Kamber --- appinfo/routes.php | 2 + docs/API.md | 7 ++ docs/User_documentation_en.md | 31 +++-- docs/resources/gifs/EN_done.gif | Bin 0 -> 89651 bytes lib/Activity/ActivityManager.php | 10 ++ lib/Controller/CardApiController.php | 4 +- lib/Controller/CardController.php | 18 +++ lib/Db/Card.php | 2 + lib/Db/CardMapper.php | 3 + .../Version1011Date20230901010840.php | 60 ++++++++++ lib/Service/CardService.php | 59 +++++++++- src/components/card/CardSidebarTabDetails.vue | 107 +++++++++++++++++- src/components/cards/CardItem.vue | 6 +- src/components/cards/CardMenu.vue | 6 + src/components/cards/badges/Done.vue | 68 +++++++++++ src/services/CardApi.js | 30 +++++ src/store/card.js | 9 ++ tests/unit/Db/CardTest.php | 4 + 18 files changed, 406 insertions(+), 20 deletions(-) create mode 100644 docs/resources/gifs/EN_done.gif create mode 100644 lib/Migration/Version1011Date20230901010840.php create mode 100644 src/components/cards/badges/Done.vue diff --git a/appinfo/routes.php b/appinfo/routes.php index 9105bf8ef..467a3ddc6 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -61,6 +61,8 @@ ['name' => 'card#reorder', 'url' => '/cards/{cardId}/reorder', 'verb' => 'PUT'], ['name' => 'card#archive', 'url' => '/cards/{cardId}/archive', 'verb' => 'PUT'], ['name' => 'card#unarchive', 'url' => '/cards/{cardId}/unarchive', 'verb' => 'PUT'], + ['name' => 'card#done', 'url' => '/cards/{cardId}/done', 'verb' => 'PUT'], + ['name' => 'card#undone', 'url' => '/cards/{cardId}/undone', 'verb' => 'PUT'], ['name' => 'card#assignLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'POST'], ['name' => 'card#removeLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'DELETE'], ['name' => 'card#assignUser', 'url' => '/cards/{cardId}/assign', 'verb' => 'POST'], diff --git a/docs/API.md b/docs/API.md index 5e95da1db..a3e3a8654 100644 --- a/docs/API.md +++ b/docs/API.md @@ -601,6 +601,7 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit "owner":"admin", "order":999, "archived":false, + "done":false, "duedate": "2019-12-24T19:29:30+00:00", "deletedAt":0, "commentsUnread":0, @@ -628,8 +629,11 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit | title | String | The title of the card, maximum length is limited to 255 characters | | description | String | The markdown description of the card | | type | String | Type of the card (for later use) use 'plain' for now | +| owner | String | The user that owns the card | | order | Integer | Order for sorting the stacks | | duedate | timestamp | The ISO-8601 formatted duedate of the card or null | +| archived | bool | Whether the card is archived or not | +| done | bool | Whether the card is marked as done or not | ``` @@ -637,8 +641,11 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit "title": "Test card", "description": "A card description", "type": "plain", + "owner": "admin", "order": 999, "duedate": "2019-12-24T19:29:30+00:00", + "archived": false, + "done": false, } ``` diff --git a/docs/User_documentation_en.md b/docs/User_documentation_en.md index 36f2dbbad..125b14afa 100644 --- a/docs/User_documentation_en.md +++ b/docs/User_documentation_en.md @@ -12,11 +12,12 @@ Overall, Deck is easy to use. You can create boards, add users, share the Deck, 1. [Create my first board](#1-create-my-first-board) 2. [Create stacks and cards](#2-create-stacks-and-cards) 3. [Handle cards options](#3-handle-cards-options) -4. [Archive old tasks](#4-archive-old-tasks) -5. [Manage your board](#5-manage-your-board) -6. [Import boards](#6-import-boards) -7. [Search](#7-search) -8. [New owner for the deck entities](#8-new-owner-for-the-deck-entities) +4. [Mark task as done](#4-mark-as-done) +5. [Archive old tasks](#5-archive-old-tasks) +6. [Manage your board](#6-manage-your-board) +7. [Import boards](#7-import-boards) +8. [Search](#8-search) +9. [New owner for the deck entities](#9-new-owner-for-the-deck-entities) ### 1. Create my first board In this example, we're going to create a board and share it with an other nextcloud user. @@ -53,12 +54,18 @@ And even : ![Gif for puting infos on tasks 2](resources/gifs/EN_put_infos_2.gif) -### 4. Archive old tasks -Once finished or obsolete, a task could be archived. The tasks is not deleted, it's just archived, and you can retrieve it later +### 4. Mark as done +Once a task has been completed, you can mark it as done. This will prevent it from becoming overdue and hide it from the upcoming cards. +You can mark it as not done at any time. -![Gif for puting infos on tasks 2](resources/gifs/EN_archive.gif) +![Gif for marking a card as done](resources/gifs/EN_done.gif) -### 5. Manage your board +### 5. Archive old tasks +Once obsolete, a task could be archived. The task is not deleted, it's just archived, and you can retrieve it later + +![Gif for archiving a task](resources/gifs/EN_archive.gif) + +### 6. Manage your board You can manage the settings of your Deck once you are inside it, by clicking on the small wheel at the top right. Once in this menu, you have access to several things: @@ -72,7 +79,7 @@ The **sharing tab** allows you to add users or even groups to your boards. **Deleted objects** allows you to return previously deleted stacks or cards. The **Timeline** allows you to see everything that happened in your boards. Everything! -### 6. Import boards +### 7. Import boards Importing can be done using the API or the `occ` `deck:import` command. @@ -138,7 +145,7 @@ Example configuration file: } ``` -### 7. Search +### 8. Search Deck provides a global search either through the unified search in the Nextcloud header or with the inline search next to the board controls. This search allows advanced filtering of cards across all board of the logged in user. @@ -161,7 +168,7 @@ Other text tokens will be used to perform a case-insensitive search on the card In addition, quotes can be used to pass a query with spaces, e.g. `"Exact match with spaces"` or `title:"My card"`. -### 8. New owner for the deck entities +### 9. New owner for the deck entities You can transfer ownership of boards, cards, etc to a new user, using `occ` command `deck:transfer-ownership` ```bash diff --git a/docs/resources/gifs/EN_done.gif b/docs/resources/gifs/EN_done.gif new file mode 100644 index 0000000000000000000000000000000000000000..e65cef47e44f39da8d14eca2bb7c7af452920db6 GIT binary patch literal 89651 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�MJVbezbg>s!0;ByoKogWZ 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 LbVwcmg){#FXje~u literal 0 HcmV?d00001 diff --git a/lib/Activity/ActivityManager.php b/lib/Activity/ActivityManager.php index 15d4bd59d..010820c43 100644 --- a/lib/Activity/ActivityManager.php +++ b/lib/Activity/ActivityManager.php @@ -91,6 +91,8 @@ class ActivityManager { public const SUBJECT_CARD_UPDATE_DUEDATE = 'card_update_duedate'; public const SUBJECT_CARD_UPDATE_ARCHIVE = 'card_update_archive'; public const SUBJECT_CARD_UPDATE_UNARCHIVE = 'card_update_unarchive'; + public const SUBJECT_CARD_UPDATE_DONE = 'card_update_done'; + public const SUBJECT_CARD_UPDATE_UNDONE = 'card_update_undone'; public const SUBJECT_CARD_UPDATE_STACKID = 'card_update_stackId'; public const SUBJECT_CARD_USER_ASSIGN = 'card_user_assign'; public const SUBJECT_CARD_USER_UNASSIGN = 'card_user_unassign'; @@ -198,6 +200,12 @@ public function getActivityFormat($language, $subjectIdentifier, $subjectParams case self::SUBJECT_CARD_UPDATE_UNARCHIVE: $subject = $ownActivity ? $l->t('You have unarchived card {card} in list {stack} on board {board}') : $l->t('{user} has unarchived card {card} in list {stack} on board {board}'); break; + case self::SUBJECT_CARD_UPDATE_DONE: + $subject = $ownActivity ? $l->t('You have marked the card {card} as done in list {stack} on board {board}') : $l->t('{user} has marked card {card} as done in list {stack} on board {board}'); + break; + case self::SUBJECT_CARD_UPDATE_UNDONE: + $subject = $ownActivity ? $l->t('You have marked the card {card} as undone in list {stack} on board {board}') : $l->t('{user} has marked the card {card} as undone in list {stack} on board {board}'); + break; case self::SUBJECT_CARD_UPDATE_DUEDATE: if (!isset($subjectParams['after'])) { $subject = $ownActivity ? $l->t('You have removed the due date of card {card}') : $l->t('{user} has removed the due date of card {card}'); @@ -357,6 +365,8 @@ private function createEvent($objectType, $entity, $subject, $additionalParams = case self::SUBJECT_CARD_DELETE: case self::SUBJECT_CARD_UPDATE_ARCHIVE: case self::SUBJECT_CARD_UPDATE_UNARCHIVE: + case self::SUBJECT_CARD_UPDATE_DONE: + case self::SUBJECT_CARD_UPDATE_UNDONE: case self::SUBJECT_CARD_UPDATE_TITLE: case self::SUBJECT_CARD_UPDATE_DESCRIPTION: case self::SUBJECT_CARD_UPDATE_DUEDATE: diff --git a/lib/Controller/CardApiController.php b/lib/Controller/CardApiController.php index bb1c8a880..d6ee8210c 100644 --- a/lib/Controller/CardApiController.php +++ b/lib/Controller/CardApiController.php @@ -104,8 +104,8 @@ public function create($title, $type = 'plain', $order = 999, $description = '', * * Update a card */ - public function update($title, $type, $owner, $description = '', $order = 0, $duedate = null, $archived = null) { - $card = $this->cardService->update($this->request->getParam('cardId'), $title, $this->request->getParam('stackId'), $type, $owner, $description, $order, $duedate, 0, $archived); + public function update($title, $type, $owner, $description = '', $order = 0, $duedate = null, $archived = null, ?bool $done = null) { + $card = $this->cardService->update($this->request->getParam('cardId'), $title, $this->request->getParam('stackId'), $type, $owner, $description, $order, $duedate, 0, $archived, $done); return new DataResponse($card, HTTP::STATUS_OK); } diff --git a/lib/Controller/CardController.php b/lib/Controller/CardController.php index 2260d0dac..7eebb021e 100644 --- a/lib/Controller/CardController.php +++ b/lib/Controller/CardController.php @@ -143,6 +143,24 @@ public function unarchive($cardId) { return $this->cardService->unarchive($cardId); } + /** + * @NoAdminRequired + * @param $cardId + * @return \OCP\AppFramework\Db\Entity + */ + public function done(int $cardId) { + return $this->cardService->done($cardId); + } + + /** + * @NoAdminRequired + * @param $cardId + * @return \OCP\AppFramework\Db\Entity + */ + public function undone(int $cardId) { + return $this->cardService->undone($cardId); + } + /** * @NoAdminRequired * @param $cardId diff --git a/lib/Db/Card.php b/lib/Db/Card.php index e36a9fb0c..6e8e261f9 100644 --- a/lib/Db/Card.php +++ b/lib/Db/Card.php @@ -83,6 +83,7 @@ class Card extends RelationalEntity { protected $owner; protected $order; protected $archived = false; + protected $done = false; protected $duedate; protected $notified = false; protected $deletedAt = 0; @@ -106,6 +107,7 @@ public function __construct() { $this->addType('lastModified', 'integer'); $this->addType('createdAt', 'integer'); $this->addType('archived', 'boolean'); + $this->addType('done', 'boolean'); $this->addType('notified', 'boolean'); $this->addType('deletedAt', 'integer'); $this->addType('duedate', 'datetime'); diff --git a/lib/Db/CardMapper.php b/lib/Db/CardMapper.php index 60938002c..37a19dfb2 100644 --- a/lib/Db/CardMapper.php +++ b/lib/Db/CardMapper.php @@ -263,6 +263,7 @@ public function findAllWithDue(array $boardIds) { ->where($qb->expr()->in('s.board_id', $qb->createNamedParameter($boardIds, IQueryBuilder::PARAM_INT_ARRAY))) ->andWhere($qb->expr()->isNotNull('c.duedate')) ->andWhere($qb->expr()->eq('c.archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) + ->andWhere($qb->expr()->eq('c.done', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) ->andWhere($qb->expr()->eq('c.deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT))) ->andWhere($qb->expr()->eq('s.deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT))) ->andWhere($qb->expr()->eq('b.archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) @@ -284,6 +285,7 @@ public function findToMeOrNotAssignedCards(array $boardIds, string $username) { ) // Filter out archived/deleted cards and board ->andWhere($qb->expr()->eq('c.archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) + ->andWhere($qb->expr()->eq('c.done', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) ->andWhere($qb->expr()->eq('c.deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT))) ->andWhere($qb->expr()->eq('s.deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT))) ->andWhere($qb->expr()->eq('b.archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) @@ -298,6 +300,7 @@ public function findOverdue() { ->where($qb->expr()->lt('duedate', $qb->createFunction('NOW()'))) ->andWhere($qb->expr()->eq('notified', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) ->andWhere($qb->expr()->eq('archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) + ->andWhere($qb->expr()->eq('done', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) ->andWhere($qb->expr()->eq('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT))); return $this->findEntities($qb); } diff --git a/lib/Migration/Version1011Date20230901010840.php b/lib/Migration/Version1011Date20230901010840.php new file mode 100644 index 000000000..837aaf72c --- /dev/null +++ b/lib/Migration/Version1011Date20230901010840.php @@ -0,0 +1,60 @@ + + * + * @author Thanos kamber + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Deck\Migration; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + +/** + * Auto-generated migration step: Please modify to your needs! + */ +class Version1011Date20230901010840 extends SimpleMigrationStep { + /** + * @param IOutput $output + * @param Closure $schemaClosure + * @param array $options + * @return null|ISchemaWrapper + */ + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + $table = $schema->getTable('deck_cards'); + if (!$table->hasColumn('done')) { + $table->addColumn('done', 'boolean', [ + 'default' => false, + 'notnull' => true, + ]); + + return $schema; + } + + return null; + } +} diff --git a/lib/Service/CardService.php b/lib/Service/CardService.php index 45559b87f..1a8e33ed9 100644 --- a/lib/Service/CardService.php +++ b/lib/Service/CardService.php @@ -284,6 +284,9 @@ public function delete($id) { * @param $description * @param $order * @param $duedate + * @param $deletedAt + * @param $archived + * @param $done * @return \OCP\AppFramework\Db\Entity * @throws StatusException * @throws \OCA\Deck\NoPermissionException @@ -291,7 +294,7 @@ public function delete($id) { * @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException * @throws BadRequestException */ - public function update($id, $title, $stackId, $type, $owner, $description = '', $order = 0, $duedate = null, $deletedAt = null, $archived = null) { + public function update($id, $title, $stackId, $type, $owner, $description = '', $order = 0, $duedate = null, $deletedAt = null, $archived = null, ?bool $done = null) { $this->cardServiceValidator->check(compact('id', 'title', 'stackId', 'type', 'owner', 'order')); $this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT); @@ -341,6 +344,9 @@ public function update($id, $title, $stackId, $type, $owner, $description = '', if ($archived !== null) { $card->setArchived($archived); } + if ($done !== null) { + $card->setDone($done); + } // Trigger update events before setting description as it is handled separately @@ -511,6 +517,57 @@ public function unarchive($id) { return $newCard; } + /** + * @param $id + * @return \OCA\Deck\Db\Card + * @throws StatusException + * @throws \OCA\Deck\NoPermissionException + * @throws \OCP\AppFramework\Db\DoesNotExistException + * @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException + * @throws BadRequestException + */ + public function done(int $id): Card { + $this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT); + if ($this->boardService->isArchived($this->cardMapper, $id)) { + throw new StatusException('Operation not allowed. This board is archived.'); + } + $card = $this->cardMapper->find($id); + $card->setDone(true); + $newCard = $this->cardMapper->update($card); + $this->notificationHelper->markDuedateAsRead($card); + $this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_CARD, $newCard, ActivityManager::SUBJECT_CARD_UPDATE_DONE); + $this->changeHelper->cardChanged($id, false); + + $this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card)); + + return $newCard; + } + + /** + * @param $id + * @return \OCA\Deck\Db\Card + * @throws StatusException + * @throws \OCA\Deck\NoPermissionException + * @throws \OCP\AppFramework\Db\DoesNotExistException + * @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException + * @throws BadRequestException + */ + public function undone(int $id): Card { + $this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT); + if ($this->boardService->isArchived($this->cardMapper, $id)) { + throw new StatusException('Operation not allowed. This board is archived.'); + } + $card = $this->cardMapper->find($id); + $card->setDone(false); + $newCard = $this->cardMapper->update($card); + $this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_CARD, $newCard, ActivityManager::SUBJECT_CARD_UPDATE_UNDONE); + $this->changeHelper->cardChanged($id, false); + + $this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card)); + + return $newCard; + } + /** * @param $cardId * @param $labelId diff --git a/src/components/card/CardSidebarTabDetails.vue b/src/components/card/CardSidebarTabDetails.vue index b3c4afd6d..3b731e204 100644 --- a/src/components/card/CardSidebarTabDetails.vue +++ b/src/components/card/CardSidebarTabDetails.vue @@ -22,6 +22,31 @@