From ebbafbe55d7b7fa4e456f4474e4031f65ad493ae Mon Sep 17 00:00:00 2001 From: Raul Date: Tue, 3 May 2022 13:01:09 +0200 Subject: [PATCH] Add board summary model Signed-off-by: Raul --- lib/Db/Card.php | 42 ++++-------------------------- lib/Model/BoardSummary.php | 46 +++++++++++++++++++++++++++++++++ lib/Model/CardDetails.php | 38 +++++++++++++++++---------- lib/Service/OverviewService.php | 2 +- 4 files changed, 76 insertions(+), 52 deletions(-) create mode 100644 lib/Model/BoardSummary.php diff --git a/lib/Db/Card.php b/lib/Db/Card.php index 9b19c2a84..e6823b37b 100644 --- a/lib/Db/Card.php +++ b/lib/Db/Card.php @@ -32,6 +32,7 @@ use Sabre\VObject\Component\VCalendar; * @method string getDescription() * @method string getDescriptionPrev() * @method int getStackId() + * @method int getOrder() * @method int getLastModified() * @method int getCreatedAt() * @method bool getArchived() @@ -40,7 +41,7 @@ use Sabre\VObject\Component\VCalendar; * @method void setLabels(Label[] $labels) * @method null|Label[] getLabels() * - * @method void setAssignedUsers(User[] $users) + * @method void setAssignedUsers(Assignment[] $users) * @method null|User[] getAssignedUsers() * * @method void setAttachments(Attachment[] $attachments) @@ -55,8 +56,8 @@ use Sabre\VObject\Component\VCalendar; * @method void setCommentsCount(int $count) * @method null|int getCommentsCount() * - * @method void setOwner(User $user) - * @method null|User getOwner() + * @method void setOwner(string $user) + * @method null|string getOwner() * * @method void setRelatedStack(Stack $stack) * @method null|Stack getRelatedStack() @@ -91,7 +92,7 @@ class Card extends RelationalEntity { protected $relatedStack = null; protected $relatedBoard = null; - private $databaseType = 'sqlite'; + protected $databaseType = 'sqlite'; public const DUEDATE_FUTURE = 0; public const DUEDATE_NEXT = 1; @@ -135,39 +136,6 @@ class Card extends RelationalEntity { return $dt->format('c'); } - public function jsonSerialize(): array { - $json = parent::jsonSerialize(); - $json['overdue'] = self::DUEDATE_FUTURE; - $due = $this->duedate ? strtotime($this->duedate) : false; - if ($due !== false) { - $today = new DateTime(); - $today->setTime(0, 0); - - $match_date = new DateTime($this->duedate); - - $match_date->setTime(0, 0); - - $diff = $today->diff($match_date); - $diffDays = (integer) $diff->format('%R%a'); // Extract days count in interval - - if ($diffDays === 1) { - $json['overdue'] = self::DUEDATE_NEXT; - } - if ($diffDays === 0) { - $json['overdue'] = self::DUEDATE_NOW; - } - if ($diffDays < 0) { - $json['overdue'] = self::DUEDATE_OVERDUE; - } - } - $json['duedate'] = $this->getDuedate(true); - unset($json['notified']); - unset($json['descriptionPrev']); - unset($json['relatedStack']); - unset($json['relatedBoard']); - return $json; - } - public function getCalendarObject(): VCalendar { $calendar = new VCalendar(); $event = $calendar->createComponent('VTODO'); diff --git a/lib/Model/BoardSummary.php b/lib/Model/BoardSummary.php new file mode 100644 index 000000000..ad5519781 --- /dev/null +++ b/lib/Model/BoardSummary.php @@ -0,0 +1,46 @@ + + * + * @author Raul Ferreira Fuentes + * + * @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\Model; + +use OCA\Deck\Db\Board; + +class BoardSummary extends Board +{ + private Board $board; + + public function __construct(Board $board = null) { + parent::__construct(); + $this->board = $board; + } + + public function jsonSerialize(): array { + return [ + 'id' => $this->getId(), + 'title' => $this->getTitle() + ]; + } + + protected function getter($name) { + return $this->board->getter($name); + } +} diff --git a/lib/Model/CardDetails.php b/lib/Model/CardDetails.php index 4703b29fb..08da0ff67 100644 --- a/lib/Model/CardDetails.php +++ b/lib/Model/CardDetails.php @@ -31,30 +31,27 @@ class CardDetails extends Card private Card $card; private ?Board $board; - public function __construct( - Card $card, - Board $board = null - ) { + public function __construct(Card $card, ?Board $board = null) { parent::__construct(); $this->card = $card; $this->board = $board; } - protected function getter($name) { - return $this->card->getter($name); + public function setBoard(?Board $board): void { + $this->board = $board; } - public function jsonSerialize(): array { + public function jsonSerialize(array $extras = []): array { $array = parent::jsonSerialize(); - $array['boardId'] = $this->board->id ?? null; $array['overdue'] = $this->getDueStatus(); - $array['foo'] = 'bar'; unset($array['notified']); unset($array['descriptionPrev']); unset($array['relatedStack']); unset($array['relatedBoard']); + $this->appendBoardDetails($array); + return $array; } @@ -62,22 +59,35 @@ class CardDetails extends Card $today = new DateTime(); $today->setTime(0, 0); - $match_date = new DateTime($this->duedate); + $match_date = new DateTime($this->getDuedate()); $match_date->setTime(0, 0); $diff = $today->diff($match_date); $diffDays = (integer) $diff->format('%R%a'); // Extract days count in interval if ($diffDays === 1) { - return self::DUEDATE_NEXT; + return static::DUEDATE_NEXT; } if ($diffDays === 0) { - return self::DUEDATE_NOW; + return static::DUEDATE_NOW; } if ($diffDays < 0) { - return self::DUEDATE_OVERDUE; + return static::DUEDATE_OVERDUE; } - return self::DUEDATE_FUTURE; + return static::DUEDATE_FUTURE; + } + + private function appendBoardDetails(&$array): void { + if (!$this->board) { + return; + } + + $array['boardId'] = $this->board->id; + $array['board'] = (new BoardSummary($this->board))->jsonSerialize(); + } + + protected function getter($name) { + return $this->card->getter($name); } } diff --git a/lib/Service/OverviewService.php b/lib/Service/OverviewService.php index 3d2152bc3..1a3ab3d45 100644 --- a/lib/Service/OverviewService.php +++ b/lib/Service/OverviewService.php @@ -119,7 +119,7 @@ class OverviewService { $foundCards[] = array_map( function (Card $card) use ($userBoard, $userId) { $this->enrich($card, $userId); - return new CardDetails($card, $userBoard); + return (new CardDetails($card, $userBoard))->jsonSerialize(); }, $cards );