diff --git a/appinfo/database.xml b/appinfo/database.xml index 74f81ba3e..febac5f47 100644 --- a/appinfo/database.xml +++ b/appinfo/database.xml @@ -316,6 +316,44 @@ + + *dbprefix*deck_assigned_users + + + id + integer + 0 + true + 1 + 4 + + + participant + text + true + 64 + + + card_id + integer + 0 + true + 4 + + + deck_assigned_users_idx_p + + participant + + + + deck_assigned_users_idx_c + + card_id + + + +
*dbprefix*deck_board_acl diff --git a/appinfo/info.xml b/appinfo/info.xml index 07ad719c8..04bf575be 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -16,7 +16,7 @@ 💥 This is still alpha software: it may not be stable enough for production! - 0.3.0-dev1 + 0.3.0-dev2 agpl Julius Härtl Deck diff --git a/css/style.scss b/css/style.scss index e51bb8f90..2305c06c8 100644 --- a/css/style.scss +++ b/css/style.scss @@ -601,14 +601,27 @@ input.input-inline { h4 { border-bottom: 1px solid $color-lightgrey; - padding: 15px 0px 5px 0px; - margin: 0 0 10px 0; - font-size: 15px; + display: flex; + flex-direction: row; + height: 30px; + div:first-child { + flex-grow: 1; + padding: 15px 0 5px 0; + display: inline-block; - > div { - display: inline-flex; - align-content: center; - justify-content: space-between; + } + } + .section-header { + border-bottom: 1px solid $color-lightgrey; + display: flex; + flex-direction: row; + padding: 15px 0 5px 0; + margin: 10px 0 10px 0; + + h4 { + margin: 0; + border: none; + margin: 15px 0 5px 0; } } diff --git a/lib/Db/AssignedUsers.php b/lib/Db/AssignedUsers.php new file mode 100644 index 000000000..d4cd38c0e --- /dev/null +++ b/lib/Db/AssignedUsers.php @@ -0,0 +1,41 @@ + + * + * @author Julius Härtl + * + * @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\Db; + +use JsonSerializable; + +class AssignedUsers extends RelationalEntity implements JsonSerializable { + + public $id; + protected $participant; + protected $cardId; + + public function __construct() { + $this->addType('id', 'integer'); + $this->addType('card_id', 'integer'); + $this->addResolvable('participant'); + + } + +} \ No newline at end of file diff --git a/lib/Db/AssignedUsersMapper.php b/lib/Db/AssignedUsersMapper.php new file mode 100644 index 000000000..d7d0db6f1 --- /dev/null +++ b/lib/Db/AssignedUsersMapper.php @@ -0,0 +1,76 @@ + + * + * @author Julius Härtl + * + * @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\Db; + +use OCP\AppFramework\Db\Entity; +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\IUserManager; + + +class AssignedUsersMapper extends DeckMapper implements IPermissionMapper { + + private $cardMapper; + private $userManager; + + public function __construct(IDBConnection $db, CardMapper $cardMapper, IUserManager $userManager) { + parent::__construct($db, 'deck_assigned_users', '\OCA\Deck\Db\AssignedUsers'); + $this->cardMapper = $cardMapper; + $this->userManager = $userManager; + } + + public function find($cardId) { + $sql = 'SELECT * FROM `*PREFIX*deck_assigned_users` ' . + 'WHERE `card_id` = ?'; + $users = $this->findEntities($sql, [$cardId]); + foreach ($users as &$user) { + $this->mapParticipant($user); + } + return $users; + } + + + public function isOwner($userId, $cardId) { + return $this->cardMapper->isOwner($userId, $cardId); + } + + public function findBoardId($cardId) { + return $this->cardMapper->findBoardId($cardId); + + } + + public function mapParticipant(AssignedUsers &$assignment) { + $userManager = $this->userManager; + $assignment->resolveRelation('participant', function() use (&$userManager, &$assignment) { + $user = $userManager->get($assignment->getParticipant()); + if($user !== null) { + return new User($user); + } + return null; + }); + } + + +} \ No newline at end of file diff --git a/lib/Db/Card.php b/lib/Db/Card.php index 59e4d857a..fdcb4d441 100644 --- a/lib/Db/Card.php +++ b/lib/Db/Card.php @@ -56,6 +56,7 @@ class Card extends RelationalEntity { $this->addType('archived', 'boolean'); $this->addType('notified', 'boolean'); $this->addRelation('labels'); + $this->addRelation('participants'); $this->addResolvable('owner'); } diff --git a/lib/Db/CardMapper.php b/lib/Db/CardMapper.php index b8f6e3f94..98c73c892 100644 --- a/lib/Db/CardMapper.php +++ b/lib/Db/CardMapper.php @@ -24,6 +24,7 @@ namespace OCA\Deck\Db; use OCP\AppFramework\Db\Entity; +use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; use OCP\IUserManager; use OCP\Notification\IManager; @@ -103,6 +104,7 @@ class CardMapper extends DeckMapper implements IPermissionMapper { $card = $this->findEntity($sql, [$id]); $labels = $this->labelMapper->findAssignedLabelsForCard($card->id); $card->setLabels($labels); + $this->mapOwner($card); return $card; } diff --git a/templates/part.card.php b/templates/part.card.php index 9e6d60e49..3d7f8a1e4 100644 --- a/templates/part.card.php +++ b/templates/part.card.php @@ -47,17 +47,35 @@ -

- t('Due date')); ?> -

+
+

t('Assign users')); ?>

+ +
+ + + {{ $item.participant.displayname }} + + + {{ sharee.participant.displayname }} + + + t('No matching user or group found.')); ?> + + +
+ +
+

+ t('Due date')); ?> +

+
- -
+

t('Description')); ?> @@ -65,8 +83,9 @@
t('Saved')); ?> t('Unsaved changes')); ?> -

+
+