diff --git a/.github/workflows/oci.yml b/.github/workflows/oci.yml new file mode 100644 index 00000000000..4130e985fc5 --- /dev/null +++ b/.github/workflows/oci.yml @@ -0,0 +1,73 @@ +name: PHPUnit + +on: + pull_request: + push: + branches: + - master + - stable* + +env: + APP_NAME: spreed + +jobs: + oci: + runs-on: ubuntu-latest + + strategy: + # do not stop on another job's failure + fail-fast: false + matrix: + php-versions: ['7.4'] + databases: ['oci'] + server-versions: ['master'] + + name: php${{ matrix.php-versions }}-${{ matrix.databases }} + + services: + oracle: + image: deepdiver/docker-oracle-xe-11g # "wnameless/oracle-xe-11g-r2" + ports: + - "1521:1521" + + steps: + - name: Checkout server + uses: actions/checkout@v2 + with: + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout submodules + shell: bash + run: | + auth_header="$(git config --local --get http.https://github.com/.extraheader)" + git submodule sync --recursive + git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 + + - name: Checkout app + uses: actions/checkout@v2 + with: + path: apps/${{ env.APP_NAME }} + + - name: Set up php ${{ matrix.php-versions }} + uses: "shivammathur/setup-php@v2" + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, iconv, fileinfo, intl, oci8 + tools: phpunit:8.5.2 + coverage: none + + - name: Set up PHPUnit + working-directory: apps/${{ env.APP_NAME }} + run: composer i + + - name: Set up Nextcloud + run: | + mkdir data + ./occ maintenance:install --verbose --database=oci --database-name=XE --database-host=127.0.0.1 --database-port=1521 --database-user=autotest --database-pass=owncloud --admin-user admin --admin-pass admin + php -f index.php + ./occ app:enable --force ${{ env.APP_NAME }} + + - name: PHPUnit + working-directory: apps/${{ env.APP_NAME }}/tests/php + run: phpunit -c phpunit.xml diff --git a/lib/Manager.php b/lib/Manager.php index 57b8d9a1fb2..e5f59ff8c8c 100644 --- a/lib/Manager.php +++ b/lib/Manager.php @@ -29,6 +29,7 @@ use OCA\Talk\Exceptions\RoomNotFoundException; use OCA\Talk\Model\Attendee; use OCA\Talk\Model\AttendeeMapper; +use OCA\Talk\Model\SelectHelper; use OCA\Talk\Model\SessionMapper; use OCA\Talk\Service\ParticipantService; use OCP\App\IAppManager; @@ -120,9 +121,9 @@ public function __construct(IDBConnection $db, public function forAllRooms(callable $callback): void { $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('id', 'r_id') - ->from('talk_rooms'); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r'); $result = $query->execute(); while ($row = $result->fetch()) { @@ -241,9 +242,10 @@ public function loadLastCommentInfo(int $id): ?IComment { public function resetAssignedSignalingServers(ICache $cache): void { $query = $this->db->getQueryBuilder(); - $query->select('*') - ->from('talk_rooms') - ->where($query->expr()->isNotNull('assigned_hpb')); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->isNotNull('r.assigned_hpb')); $result = $query->execute(); while ($row = $result->fetch()) { @@ -264,20 +266,20 @@ public function resetAssignedSignalingServers(ICache $cache): void { */ public function searchRoomsByToken(string $searchToken = '', int $limit = null, int $offset = null): array { $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('id', 'r_id') - ->from('talk_rooms') + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') ->setMaxResults(1); if ($searchToken !== '') { - $query->where($query->expr()->iLike('token', $query->createNamedParameter( + $query->where($query->expr()->iLike('r.token', $query->createNamedParameter( '%' . $this->db->escapeLikeParameter($searchToken) . '%' ))); } $query->setMaxResults($limit) ->setFirstResult($offset) - ->orderBy('token', 'ASC'); + ->orderBy('r.token', 'ASC'); $result = $query->execute(); $rooms = []; @@ -301,13 +303,11 @@ public function searchRoomsByToken(string $searchToken = '', int $limit = null, */ public function getRoomsForUser(string $userId, bool $includeLastMessage = false): array { $query = $this->db->getQueryBuilder(); - $query->select('r.*') - ->addSelect('a.*') - ->addSelect('s.*') - ->selectAlias('r.id', 'r_id') - ->selectAlias('a.id', 'a_id') - ->selectAlias('s.id', 's_id') - ->from('talk_rooms', 'r') + $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_id', $query->createNamedParameter($userId)), $query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS)), @@ -355,9 +355,9 @@ public function getListedRoomsForUser(string $userId, string $term = ''): array $allowedListedTypes[] = Room::LISTABLE_USERS; } $query = $this->db->getQueryBuilder(); - $query->select('r.*') - ->selectAlias('r.id', 'r_id') - ->from('talk_rooms', 'r') + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') ->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)), @@ -399,18 +399,16 @@ public function getListedRoomsForUser(string $userId, string $term = ''): array */ public function getRoomForUser(int $roomId, ?string $userId): Room { $query = $this->db->getQueryBuilder(); - $query->select('r.*') - ->selectAlias('r.id', 'r_id') - ->from('talk_rooms', 'r') + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') ->where($query->expr()->eq('r.id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); if ($userId !== null) { // Non guest user - $query->addSelect('a.*') - ->addSelect('s.*') - ->selectAlias('a.id', 'a_id') - ->selectAlias('s.id', 's_id') - ->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( + $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') @@ -463,19 +461,17 @@ public function getRoomForUser(int $roomId, ?string $userId): Room { */ public function getRoomForUserByToken(string $token, ?string $userId, bool $includeLastMessage = false): Room { $query = $this->db->getQueryBuilder(); - $query->select('r.*') - ->selectAlias('r.id', 'r_id') - ->from('talk_rooms', 'r') + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') ->where($query->expr()->eq('r.token', $query->createNamedParameter($token))) ->setMaxResults(1); if ($userId !== null) { // Non guest user - $query->addSelect('a.*') - ->addSelect('s.*') - ->selectAlias('a.id', 'a_id') - ->selectAlias('s.id', 's_id') - ->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( + $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') @@ -534,10 +530,10 @@ public function getRoomForUserByToken(string $token, ?string $userId, bool $incl */ public function getRoomById(int $roomId): Room { $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('id', 'r_id') - ->from('talk_rooms') - ->where($query->expr()->eq('id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); $result = $query->execute(); $row = $result->fetch(); @@ -564,13 +560,11 @@ public function getRoomById(int $roomId): Room { */ public function getRoomByActor(string $token, string $actorType, string $actorId): Room { $query = $this->db->getQueryBuilder(); - $query->select('r.*') - ->addSelect('a.*') - ->addSelect('s.*') - ->selectAlias('a.id', 'a_id') - ->selectAlias('s.id', 's_id') - ->selectAlias('r.id', 'r_id') - ->from('talk_rooms', 'r') + $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)), @@ -615,9 +609,9 @@ public function getRoomByToken(string $token, ?string $preloadUserId = null): Ro } $query = $this->db->getQueryBuilder(); - $query->select('r.*') - ->selectAlias('r.id', 'r_id') - ->from('talk_rooms', 'r') + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') ->where($query->expr()->eq('r.token', $query->createNamedParameter($token))); $result = $query->execute(); @@ -644,11 +638,11 @@ public function getRoomByToken(string $token, ?string $preloadUserId = null): Ro */ public function getRoomByObject(string $objectType, string $objectId): Room { $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('id', 'r_id') - ->from('talk_rooms') - ->where($query->expr()->eq('object_type', $query->createNamedParameter($objectType))) - ->andWhere($query->expr()->eq('object_id', $query->createNamedParameter($objectId))); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.object_type', $query->createNamedParameter($objectType))) + ->andWhere($query->expr()->eq('r.object_id', $query->createNamedParameter($objectId))); $result = $query->execute(); $row = $result->fetch(); @@ -678,11 +672,11 @@ public function getRoomForSession(?string $userId, ?string $sessionId): Room { } $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('r.id', 'r_id') - ->selectAlias('a.id', 'a_id') - ->selectAlias('s.id', 's_id') - ->from('talk_sessions', 's') + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_sessions', 's') ->leftJoin('s', 'talk_attendees', 'a', $query->expr()->eq('a.id', 's.attendee_id')) ->leftJoin('a', 'talk_rooms', 'r', $query->expr()->eq('a.room_id', 'r.id')) ->where($query->expr()->eq('s.session_id', $query->createNamedParameter($sessionId))) @@ -734,11 +728,11 @@ public function getOne2OneRoom(string $participant1, string $participant2): Room $name = json_encode($users); $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('id', 'r_id') - ->from('talk_rooms') - ->where($query->expr()->eq('type', $query->createNamedParameter(Room::ONE_TO_ONE_CALL, IQueryBuilder::PARAM_INT))) - ->andWhere($query->expr()->eq('name', $query->createNamedParameter($name))); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.type', $query->createNamedParameter(Room::ONE_TO_ONE_CALL, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('r.name', $query->createNamedParameter($name))); $result = $query->execute(); $row = $result->fetch(); @@ -764,11 +758,11 @@ public function getOne2OneRoom(string $participant1, string $participant2): Room */ public function getChangelogRoom(string $userId): Room { $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('id', 'r_id') - ->from('talk_rooms') - ->where($query->expr()->eq('type', $query->createNamedParameter(Room::CHANGELOG_CONVERSATION, IQueryBuilder::PARAM_INT))) - ->andWhere($query->expr()->eq('name', $query->createNamedParameter($userId))); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.type', $query->createNamedParameter(Room::CHANGELOG_CONVERSATION, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('r.name', $query->createNamedParameter($userId))); $result = $query->execute(); $row = $result->fetch(); @@ -953,9 +947,9 @@ protected function getNewToken(): string { } $query = $this->db->getQueryBuilder(); - $query->select('id') - ->from('talk_rooms') - ->where($query->expr()->eq('token', $query->createParameter('token'))); + $query->select('r.id') + ->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.token', $query->createParameter('token'))); $i = 0; while ($i < 1000) { diff --git a/lib/Migration/CreateHelpCommand.php b/lib/Migration/CreateHelpCommand.php index 8f20ce606f9..f653d27c8aa 100644 --- a/lib/Migration/CreateHelpCommand.php +++ b/lib/Migration/CreateHelpCommand.php @@ -44,13 +44,21 @@ public function getName(): string { public function run(IOutput $output): void { try { - $this->service->find('', 'help'); + $command = $this->service->find('', 'help'); + $this->service->update( + $command->getId(), + 'help', + 'talk', + 'help', + Command::RESPONSE_USER, + Command::ENABLED_ALL + ); } catch (DoesNotExistException $e) { $this->service->create( '', 'help', 'talk', - '', + 'help', Command::RESPONSE_USER, Command::ENABLED_ALL ); diff --git a/lib/Model/CommandMapper.php b/lib/Model/CommandMapper.php index 877ce82033f..5142189a75f 100644 --- a/lib/Model/CommandMapper.php +++ b/lib/Model/CommandMapper.php @@ -85,8 +85,13 @@ public function find(string $app, string $cmd): Command { $query = $this->db->getQueryBuilder(); $query->select('*') ->from($this->getTableName()) - ->where($query->expr()->eq('app', $query->createNamedParameter($app))) - ->andWhere($query->expr()->eq('command', $query->createNamedParameter($cmd))); + ->where($query->expr()->eq('command', $query->createNamedParameter($cmd))); + + if ($app === '') { + $query->andWhere($query->expr()->emptyString('app')); + } else { + $query->andWhere($query->expr()->eq('app', $query->createNamedParameter($app))); + } return $this->findEntity($query); } diff --git a/lib/Model/SelectHelper.php b/lib/Model/SelectHelper.php new file mode 100644 index 00000000000..48973cacc36 --- /dev/null +++ b/lib/Model/SelectHelper.php @@ -0,0 +1,85 @@ + + * + * @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\Talk\Model; + +use OCP\DB\QueryBuilder\IQueryBuilder; + +class SelectHelper { + public function selectRoomsTable(IQueryBuilder $query, string $alias = 'r'): void { + if ($alias !== '') { + $alias .= '.'; + } + + $query->addSelect($alias . 'type') + ->addSelect($alias . 'read_only') + ->addSelect($alias . 'lobby_state') + ->addSelect($alias . 'sip_enabled') + ->addSelect($alias . 'assigned_hpb') + ->addSelect($alias . 'token') + ->addSelect($alias . 'name') + ->addSelect($alias . 'description') + ->addSelect($alias . 'password') + ->addSelect($alias . 'active_guests') + ->addSelect($alias . 'active_since') + ->addSelect($alias . 'last_activity') + ->addSelect($alias . 'last_message') + ->addSelect($alias . 'lobby_timer') + ->addSelect($alias . 'object_type') + ->addSelect($alias . 'object_id') + ->addSelect($alias . 'listable') + ->selectAlias($alias . 'id', 'r_id'); + } + + public function selectAttendeesTable(IQueryBuilder $query, string $alias = 'a'): void { + if ($alias !== '') { + $alias .= '.'; + } + + $query->addSelect($alias . 'room_id') + ->addSelect($alias . 'actor_type') + ->addSelect($alias . 'actor_id') + ->addSelect($alias . 'display_name') + ->addSelect($alias . 'pin') + ->addSelect($alias . 'participant_type') + ->addSelect($alias . 'favorite') + ->addSelect($alias . 'notification_level') + ->addSelect($alias . 'last_joined_call') + ->addSelect($alias . 'last_read_message') + ->addSelect($alias . 'last_mention_message') + ->addSelect($alias . 'read_privacy') + ->selectAlias($alias . 'id', 'a_id'); + } + + public function selectSessionsTable(IQueryBuilder $query, string $alias = 's'): void { + if ($alias !== '') { + $alias .= '.'; + } + + $query->addSelect($alias . 'attendee_id') + ->addSelect($alias . 'session_id') + ->addSelect($alias . 'in_call') + ->addSelect($alias . 'last_ping') + ->selectAlias($alias . 'id', 's_id'); + } +} diff --git a/lib/Room.php b/lib/Room.php index e371631c5be..6943e69d56c 100644 --- a/lib/Room.php +++ b/lib/Room.php @@ -34,6 +34,7 @@ use OCA\Talk\Events\VerifyRoomPasswordEvent; use OCA\Talk\Exceptions\ParticipantNotFoundException; use OCA\Talk\Model\Attendee; +use OCA\Talk\Model\SelectHelper; use OCA\Talk\Service\ParticipantService; use OCP\AppFramework\Utility\ITimeFactory; use OCP\Comments\IComment; @@ -402,10 +403,10 @@ public function getParticipant(?string $userId): Participant { } $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('a.id', 'a_id') - ->selectAlias('s.id', 's_id') - ->from('talk_attendees', 'a') + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_attendees', 'a') ->leftJoin('a', 'talk_sessions', 's', $query->expr()->eq('a.id', 's.attendee_id')) ->where($query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS))) ->andWhere($query->expr()->eq('a.actor_id', $query->createNamedParameter($userId))) @@ -438,10 +439,10 @@ public function getParticipantBySession(?string $sessionId): Participant { } $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('a.id', 'a_id') - ->selectAlias('s.id', 's_id') - ->from('talk_sessions', 's') + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_sessions', 's') ->leftJoin('s', 'talk_attendees', 'a', $query->expr()->eq('a.id', 's.attendee_id')) ->where($query->expr()->eq('s.session_id', $query->createNamedParameter($sessionId))) ->andWhere($query->expr()->eq('a.room_id', $query->createNamedParameter($this->getId()))) @@ -464,10 +465,10 @@ public function getParticipantBySession(?string $sessionId): Participant { */ public function getParticipantByPin(string $pin): Participant { $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('a.id', 'a_id') - ->selectAlias('s.id', 's_id') - ->from('talk_attendees', 'a') + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_attendees', 'a') ->leftJoin('a', 'talk_sessions', 's', $query->expr()->eq('a.id', 's.attendee_id')) ->andWhere($query->expr()->eq('a.pin', $query->createNamedParameter($pin))) ->andWhere($query->expr()->eq('a.room_id', $query->createNamedParameter($this->getId()))) @@ -490,10 +491,10 @@ public function getParticipantByPin(string $pin): Participant { */ public function getParticipantByAttendeeId(int $attendeeId): Participant { $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('a.id', 'a_id') - ->selectAlias('s.id', 's_id') - ->from('talk_attendees', 'a') + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_attendees', 'a') ->leftJoin('a', 'talk_sessions', 's', $query->expr()->eq('a.id', 's.attendee_id')) ->andWhere($query->expr()->eq('a.id', $query->createNamedParameter($attendeeId, IQueryBuilder::PARAM_INT))) ->andWhere($query->expr()->eq('a.room_id', $query->createNamedParameter($this->getId()))) @@ -521,10 +522,10 @@ public function getParticipantByActor(string $actorType, string $actorId): Parti } $query = $this->db->getQueryBuilder(); - $query->select('*') - ->selectAlias('a.id', 'a_id') - ->selectAlias('s.id', 's_id') - ->from('talk_attendees', 'a') + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_attendees', 'a') ->leftJoin('a', 'talk_sessions', 's', $query->expr()->eq('a.id', 's.attendee_id')) ->andWhere($query->expr()->eq('a.actor_type', $query->createNamedParameter($actorType))) ->andWhere($query->expr()->eq('a.actor_id', $query->createNamedParameter($actorId))) diff --git a/lib/Service/CommandService.php b/lib/Service/CommandService.php index a6b732a6c94..1c43f77ca57 100644 --- a/lib/Service/CommandService.php +++ b/lib/Service/CommandService.php @@ -97,9 +97,6 @@ public function updateFromWeb(int $id, int $response, int $enabled): Command { */ public function update(int $id, string $cmd, string $name, string $script, int $response, int $enabled): Command { $command = $this->mapper->findById($id); - if ($command->getApp() !== '' || $command->getCommand() === 'help') { - throw new \InvalidArgumentException('app', 0); - } $command->setName($name); $command->setScript($script); @@ -141,7 +138,7 @@ protected function validateCommand(Command $command): void { } catch (DoesNotExistException $e) { throw new \InvalidArgumentException('script', 3); } - } else { + } elseif ($script !== 'help') { if (preg_match('/[`\'"]{(?:ARGUMENTS|ROOM|USER)}[`\'"]/i', $script)) { throw new \InvalidArgumentException('script-parameters', 6); } diff --git a/lib/Service/ParticipantService.php b/lib/Service/ParticipantService.php index c7975cc752c..cf78aff277a 100644 --- a/lib/Service/ParticipantService.php +++ b/lib/Service/ParticipantService.php @@ -37,6 +37,7 @@ use OCA\Talk\Exceptions\UnauthorizedException; use OCA\Talk\Model\Attendee; use OCA\Talk\Model\AttendeeMapper; +use OCA\Talk\Model\SelectHelper; use OCA\Talk\Model\Session; use OCA\Talk\Model\SessionMapper; use OCA\Talk\Participant; @@ -447,8 +448,9 @@ public function cleanGuestParticipants(Room $room): void { $this->sessionService->deleteSessionsById($sessionTableIds); $query = $this->connection->getQueryBuilder(); - $query->selectAlias('a.id', 'a_id') - ->from('talk_attendees', 'a') + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $query->from('talk_attendees', 'a') ->leftJoin('a', 'talk_sessions', 's', $query->expr()->eq('s.attendee_id', 'a.id')) ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) ->andWhere($query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_GUESTS))) @@ -561,11 +563,10 @@ public function getLastCommonReadChatMessageForMultipleRooms(array $roomIds): ar public function getParticipantsForRoom(Room $room): array { $query = $this->connection->getQueryBuilder(); - $query->select('a.*') - ->selectAlias('a.id', 'a_id') - ->addSelect('s.*') - ->selectAlias('s.id', 's_id') - ->from('talk_attendees', 'a') + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_attendees', 'a') ->leftJoin( 'a', 'talk_sessions', 's', $query->expr()->eq('s.attendee_id', 'a.id') @@ -582,11 +583,10 @@ public function getParticipantsForRoom(Room $room): array { public function getParticipantsWithSession(Room $room): array { $query = $this->connection->getQueryBuilder(); - $query->select('a.*') - ->selectAlias('a.id', 'a_id') - ->addSelect('s.*') - ->selectAlias('s.id', 's_id') - ->from('talk_attendees', 'a') + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_attendees', 'a') ->leftJoin( 'a', 'talk_sessions', 's', $query->expr()->eq('s.attendee_id', 'a.id') @@ -604,11 +604,10 @@ public function getParticipantsWithSession(Room $room): array { public function getParticipantsInCall(Room $room): array { $query = $this->connection->getQueryBuilder(); - $query->select('a.*') - ->selectAlias('a.id', 'a_id') - ->addSelect('s.*') - ->selectAlias('s.id', 's_id') - ->from('talk_sessions', 's') + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_sessions', 's') ->leftJoin( 's', 'talk_attendees', 'a', $query->expr()->eq('s.attendee_id', 'a.id') @@ -627,11 +626,10 @@ public function getParticipantsInCall(Room $room): array { public function getParticipantsByNotificationLevel(Room $room, int $notificationLevel): array { $query = $this->connection->getQueryBuilder(); - $query->select('a.*') - ->selectAlias('a.id', 'a_id') - ->addSelect('s.*') - ->selectAlias('s.id', 's_id') - ->from('talk_sessions', 's') + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_sessions', 's') ->leftJoin( 's', 'talk_attendees', 'a', $query->expr()->eq('s.attendee_id', 'a.id')