Update chat_window.php
This commit is contained in:
+45
-26
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user