Files
sistema_funcionando_lastwar/sent_messages.php
nickpons666 48671dc88e Implementar tema claro/oscuro con Bootstrap 5
- Agregar atributo data-bs-theme al HTML
- Implementar botón toggle con íconos sol/luna en navegación
- Agregar estilos CSS para modo oscuro (variables, componentes, tablas)
- Implementar JavaScript para funcionalidad toggle con persistencia localStorage
- Agregar detección automática del tema del sistema
- Fix específico para columna "Contenido (Previo)" en sent_messages.php
- Mejorar Content Security Policy para archivos .map de Bootstrap
- Configuración de entorno automática para .env.pruebas

Características:
- Toggle claro/oscuro con persistencia
- Detección automática de preferencias del sistema
- Estilos personalizados para componentes en modo oscuro
- Compatibilidad con todas las páginas del sistema
2026-01-17 16:13:19 -06:00

172 lines
9.7 KiB
PHP
Executable File

<?php
require_once __DIR__ . '/includes/session_check.php';
require_once __DIR__ . '/includes/db.php';
try {
$query = "
SELECT
sm.id as sent_message_id,
sm.platform_message_id,
s.sent_at,
m.content,
u.username as creator_username,
r.name as recipient_name,
r.type as recipient_type,
r.platform,
r.platform_id
FROM sent_messages sm
JOIN schedules s ON sm.schedule_id = s.id
JOIN messages m ON s.message_id = m.id
JOIN users u ON m.user_id = u.id
JOIN recipients r ON sm.recipient_id = r.id
ORDER BY s.sent_at DESC
";
$stmt = $pdo->prepare($query);
$stmt->execute();
$sentMessages = $stmt->fetchAll();
} catch (PDOException $e) {
error_log("Error al consultar mensajes enviados: " . $e->getMessage());
$sentMessages = [];
$db_error = "Error de base de datos: " . $e->getMessage();
}
$pageTitle = 'Mensajes Enviados';
require_once __DIR__ . '/templates/header.php';
?>
<div class="container-fluid">
<h1 class="mt-4" data-translate="true">Mensajes Enviados</h1>
<?php if (isset($db_error)): ?>
<div class="alert alert-danger"><?= htmlspecialchars($db_error) ?></div>
<?php endif; ?>
<?php
// Obtener la plataforma del mensaje que se está eliminando (si está presente en la URL)
$platform = $_GET['platform'] ?? 'Discord'; // Por defecto a Discord para mantener compatibilidad
$platform = ucfirst(strtolower($platform)); // Asegurar que la primera letra sea mayúscula
?>
<?php if (isset($_GET['success']) && $_GET['success'] === 'deleted'): ?>
<div class="alert alert-success"><span data-translate="true">Mensaje eliminado de</span> <?= htmlspecialchars($platform) ?> <span data-translate="true">con éxito</span>.</div>
<?php elseif (isset($_GET['error'])): ?>
<div class="alert alert-danger">
<?php
$errorMessage = '<span data-translate="true">Ocurrió un error desconocido.</span>';
if ($_GET['error'] === 'delete_failed') {
$errorMessage = "<span data-translate='true'>No se pudo eliminar el mensaje de</span> {$platform}.";
if (isset($_GET['message'])) {
$errorMessage .= ' ' . htmlspecialchars($_GET['message']);
}
}
echo htmlspecialchars($errorMessage);
?>
</div>
<?php endif; ?>
<div class="card shadow-sm" id="sent-messages-table">
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead class="table-light">
<tr>
<th data-translate="true">Plataforma</th>
<th data-translate="true">Destinatario</th>
<th data-translate="true">Contenido (Previo)</th>
<th data-translate="true">Fecha de Envío</th>
<th data-translate="true">Creado por</th>
<th class="text-center" data-translate="true">Acciones</th>
</tr>
</thead>
<tbody>
<?php if (empty($sentMessages)): ?>
<tr>
<td colspan="6" class="text-center text-muted" data-translate="true">No se han enviado mensajes todavía.</td>
</tr>
<?php else: ?>
<?php foreach ($sentMessages as $msg): ?>
<tr>
<td>
<span class="badge <?= $msg['platform'] === 'discord' ? 'bg-primary' : 'bg-info text-dark' ?>">
<i class="bi bi-<?= $msg['platform'] === 'discord' ? 'discord' : 'telegram' ?>"></i>
<?= htmlspecialchars(ucfirst($msg['platform'])) ?>
</span>
</td>
<td><?= htmlspecialchars($msg['recipient_name']) . ' <span class="text-muted">(' . $msg['recipient_type'] . ')</span>' ?></td>
<td class="text-break">
<div class="message-preview text-content">
<?= substr(strip_tags($msg['content']), 0, 100) ?>...
</div>
</td>
<td><?= date('d/m/Y H:i', strtotime($msg['sent_at'])) ?></td>
<td><?= htmlspecialchars($msg['creator_username']) ?></td>
<td class="text-center">
<div class="d-flex gap-2 justify-content-center">
<form action="create_message.php" method="POST" class="d-inline">
<input type="hidden" name="action" value="reuse">
<input type="hidden" name="messageContent" value="<?= htmlspecialchars($msg['content'], ENT_QUOTES, 'UTF-8') ?>">
<button type="submit" class="btn btn-sm btn-secondary" title="Reutilizar este mensaje" data-translate-title="true">
<i class="bi bi-recycle"></i>
</button>
</form>
<?php if (!empty($msg['platform_message_id'])): ?>
<?php if ($msg['platform'] === 'discord'): ?>
<form action="includes/discord_actions.php" method="POST" onsubmit="return confirm(this.querySelector('[data-translate-confirm]').getAttribute('data-translate-confirm'));" class="d-inline">
<input type="hidden" name="action" value="delete_message">
<input type="hidden" name="sent_message_id" value="<?= $msg['sent_message_id'] ?>">
<input type="hidden" name="platform_message_id" value="<?= htmlspecialchars($msg['platform_message_id'], ENT_QUOTES, 'UTF-8') ?>">
<input type="hidden" name="channel_id" value="<?= htmlspecialchars($msg['platform_id'], ENT_QUOTES, 'UTF-8') ?>">
<input type="hidden" name="confirm_message" value="¿Estás seguro de que quieres ELIMINAR este mensaje de Discord?" data-translate-confirm="¿Estás seguro de que quieres ELIMINAR este mensaje de Discord?">
<button type="submit" class="btn btn-sm btn-danger" title="Eliminar de Discord" data-translate-title="true">
<i class="bi bi-trash-fill"></i>
</button>
</form>
<?php elseif ($msg['platform'] === 'telegram'): ?>
<form action="includes/telegram_actions.php" method="POST" onsubmit="return confirm(this.querySelector('[data-translate-confirm]').getAttribute('data-translate-confirm'));" class="d-inline">
<input type="hidden" name="action" value="delete_message">
<input type="hidden" name="sent_message_id" value="<?= $msg['sent_message_id'] ?>">
<input type="hidden" name="platform_message_id" value="<?= htmlspecialchars($msg['platform_message_id'], ENT_QUOTES, 'UTF-8') ?>">
<input type="hidden" name="chat_id" value="<?= htmlspecialchars($msg['platform_id'], ENT_QUOTES, 'UTF-8') ?>">
<input type="hidden" name="confirm_message" value="¿Estás seguro de que quieres ELIMINAR este mensaje de Telegram?" data-translate-confirm="¿Estás seguro de que quieres ELIMINAR este mensaje de Telegram?">
<button type="submit" class="btn btn-sm btn-danger" title="Eliminar de Telegram" data-translate-title="true">
<i class="bi bi-trash-fill"></i>
</button>
</form>
<?php endif; ?>
<?php endif; ?>
</div>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<style>
.message-preview {
max-height: 80px;
overflow-y: auto;
padding: 8px;
background-color: var(--bs-light);
border: 1px solid var(--bs-border-color);
border-radius: 5px;
font-size: 0.9em;
min-width: 200px;
}
[data-bs-theme="dark"] .message-preview {
background-color: var(--bs-dark-bg-subtle);
border-color: var(--bs-border-color-translucent);
color: var(--bs-body-color);
}
</style>
<?php require_once __DIR__ . '/templates/footer.php'; ?>