196 lines
8.7 KiB
PHP
Executable File
196 lines
8.7 KiB
PHP
Executable File
<?php
|
|
require_once __DIR__ . '/includes/session_check.php';
|
|
require_once __DIR__ . '/includes/db.php';
|
|
|
|
// Obtener el ID del usuario actual
|
|
$currentUserId = $_SESSION['user_id'] ?? null;
|
|
|
|
// Obtener mensajes programados solo del usuario actual
|
|
$stmt = $pdo->prepare(
|
|
"SELECT
|
|
s.id as schedule_id,
|
|
s.send_time,
|
|
s.status,
|
|
s.is_recurring,
|
|
s.recurring_days,
|
|
s.recurring_time,
|
|
m.id as message_id,
|
|
m.content,
|
|
r.name as recipient_name,
|
|
r.platform as recipient_platform, -- Añadimos la plataforma
|
|
u.username as creator_username
|
|
FROM schedules s
|
|
JOIN messages m ON s.message_id = m.id
|
|
JOIN recipients r ON s.recipient_id = r.id -- Usamos la nueva tabla 'recipients'
|
|
JOIN users u ON m.user_id = u.id
|
|
WHERE m.user_id = ?
|
|
AND s.status IN ('draft', 'pending', 'failed')
|
|
ORDER BY s.created_at DESC"
|
|
);
|
|
$stmt->execute([$currentUserId]);
|
|
$messages = $stmt->fetchAll();
|
|
|
|
// Función auxiliar para convertir días de recurrencia a nombres
|
|
function getDayNames($daysString) {
|
|
// Verificar si el valor es nulo o no es una cadena
|
|
if ($daysString === null || !is_string($daysString)) {
|
|
return '';
|
|
}
|
|
|
|
// Eliminar espacios en blanco y verificar si está vacío
|
|
$daysString = trim($daysString);
|
|
if (empty($daysString)) {
|
|
return '';
|
|
}
|
|
|
|
$dayMap = [
|
|
0 => 'Domingo',
|
|
1 => 'Lunes',
|
|
2 => 'Martes',
|
|
3 => 'Miércoles',
|
|
4 => 'Jueves',
|
|
5 => 'Viernes',
|
|
6 => 'Sábado'
|
|
];
|
|
|
|
$days = explode(',', $daysString);
|
|
$names = [];
|
|
|
|
foreach ($days as $day) {
|
|
$day = trim($day);
|
|
if (is_numeric($day) && isset($dayMap[(int)$day])) {
|
|
$names[] = $dayMap[(int)$day];
|
|
}
|
|
}
|
|
|
|
return !empty($names) ? implode(', ', $names) : '';
|
|
}
|
|
|
|
$pageTitle = 'Dashboard';
|
|
require_once __DIR__ . '/templates/header.php';
|
|
?>
|
|
|
|
<div class="container-fluid">
|
|
<h1 class="mt-4" data-translate="true">Dashboard</h1>
|
|
<p data-translate="true">Bienvenido, <?php echo htmlspecialchars($_SESSION['username']); ?>!</p>
|
|
<p data-translate="true">Este es el panel principal. Desde aquí podrás gestionar tus notificaciones de Discord.</p>
|
|
|
|
<div class="card shadow-sm mt-4">
|
|
<div class="card-header">
|
|
<h5 class="mb-0" data-translate="true">Tus Mensajes Programados</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<?php if (empty($messages)): ?>
|
|
<p class="text-muted" data-translate="true">No tienes mensajes programados actualmente.</p>
|
|
<?php else: ?>
|
|
<div class="table-responsive">
|
|
<table class="table table-hover">
|
|
<thead class="table-light">
|
|
<tr>
|
|
<th>Contenido</th>
|
|
<th>Destinatario</th>
|
|
<th>Programación</th>
|
|
<th>Estado</th>
|
|
<th>Acciones</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($messages as $msg): ?>
|
|
<tr>
|
|
<td>
|
|
<div class="message-preview">
|
|
<?php echo substr(strip_tags($msg['content']), 0, 80) . (strlen(strip_tags($msg['content'])) > 80 ? '...' : ''); ?>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<?php
|
|
echo htmlspecialchars($msg['recipient_name']);
|
|
if (!empty($msg['recipient_platform'])) {
|
|
$badge_class = $msg['recipient_platform'] === 'discord' ? 'bg-primary' : 'bg-info';
|
|
echo ' <span class="badge ' . $badge_class . '">' . htmlspecialchars(ucfirst($msg['recipient_platform'])) . '</span>';
|
|
}
|
|
?>
|
|
</td>
|
|
<td>
|
|
<?php
|
|
if ($msg['is_recurring']) {
|
|
echo 'Recurrente: ' . getDayNames($msg['recurring_days']) . ' a las ' .
|
|
date('H:i', strtotime($msg['recurring_time']));
|
|
} else {
|
|
echo date('d/m/Y H:i', strtotime($msg['send_time']));
|
|
}
|
|
?>
|
|
</td>
|
|
<td>
|
|
<?php
|
|
$statusClass = '';
|
|
switch($msg['status']) {
|
|
case 'pending':
|
|
$statusClass = 'text-warning';
|
|
break;
|
|
case 'sent':
|
|
$statusClass = 'text-success';
|
|
break;
|
|
case 'failed':
|
|
$statusClass = 'text-danger';
|
|
break;
|
|
case 'draft':
|
|
default:
|
|
$statusClass = 'text-muted';
|
|
}
|
|
?>
|
|
<span class="<?php echo $statusClass; ?>">
|
|
<?php echo ucfirst(htmlspecialchars($msg['status'])); ?>
|
|
</span>
|
|
</td>
|
|
<td>
|
|
<form action="create_message.php" method="GET" class="d-inline">
|
|
<input type="hidden" name="schedule_id" value="<?php echo $msg['schedule_id']; ?>">
|
|
|
|
<a href="preview_message.php?id=<?php echo $msg['message_id']; ?>" target="_blank" class="btn btn-sm btn-info" title="Previsualizar">
|
|
<i class="bi bi-eye"></i>
|
|
</a>
|
|
|
|
<button type="submit" name="action" value="edit" class="btn btn-sm btn-primary" title="Editar">
|
|
<i class="bi bi-pencil-square"></i>
|
|
</button>
|
|
</form>
|
|
|
|
<form action="includes/schedule_actions.php" method="POST" class="d-inline">
|
|
<input type="hidden" name="schedule_id" value="<?php echo $msg['schedule_id']; ?>">
|
|
<input type="hidden" name="message_id" value="<?php echo $msg['message_id']; ?>">
|
|
|
|
<button type="submit"
|
|
name="action"
|
|
value="delete"
|
|
class="btn btn-sm btn-danger"
|
|
title="Eliminar"
|
|
onclick="return confirm('¿Estás seguro de que quieres borrar este mensaje? Esta acción es irreversible.');">
|
|
<i class="bi bi-trash"></i>
|
|
</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<style>
|
|
.message-preview {
|
|
max-height: 60px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
display: -webkit-box;
|
|
-webkit-line-clamp: 3;
|
|
-webkit-box-orient: vertical;
|
|
}
|
|
</style>
|
|
|
|
<?php
|
|
require_once __DIR__ . '/templates/footer.php';
|
|
?>
|