Internal: Minor: Refine user search and invitations in social network

pull/5254/head
christianbeeznst 2 years ago
parent a531dfc35e
commit f17fd88cb9
  1. 8
      assets/vue/views/social/SocialSearch.vue
  2. 8
      src/CoreBundle/Controller/SocialController.php
  3. 19
      src/CoreBundle/Repository/MessageRepository.php

@ -120,8 +120,8 @@
<img :src="selectedUser.avatar" class="message-user-avatar" alt="User avatar"> <img :src="selectedUser.avatar" class="message-user-avatar" alt="User avatar">
<span class="message-user-name">{{ selectedUser.name }}</span> <span class="message-user-name">{{ selectedUser.name }}</span>
</div> </div>
<input type="text" class="message-modal-input" placeholder="{{ t('Subject') }}" v-model="messageSubject"> <input type="text" class="message-modal-input" :placeholder="t('Subject')" v-model="messageSubject">
<textarea class="message-modal-textarea" placeholder="{{ t('Message') }}" v-model="messageContent"></textarea> <textarea class="message-modal-textarea" :placeholder="t('Message')" v-model="messageContent"></textarea>
<button class="message-modal-send" @click="sendMessage">{{ t('Send message') }}</button> <button class="message-modal-send" @click="sendMessage">{{ t('Send message') }}</button>
</div> </div>
</div> </div>
@ -191,7 +191,7 @@ const performSearch = async () => {
users.value = data.results.map(item => ({ users.value = data.results.map(item => ({
...item, ...item,
showInvitationButton: ![3, 4, 10].includes(item.relationType) || item.id !== user.value.id showInvitationButton: (![3, 4, 10].includes(item.relationType) || item.id !== user.value.id) && !item.existingInvitations
})) }))
groups.value = [] groups.value = []
} else if (searchType.value === 'group') { } else if (searchType.value === 'group') {
@ -246,7 +246,7 @@ const sendInvitation = async () => {
users.value = users.value.filter((user) => user.id !== selectedUser.value.id) users.value = users.value.filter((user) => user.id !== selectedUser.value.id)
selectedUser.value = null selectedUser.value = null
} else { } else {
notification.showErrorNotification('Failed to send invitation.') notification.showErrorNotification(result.error)
} }
} catch (error) { } catch (error) {
notification.showErrorNotification('An error occurred while sending the invitation.') notification.showErrorNotification('An error occurred while sending the invitation.')

@ -640,7 +640,8 @@ class SocialController extends AbstractController
Request $request, Request $request,
UserRepository $userRepository, UserRepository $userRepository,
UsergroupRepository $usergroupRepository, UsergroupRepository $usergroupRepository,
TrackEOnlineRepository $trackOnlineRepository TrackEOnlineRepository $trackOnlineRepository,
MessageRepository $messageRepository
): JsonResponse { ): JsonResponse {
$query = $request->query->get('query', ''); $query = $request->query->get('query', '');
$type = $request->query->get('type', 'user'); $type = $request->query->get('type', 'user');
@ -655,6 +656,8 @@ class SocialController extends AbstractController
foreach ($results as $item) { foreach ($results as $item) {
$isUserOnline = $trackOnlineRepository->isUserOnline($item['id']); $isUserOnline = $trackOnlineRepository->isUserOnline($item['id']);
$relation = $userRepository->getUserRelationWithType($user->getId(), $item['id']); $relation = $userRepository->getUserRelationWithType($user->getId(), $item['id']);
$userReceiver = $userRepository->find($item['id']);
$existingInvitations = $messageRepository->existingInvitations($user, $userReceiver);
$formattedResults[] = [ $formattedResults[] = [
'id' => $item['id'], 'id' => $item['id'],
'name' => $item['firstname'].' '.$item['lastname'], 'name' => $item['firstname'].' '.$item['lastname'],
@ -663,6 +666,7 @@ class SocialController extends AbstractController
'status' => $isUserOnline ? 'online' : 'offline', 'status' => $isUserOnline ? 'online' : 'offline',
'url' => '/social?id='.$item['id'], 'url' => '/social?id='.$item['id'],
'relationType' => $relation['relationType'] ?? null, 'relationType' => $relation['relationType'] ?? null,
'existingInvitations' => $existingInvitations
]; ];
} }
} elseif ('group' === $type) { } elseif ('group' === $type) {
@ -882,7 +886,7 @@ class SocialController extends AbstractController
break; break;
case 'send_message': case 'send_message':
$result = MessageManager::send_message($friendUser, $subject, $content); $result = MessageManager::send_message($friendUser->getId(), $subject, $content);
break; break;

@ -145,13 +145,7 @@ class MessageRepository extends ServiceEntityRepository
public function sendInvitationToFriend(User $userSender, User $userReceiver, string $messageTitle, string $messageContent): bool public function sendInvitationToFriend(User $userSender, User $userReceiver, string $messageTitle, string $messageContent): bool
{ {
$existingInvitations = $this->findSentInvitationsByUserAndStatus($userSender, $userReceiver, [ if ($this->existingInvitations($userSender, $userReceiver)) {
Message::MESSAGE_STATUS_INVITATION_PENDING,
Message::MESSAGE_STATUS_INVITATION_ACCEPTED,
Message::MESSAGE_STATUS_INVITATION_DENIED,
]);
if (\count($existingInvitations) > 0) {
// Invitation already exists // Invitation already exists
return false; return false;
} }
@ -176,6 +170,17 @@ class MessageRepository extends ServiceEntityRepository
return true; return true;
} }
public function existingInvitations(User $userSender, User $userReceiver): bool
{
$existingInvitations = $this->findSentInvitationsByUserAndStatus($userSender, $userReceiver, [
Message::MESSAGE_STATUS_INVITATION_PENDING,
Message::MESSAGE_STATUS_INVITATION_ACCEPTED,
Message::MESSAGE_STATUS_INVITATION_DENIED,
]);
return \count($existingInvitations) > 0;
}
public function findSentInvitationsByUserAndStatus(User $userSender, User $userReceiver, array $statuses): array public function findSentInvitationsByUserAndStatus(User $userSender, User $userReceiver, array $statuses): array
{ {
$qb = $this->createQueryBuilder('m'); $qb = $this->createQueryBuilder('m');

Loading…
Cancel
Save