diff --git a/app/Http/Controllers/ChatController.php b/app/Http/Controllers/ChatController.php index b8bc3bb..a45f75d 100644 --- a/app/Http/Controllers/ChatController.php +++ b/app/Http/Controllers/ChatController.php @@ -80,7 +80,7 @@ public function storeMessage(Request $request, $chatId) return response()->json(['error' => 'Chat not found or unauthorized.'], 404); } - if ($chat->members->count() == 2) { + if ($chat->members->count() == 2) { $otherMember = $chat->members->firstWhere('id', '!=', auth()->id()); $friendship = Friendship::where(function ($query) use ($otherMember) { @@ -165,25 +165,25 @@ public function storeChat(Request $request) return redirect()->route('dashboard')->with('success', 'Discussion créée avec succès !'); } - public function leaveChat($chatId) - { - $chat = Chat::find($chatId); + public function leaveChat($chatId) + { + $chat = Chat::find($chatId); - if (!$chat) { - return response()->json(['error' => 'Chat not found.'], 404); - } + if (!$chat) { + return response()->json(['error' => 'Chat not found.'], 404); + } - $chat->users()->detach(auth()->id()); + $chat->users()->detach(auth()->id()); - return response()->json(['message' => 'You left the chat.']); - } + return response()->json(['message' => 'You left the chat.']); + } - function deleteMessage($messageId) + public function deleteMessage($discussionId, $messageId) { - $message = Message::find($messageId); + $message = Message::where('id', $messageId)->where('chat_id', $discussionId)->first(); if (!$message) { - return response()->json(['error' => 'Message not found.'], 404); + return response()->json(['error' => 'Message not found or does not belong to this discussion.'], 404); } if ($message->user_id !== auth()->id()) { @@ -192,6 +192,6 @@ function deleteMessage($messageId) $message->delete(); - return response()->json(['message' => 'Message deleted.']); + return response()->json(['message' => 'Message deleted successfully.']); } } diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 2fb17af..9b8ecc5 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -24,125 +24,128 @@ // Fonction pour charger la discussion function loadChat(chatId, discussionName, discussionPicture, newOpening = true) { - const messagesContainer = document.getElementById('messages'); + const messagesContainer = document.getElementById('messages'); - // Masquer le placeholder et afficher la zone de chat - document.getElementById('chat-placeholder').style.display = 'none'; - document.getElementById('chat-area').style.display = 'flex'; + // Masquer le placeholder et afficher la zone de chat + document.getElementById('chat-placeholder').style.display = 'none'; + document.getElementById('chat-area').style.display = 'flex'; - // Vérifier si la discussion est déjà chargée - if (currentChatId !== chatId) { - // Réinitialiser la liste de tout les messages - allMessages = []; - document.getElementById('messages').innerHTML = ''; + // Réinitialiser les messages si on change de discussion + if (currentChatId !== chatId) { + allMessages = []; + messagesContainer.innerHTML = ''; - // Récupérer le champ contenant l'id pour la création de capsule via son id et mettre à jour l'action - const hiddenInput = document.getElementById('discussion-id'); - if (hiddenInput) hiddenInput.value = chatId; - } + const hiddenInput = document.getElementById('discussion-id'); + if (hiddenInput) hiddenInput.value = chatId; + } - // Mettre à jour l'ID de la discussion actuelle - currentChatId = chatId; + currentChatId = chatId; - // Mettre à jour le titre du header si nécessaire - if (newOpening) { - const headerTitle = document.querySelector('.headerTitle'); - if (headerTitle) headerTitle.textContent = discussionName; + if (newOpening) { + const headerTitle = document.querySelector('.headerTitle'); + if (headerTitle) headerTitle.textContent = discussionName; + + const headerImage = document.querySelector('.headerImage'); + if (headerImage) headerImage.src = discussionPicture; + } - const headerImage = document.querySelector('.headerImage'); - if (headerImage) headerImage.src = discussionPicture; + fetch(`/chat/${chatId}/messages`, { + method: 'GET', + headers: { + 'X-Requested-With': 'XMLHttpRequest', + 'X-CSRF-TOKEN': '{{ csrf_token() }}' } + }) + .then(response => response.json()) + .then(data => { + let newMessages = []; + if (JSON.stringify(allMessages) === JSON.stringify(data.messages)) { + return; + } else if (allMessages.length === 0) { + newMessages = data.messages; + } else { + newMessages = data.messages.filter(message => !allMessages.some(m => m.id === message.id)); + } - fetch(`/chat/${chatId}/messages`, { - method: 'GET', - headers: { - 'X-Requested-With': 'XMLHttpRequest', - 'X-CSRF-TOKEN': '{{ csrf_token() }}' - } - }) - .then(response => response.json()) - .then(data => { - let newMessages = []; - // Si la liste de tout les messages correspond à la liste actuelle - if (JSON.stringify(allMessages) === JSON.stringify(data.messages)) { - return; - } else if (allMessages.length === 0) { - // Si la liste de tout les messages est vide - newMessages = data.messages; - } else { - // Récupérer la liste des messages qui ne sont pas déjà affichés - newMessages = data.messages.filter(message => !allMessages.some(m => m.id === message.id)); + const isAtBottom = messagesContainer.scrollHeight - messagesContainer.scrollTop <= messagesContainer.clientHeight + 0.6; + + newMessages.forEach(message => { + const isCurrentUser = message.user_id === {{ auth()->id() }}; + const messageElement = document.createElement('div'); + messageElement.id = `message-${message.id}`; + messageElement.className = `flex ${isCurrentUser ? 'justify-end' : 'justify-start'} mb-2`; + + // Construction du contenu du message + let messageContent = ` +
+ ${message.user.name} + ${message.message} +
`; + + // Ajout de la poubelle pour les messages de l'utilisateur + if (isCurrentUser) { + messageContent += ` + `; } - // Récupérer la position dans le scroll et vérifier si on est tout en bas - // Utile pour savoir si on doit défiler jusqu'en bas après l'ajout des nouveaux messages ou si l'utilisateur est entrain de consulter des anciens messages - const isAtBottom = messagesContainer.scrollHeight - messagesContainer.scrollTop <= messagesContainer.clientHeight + 0.6; - - // Parcourir les messages et les ajouter - newMessages.forEach(message => { - const isCurrentUser = message.user_id === {{ auth()->id() }}; - const messageElement = document.createElement('div'); - messageElement.className = `flex ${isCurrentUser ? 'justify-end' : 'justify-start'} mb-2`; - messageElement.innerHTML = ` - -- - ${message.user.name} - ${message.message} -
`; - - // Gestion des médias - if (message.media_url) { - let mediaElement = - ` -- ${message.message} -
-+ ${message.message} +
+