From 9bc4b2d27ae9bb55ee07bee65ba63854c799c1b6 Mon Sep 17 00:00:00 2001 From: Jaton David Date: Sat, 14 Dec 2024 14:56:57 +0100 Subject: [PATCH] delete message --- app/Http/Controllers/ChatController.php | 28 +-- resources/views/dashboard.blade.php | 221 ++++++++++++------------ 2 files changed, 126 insertions(+), 123 deletions(-) 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.user.name}`; - if (message.media_url.endsWith('.mp4') || message.media_url.endsWith('.mov')) { - mediaElement += ` - `; - } else if (message.media_url.endsWith('.mp3')) { - mediaElement += ` - `; - } else { - mediaElement += ` - `; - } + // Ajouter le contenu au conteneur du message + messageElement.innerHTML = messageContent; + + // Gestion des médias (si présents) + if (message.media_url) { + let mediaElement = ` +
+ ${message.user.name}`; + if (message.media_url.endsWith('.mp4') || message.media_url.endsWith('.mov')) { + mediaElement += ` + `; + } else if (message.media_url.endsWith('.mp3')) { mediaElement += ` -

- ${message.message} -

-
`; - messageElement.innerHTML = mediaElement; + `; + } else { + mediaElement += ` + `; } - messagesContainer.appendChild(messageElement); - }); - // Mettre à jour la liste de tout les messages - allMessages = data.messages; - - // Attendre que tout les médias soient chargés avant de faire défiler - const mediaElements = document.querySelectorAll('img, video'); - mediaElements.forEach(mediaElement => { - mediaElement.addEventListener('load', () => { - if (isAtBottom) { - scrollToBottom() - }; - }); + mediaElement += ` +

+ ${message.message} +

+
`; + messageElement.innerHTML = mediaElement; + } + + messagesContainer.appendChild(messageElement); + }); + + allMessages = data.messages; + + const mediaElements = document.querySelectorAll('img, video'); + mediaElements.forEach(mediaElement => { + mediaElement.addEventListener('load', () => { + if (isAtBottom) { + scrollToBottom(); + } }); + }); + + if (isAtBottom) { + scrollToBottom(); + } + }) + .catch(error => console.error('Erreur:', error)); +} - // Faire défiler jusqu'en bas (utile si il y a pas de médias) - if (isAtBottom) { - scrollToBottom() - }; - }) - .catch(error => console.error('Erreur:', error)) - } // Fonction pour démarrer la mise à jour automatique des messages function startAutoRefresh(intervalTime = 500) { @@ -229,26 +232,26 @@ function deleteMessage(messageId, discussionId) { } }) .then(response => { - if (response.ok) { - return response.json(); - } else { + if (!response.ok) { + console.error("Erreur de suppression, statut:", response.status); throw new Error("Impossible de supprimer le message."); } + return response.json(); }) .then(data => { alert(data.message || "Message supprimé."); - const messageElement = document.getElementById(`message-${messageId}`); if (messageElement) { messageElement.remove(); } - location.reload(); + loadChat(discussionId, null, null, false); }) .catch(error => { - console.error("Erreur :", error); + console.error("Erreur lors de la suppression :", error); alert("Une erreur s'est produite lors de la suppression du message."); }); } + startAutoRefresh(); \ No newline at end of file