* * @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\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', AssignedUsers::class); $this->cardMapper = $cardMapper; $this->userManager = $userManager; } /** * FIXME: rename this since it returns multiple entities otherwise the naming is confusing with Entity::find * * @param $cardId * @return array|Entity */ 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 findByUserId($uid) { $sql = 'SELECT * FROM `*PREFIX*deck_assigned_users` ' . 'WHERE `participant` = ?'; return $this->findEntities($sql, [$uid]); } public function isOwner($userId, $cardId) { return $this->cardMapper->isOwner($userId, $cardId); } public function findBoardId($cardId) { return $this->cardMapper->findBoardId($cardId); } /** * Check if user exists before assigning it to a card * * @param Entity $entity * @return null|Entity */ public function insert(Entity $entity) { $user = $this->userManager->get($entity->getParticipant()); if ($user !== null) { /** @var AssignedUsers $assignment */ $assignment = parent::insert($entity); $this->mapParticipant($assignment); return $assignment; } return null; } 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; }); } }