*/ class ShareMapper extends QBMapper { /** * @var IDBConnection */ protected $db; /** * TagMapper constructor. * * @param IDBConnection $db */ public function __construct(IDBConnection $db) { parent::__construct($db, 'bookmarks_shares', Share::class); $this->db = $db; } /** * @param int $shareId * @return Share * @throws DoesNotExistException * @throws MultipleObjectsReturnedException */ public function find(int $shareId): Share { $qb = $this->db->getQueryBuilder(); $qb->select(Share::$columns) ->from('bookmarks_shares') ->where($qb->expr()->eq('id', $qb->createPositionalParameter($shareId))); return $this->findEntity($qb); } /** * @param int $folderId * @return Share[] */ public function findByFolder(int $folderId): array { $qb = $this->db->getQueryBuilder(); $qb->select(Share::$columns) ->from('bookmarks_shares') ->where($qb->expr()->eq('folder_id', $qb->createPositionalParameter($folderId))); return $this->findEntities($qb); } /** * @param string $userId * * @return Share[] * * @psalm-return list */ public function findByOwner(string $userId): array { $qb = $this->db->getQueryBuilder(); $qb->select(Share::$columns) ->from('bookmarks_shares') ->where($qb->expr()->eq('owner', $qb->createPositionalParameter($userId))); return $this->findEntities($qb); } /** * @param int $type * @param string $participant * * @return Share[] * * @psalm-return list */ public function findByParticipant(int $type, string $participant): array { $qb = $this->db->getQueryBuilder(); $qb->select(Share::$columns) ->from('bookmarks_shares') ->where($qb->expr()->eq('participant', $qb->createPositionalParameter($participant))) ->andWhere($qb->expr()->eq('type', $qb->createPositionalParameter($type))); return $this->findEntities($qb); } /** * @param int $folderId * @param int $type * @param string $participant * @return Share * @throws DoesNotExistException * @throws MultipleObjectsReturnedException */ public function findByFolderAndParticipant(int $folderId, int $type, string $participant): Share { $qb = $this->db->getQueryBuilder(); $qb->select(array_map(static function ($c) { return 's.' . $c; }, Share::$columns)) ->from('bookmarks_shares') ->where($qb->expr()->eq('folder_id', $qb->createPositionalParameter($folderId))) ->andWhere($qb->expr()->eq('participant', $qb->createPositionalParameter($participant))) ->andWhere($qb->expr()->eq('type', $qb->createPositionalParameter($type))); return $this->findEntity($qb); } /** * @param int $folderId * @param string $userId * @return Share * @throws DoesNotExistException * @throws MultipleObjectsReturnedException */ public function findByFolderAndUser(int $folderId, string $userId): Share { $qb = $this->db->getQueryBuilder(); $qb->select(array_map(static function ($c) { return 's.' . $c; }, Share::$columns)) ->from('bookmarks_shares', 's') ->leftJoin('s', 'bookmarks_shared_to_shares', 't', 's.id = t.share_id') ->leftJoin('t', 'bookmarks_shared_folders', 'sf', 'sf.id = t.shared_folder_id') ->where($qb->expr()->eq('s.folder_id', $qb->createPositionalParameter($folderId))) ->andWhere($qb->expr()->eq('sf.user_id', $qb->createPositionalParameter($userId))); return $this->findEntity($qb); } /** * @param string $owner * @param string $userId * @return Share[] */ public function findByOwnerAndUser(string $owner, string $userId): array { $qb = $this->db->getQueryBuilder(); $qb->select(array_map(static function ($c) { return 's.' . $c; }, Share::$columns)) ->from('bookmarks_shares', 's') ->leftJoin('s', 'bookmarks_shared_to_shares', 't', 's.id = t.share_id') ->leftJoin('t', 'bookmarks_shared_folders', 'sf', 't.shared_folder_id = sf.id') ->where($qb->expr()->eq('s.owner', $qb->createPositionalParameter($owner))) ->andWhere($qb->expr()->eq('sf.user_id', $qb->createPositionalParameter($userId))); return $this->findEntities($qb); } /** * @param Entity $entity * @psalm-param Share $entity * @return Share * @throws \OCP\DB\Exception */ public function insert(Entity $entity): Share { $entity->setCreatedAt(time()); return parent::insert($entity); } /** * @param Entity $entity * @psalm-param Share $entity * @return Share * @throws \OCP\DB\Exception */ public function insertOrUpdate(Entity $entity): Share { $entity->setCreatedAt(time()); return parent::insertOrUpdate($entity); } public function findBySharedFolder(int $id): Share { $qb = $this->db->getQueryBuilder(); $qb->select(array_map(static function ($c) { return 's.' . $c; }, Share::$columns)) ->from('bookmarks_shares', 's') ->innerJoin('s', 'bookmarks_shared_to_shares', 't', 's.id = t.share_id') ->where($qb->expr()->eq('t.shared_folder_id', $qb->createPositionalParameter($id))); return $this->findEntity($qb); } /** * @param string $userId * @return Share[] * @throws Exception */ public function findByUser(string $userId): array { $qb = $this->db->getQueryBuilder(); $qb->select(array_map(static function ($c) { return 's.' . $c; }, Share::$columns)) ->from('bookmarks_shares', 's') ->leftJoin('s', 'bookmarks_shared_to_shares', 't', 's.id = t.share_id') ->leftJoin('t', 'bookmarks_shared_folders', 'sf', 'sf.id = t.shared_folder_id') ->where($qb->expr()->eq('sf.user_id', $qb->createPositionalParameter($userId))); return $this->findEntities($qb); } }