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">
<span class="message-user-name">{{ selectedUser.name }}</span>
</div>
<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>
<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>
<button class="message-modal-send" @click="sendMessage">{{ t('Send message') }}</button>
</div>
</div>
@ -191,7 +191,7 @@ const performSearch = async () => {
users.value = data.results.map(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 = []
} else if (searchType.value === 'group') {
@ -246,7 +246,7 @@ const sendInvitation = async () => {
users.value = users.value.filter((user) => user.id !== selectedUser.value.id)
selectedUser.value = null
} else {
notification.showErrorNotification('Failed to send invitation.')
notification.showErrorNotification(result.error)
}
} catch (error) {
notification.showErrorNotification('An error occurred while sending the invitation.')

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

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

Loading…
Cancel
Save