Update chat_window.php

This commit is contained in:
lizandrogd
2026-01-21 12:50:44 -05:00
parent 6c93da460f
commit 853ba5e7ab
+45 -26
View File
@@ -570,19 +570,20 @@ if (empty($user_id)) {
const isOutgoing = msg.direction === 'outgoing';
const messageClass = isOutgoing ? 'message-outgoing' : 'message-incoming';
// Debug: ver todos los datos del mensaje (incluye media_url_external/local_file/local_thumb)
const has_media = !!(msg.media_url || msg.media_url_external || msg.local_file || msg.local_thumb);
// Debug: ver todos los datos del mensaje (prioriza media_url_external)
const has_media_external = !!(msg.media_url_external && msg.media_url_external.trim() !== '');
const effective_media = msg.media_url_external || msg.local_file || msg.local_thumb || msg.media_url || '';
console.log('Procesando mensaje:', {
id: msg.id,
type: msg.message_type,
has_media_url: has_media,
media_url: msg.media_url || msg.media_url_external || msg.local_file || msg.local_thumb,
has_media_external: has_media_external,
effective_media: effective_media,
content: msg.content
});
// Verificar si es multimedia (considerando varios orígenes de media)
// Verificar si es multimedia (validando principalmente media_url_external o archivos locales)
let contentHtml = '';
const hasMediaUrl = (msg.media_url && msg.media_url.trim() !== '') || (msg.media_url_external && msg.media_url_external.trim() !== '') || (msg.local_file && msg.local_file.trim() !== '') || (msg.local_thumb && msg.local_thumb.trim() !== '');
const hasMediaUrl = (msg.media_url_external && msg.media_url_external.trim() !== '') || (msg.local_file && msg.local_file.trim() !== '') || (msg.local_thumb && msg.local_thumb.trim() !== '');
const isMultimedia = hasMediaUrl && msg.message_type && msg.message_type !== 'text';
if (isMultimedia) {
@@ -590,16 +591,16 @@ if (empty($user_id)) {
// Mensaje multimedia
switch (msg.message_type) {
case 'image':
// Determinar miniatura y URL completa (soporte para local, api/get_media?id= y URLs directas)
// Determinar miniatura y URL completa (prioriza media_url_external o archivos locales)
let thumbUrl = '';
if (msg.local_thumb) {
thumbUrl = `/${msg.local_thumb}`;
} else if (msg.local_file) {
thumbUrl = `/${msg.local_file}`;
} else if (msg.media_url_external) {
thumbUrl = msg.media_url_external;
} else if (msg.media_url) {
thumbUrl = msg.media_url;
} else if (msg.media_url_external) {
thumbUrl = msg.media_url_external; // se intentará redirigir/proxear al abrir
}
let fullUrl = '';
@@ -616,13 +617,22 @@ if (empty($user_id)) {
fullUrl = `/api/version/media-url.php?url=${encodeURIComponent(msg.media_url_external)}`;
}
} else {
fullUrl = msg.media_url || thumbUrl || '';
// No usar msg.media_url como fuente principal para apertura; dejar vacío para forzar 'no disponible'
fullUrl = '';
}
contentHtml = `
<a href="#" onclick="openImageModal(${JSON.stringify(fullUrl)}); return false;" title="Abrir imagen">
<img src="${thumbUrl || fullUrl}" alt="Imagen" class="message-media-image">
</a>`;
if (fullUrl && fullUrl.trim() !== '') {
contentHtml = `
<a href="#" onclick="openImageModal(${JSON.stringify(fullUrl)}); return false;" title="Abrir imagen">
<img src="${thumbUrl || fullUrl}" alt="Imagen" class="message-media-image">
</a>`;
} else if (thumbUrl && thumbUrl.trim() !== '') {
// Mostrar solo la miniatura si no hay URL externa/local para abrir
contentHtml = `<img src="${thumbUrl}" alt="Imagen" class="message-media-image">`;
} else {
// No hay media disponible
contentHtml = `<div class="text-muted"><em>Imagen no disponible</em></div>`;
}
break;
case 'video':
contentHtml = `<video controls class="message-media-video">
@@ -641,22 +651,31 @@ if (empty($user_id)) {
case 'document':
const filename = msg.filename || msg.content || 'Documento';
const fileIcon = getFileIcon(filename);
// Construir URL de descarga usando el endpoint proxy que añade Authorization y forzar descarga
let docUrl = msg.media_url || '';
if (docUrl.indexOf('api/get_media.php?id=') !== -1) {
const parts = docUrl.split('id=');
// Construir URL de descarga usando media_url_external o archivo local (requerimos media_url_external)
let docSource = msg.media_url_external || msg.local_file || null;
let docUrl = null;
if (docSource && docSource.indexOf && docSource.indexOf('api/get_media.php?id=') !== -1) {
const parts = docSource.split('id=');
const mid = parts[1] ? decodeURIComponent(parts[1]) : '';
docUrl = `/api/version/media-url.php?id=${encodeURIComponent(mid)}&download=1`;
} else if (/^https?:\/\//i.test(docUrl)) {
docUrl = `/api/version/media-url.php?url=${encodeURIComponent(docUrl)}&download=1`;
} else if (docSource && /^https?:\/\//i.test(docSource)) {
docUrl = `/api/version/media-url.php?url=${encodeURIComponent(docSource)}&download=1`;
} else if (docSource && docSource === msg.local_file) {
docUrl = `/api/version/media-url.php?local=${encodeURIComponent(docSource)}&download=1`;
}
if (docUrl) {
contentHtml = `<a href="${docUrl}" class="message-document" rel="noopener noreferrer" target="_blank">
<i class="${fileIcon}"></i>
<span>${escapeHtml(filename)}</span>
</a>`;
} else {
// fallback: intentar tratar el valor como URL
docUrl = `/api/version/media-url.php?url=${encodeURIComponent(docUrl)}&download=1`;
// Mostrar estado no disponible en vez de enlace vacío
contentHtml = `<div class="message-document" style="opacity:0.6;">
<i class="${fileIcon}"></i>
<span>${escapeHtml(filename)} (No disponible)</span>
</div>`;
}
contentHtml = `<a href="${docUrl}" class="message-document" rel="noopener noreferrer" target="_blank">
<i class="${fileIcon}"></i>
<span>${escapeHtml(filename)}</span>
</a>`;
break;
default:
console.warn('Tipo multimedia desconocido:', msg.message_type);