Update chat_window.php
This commit is contained in:
+38
-19
@@ -570,19 +570,20 @@ if (empty($user_id)) {
|
|||||||
const isOutgoing = msg.direction === 'outgoing';
|
const isOutgoing = msg.direction === 'outgoing';
|
||||||
const messageClass = isOutgoing ? 'message-outgoing' : 'message-incoming';
|
const messageClass = isOutgoing ? 'message-outgoing' : 'message-incoming';
|
||||||
|
|
||||||
// Debug: ver todos los datos del mensaje (incluye media_url_external/local_file/local_thumb)
|
// Debug: ver todos los datos del mensaje (prioriza media_url_external)
|
||||||
const has_media = !!(msg.media_url || msg.media_url_external || msg.local_file || msg.local_thumb);
|
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:', {
|
console.log('Procesando mensaje:', {
|
||||||
id: msg.id,
|
id: msg.id,
|
||||||
type: msg.message_type,
|
type: msg.message_type,
|
||||||
has_media_url: has_media,
|
has_media_external: has_media_external,
|
||||||
media_url: msg.media_url || msg.media_url_external || msg.local_file || msg.local_thumb,
|
effective_media: effective_media,
|
||||||
content: msg.content
|
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 = '';
|
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';
|
const isMultimedia = hasMediaUrl && msg.message_type && msg.message_type !== 'text';
|
||||||
|
|
||||||
if (isMultimedia) {
|
if (isMultimedia) {
|
||||||
@@ -590,16 +591,16 @@ if (empty($user_id)) {
|
|||||||
// Mensaje multimedia
|
// Mensaje multimedia
|
||||||
switch (msg.message_type) {
|
switch (msg.message_type) {
|
||||||
case 'image':
|
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 = '';
|
let thumbUrl = '';
|
||||||
if (msg.local_thumb) {
|
if (msg.local_thumb) {
|
||||||
thumbUrl = `/${msg.local_thumb}`;
|
thumbUrl = `/${msg.local_thumb}`;
|
||||||
} else if (msg.local_file) {
|
} else if (msg.local_file) {
|
||||||
thumbUrl = `/${msg.local_file}`;
|
thumbUrl = `/${msg.local_file}`;
|
||||||
|
} else if (msg.media_url_external) {
|
||||||
|
thumbUrl = msg.media_url_external;
|
||||||
} else if (msg.media_url) {
|
} else if (msg.media_url) {
|
||||||
thumbUrl = 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 = '';
|
let fullUrl = '';
|
||||||
@@ -616,13 +617,22 @@ if (empty($user_id)) {
|
|||||||
fullUrl = `/api/version/media-url.php?url=${encodeURIComponent(msg.media_url_external)}`;
|
fullUrl = `/api/version/media-url.php?url=${encodeURIComponent(msg.media_url_external)}`;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fullUrl = msg.media_url || thumbUrl || '';
|
// No usar msg.media_url como fuente principal para apertura; dejar vacío para forzar 'no disponible'
|
||||||
|
fullUrl = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fullUrl && fullUrl.trim() !== '') {
|
||||||
contentHtml = `
|
contentHtml = `
|
||||||
<a href="#" onclick="openImageModal(${JSON.stringify(fullUrl)}); return false;" title="Abrir imagen">
|
<a href="#" onclick="openImageModal(${JSON.stringify(fullUrl)}); return false;" title="Abrir imagen">
|
||||||
<img src="${thumbUrl || fullUrl}" alt="Imagen" class="message-media-image">
|
<img src="${thumbUrl || fullUrl}" alt="Imagen" class="message-media-image">
|
||||||
</a>`;
|
</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;
|
break;
|
||||||
case 'video':
|
case 'video':
|
||||||
contentHtml = `<video controls class="message-media-video">
|
contentHtml = `<video controls class="message-media-video">
|
||||||
@@ -641,22 +651,31 @@ if (empty($user_id)) {
|
|||||||
case 'document':
|
case 'document':
|
||||||
const filename = msg.filename || msg.content || 'Documento';
|
const filename = msg.filename || msg.content || 'Documento';
|
||||||
const fileIcon = getFileIcon(filename);
|
const fileIcon = getFileIcon(filename);
|
||||||
// Construir URL de descarga usando el endpoint proxy que añade Authorization y forzar descarga
|
// Construir URL de descarga usando media_url_external o archivo local (requerimos media_url_external)
|
||||||
let docUrl = msg.media_url || '';
|
let docSource = msg.media_url_external || msg.local_file || null;
|
||||||
if (docUrl.indexOf('api/get_media.php?id=') !== -1) {
|
let docUrl = null;
|
||||||
const parts = docUrl.split('id=');
|
if (docSource && docSource.indexOf && docSource.indexOf('api/get_media.php?id=') !== -1) {
|
||||||
|
const parts = docSource.split('id=');
|
||||||
const mid = parts[1] ? decodeURIComponent(parts[1]) : '';
|
const mid = parts[1] ? decodeURIComponent(parts[1]) : '';
|
||||||
docUrl = `/api/version/media-url.php?id=${encodeURIComponent(mid)}&download=1`;
|
docUrl = `/api/version/media-url.php?id=${encodeURIComponent(mid)}&download=1`;
|
||||||
} else if (/^https?:\/\//i.test(docUrl)) {
|
} else if (docSource && /^https?:\/\//i.test(docSource)) {
|
||||||
docUrl = `/api/version/media-url.php?url=${encodeURIComponent(docUrl)}&download=1`;
|
docUrl = `/api/version/media-url.php?url=${encodeURIComponent(docSource)}&download=1`;
|
||||||
} else {
|
} else if (docSource && docSource === msg.local_file) {
|
||||||
// fallback: intentar tratar el valor como URL
|
docUrl = `/api/version/media-url.php?local=${encodeURIComponent(docSource)}&download=1`;
|
||||||
docUrl = `/api/version/media-url.php?url=${encodeURIComponent(docUrl)}&download=1`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (docUrl) {
|
||||||
contentHtml = `<a href="${docUrl}" class="message-document" rel="noopener noreferrer" target="_blank">
|
contentHtml = `<a href="${docUrl}" class="message-document" rel="noopener noreferrer" target="_blank">
|
||||||
<i class="${fileIcon}"></i>
|
<i class="${fileIcon}"></i>
|
||||||
<span>${escapeHtml(filename)}</span>
|
<span>${escapeHtml(filename)}</span>
|
||||||
</a>`;
|
</a>`;
|
||||||
|
} else {
|
||||||
|
// 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>`;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
console.warn('Tipo multimedia desconocido:', msg.message_type);
|
console.warn('Tipo multimedia desconocido:', msg.message_type);
|
||||||
|
|||||||
Reference in New Issue
Block a user