diff options
Diffstat (limited to 'lib/Manager.php')
-rw-r--r-- | lib/Manager.php | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/lib/Manager.php b/lib/Manager.php index fa23f4ade..8795b056a 100644 --- a/lib/Manager.php +++ b/lib/Manager.php @@ -303,6 +303,7 @@ class Manager { * @return Room[] */ public function getRoomsForUser(string $userId, bool $includeLastMessage = false): array { + // FIXME hand in a list of sessions or how do we want to do it here? $query = $this->db->getQueryBuilder(); $helper = new SelectHelper(); $helper->selectRoomsTable($query); @@ -391,9 +392,6 @@ class Manager { $query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS)), $query->expr()->eq('a.room_id', 'r.id') )) - ->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( - $query->expr()->eq('a.id', 's.attendee_id') - )) ->where($query->expr()->isNull('a.id')) ->andWhere($query->expr()->in('r.type', $query->createNamedParameter($allowedRoomTypes, IQueryBuilder::PARAM_INT_ARRAY))) ->andWhere($query->expr()->in('r.listable', $query->createNamedParameter($allowedListedTypes, IQueryBuilder::PARAM_INT_ARRAY))); @@ -435,15 +433,11 @@ class Manager { if ($userId !== null) { // Non guest user $helper->selectAttendeesTable($query); - $helper->selectSessionsTable($query); $query->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( $query->expr()->eq('a.actor_id', $query->createNamedParameter($userId)), $query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS)), $query->expr()->eq('a.room_id', 'r.id') )) - ->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( - $query->expr()->eq('a.id', 's.attendee_id') - )) ->andWhere($query->expr()->isNotNull('a.id')); } @@ -483,12 +477,13 @@ class Manager { * * @param string $token * @param string|null $userId + * @param string|null $sessionId * @param bool $includeLastMessage * @param bool $isSIPBridgeRequest * @return Room * @throws RoomNotFoundException */ - public function getRoomForUserByToken(string $token, ?string $userId, bool $includeLastMessage = false, bool $isSIPBridgeRequest = false): Room { + public function getRoomForUserByToken(string $token, ?string $userId, ?string $sessionId = null, bool $includeLastMessage = false, bool $isSIPBridgeRequest = false): Room { $query = $this->db->getQueryBuilder(); $helper = new SelectHelper(); $helper->selectRoomsTable($query); @@ -499,15 +494,18 @@ class Manager { if ($userId !== null) { // Non guest user $helper->selectAttendeesTable($query); - $helper->selectSessionsTable($query); $query->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( $query->expr()->eq('a.actor_id', $query->createNamedParameter($userId)), $query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS)), $query->expr()->eq('a.room_id', 'r.id') - )) - ->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( + )); + if ($sessionId !== null) { + $helper->selectSessionsTable($query); + $query->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( + $query->expr()->eq('s.session_id', $query->createNamedParameter($sessionId)), $query->expr()->eq('a.id', 's.attendee_id') )); + } } if ($includeLastMessage) { @@ -584,26 +582,31 @@ class Manager { * @param string $token * @param string $actorType * @param string $actorId + * @param string|null $sessionId * @return Room * @throws RoomNotFoundException */ - public function getRoomByActor(string $token, string $actorType, string $actorId): Room { + public function getRoomByActor(string $token, string $actorType, string $actorId, ?string $sessionId = null): Room { $query = $this->db->getQueryBuilder(); $helper = new SelectHelper(); $helper->selectRoomsTable($query); $helper->selectAttendeesTable($query); - $helper->selectSessionsTable($query); $query->from('talk_rooms', 'r') ->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( $query->expr()->eq('a.actor_type', $query->createNamedParameter($actorType)), $query->expr()->eq('a.actor_id', $query->createNamedParameter($actorId)), $query->expr()->eq('a.room_id', 'r.id') )) - ->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( - $query->expr()->eq('a.id', 's.attendee_id') - )) ->where($query->expr()->eq('r.token', $query->createNamedParameter($token))); + if ($sessionId !== null) { + $helper->selectSessionsTable($query); + $query->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( + $query->expr()->eq('s.session_id', $query->createNamedParameter($sessionId)), + $query->expr()->eq('a.id', 's.attendee_id') + )); + } + $result = $query->execute(); $row = $result->fetch(); $result->closeCursor(); |