Files
lastwar/includes/message_handler.php

230 lines
6.4 KiB
PHP
Executable File

<?php
require_once __DIR__ . '/activity_logger.php';
function createMessage(array $data): int
{
$pdo = getDbConnection();
$stmt = $pdo->prepare("
INSERT INTO messages (user_id, content, created_at)
VALUES (?, ?, NOW())
");
$stmt->execute([$data['user_id'], $data['content']]);
return (int) $pdo->lastInsertId();
}
function createSchedule(array $data): int
{
$pdo = getDbConnection();
$stmt = $pdo->prepare("
INSERT INTO schedules (
message_id, recipient_id, send_time, status,
is_recurring, recurring_days, recurring_time, created_at
) VALUES (?, ?, ?, ?, ?, ?, ?, NOW())
");
$stmt->execute([
$data['message_id'],
$data['recipient_id'],
$data['send_time'],
$data['status'] ?? 'pending',
($data['is_recurring'] ?? false) ? 1 : 0,
$data['recurring_days'] ?? null,
$data['recurring_time'] ?? null
]);
return (int) $pdo->lastInsertId();
}
function handleCreateMessage(array $postData): array
{
$required = ['content', 'recipient_id', 'send_type'];
foreach ($required as $field) {
if (empty($postData[$field])) {
return ['success' => false, 'error' => "Falta el campo: {$field}"];
}
}
$userId = $_SESSION['user_id'] ?? 0;
$messageId = createMessage([
'user_id' => $userId,
'content' => $postData['content']
]);
$sendTime = match ($postData['send_type']) {
'now' => date('Y-m-d H:i:s'),
'later' => $postData['send_datetime'],
'recurring' => calculateNextSendTime($postData['recurring_days'], $postData['recurring_time']),
default => date('Y-m-d H:i:s')
};
$scheduleId = createSchedule([
'message_id' => $messageId,
'recipient_id' => $postData['recipient_id'],
'send_time' => $sendTime,
'status' => $postData['send_type'] === 'now' ? 'pending' : 'pending',
'is_recurring' => $postData['send_type'] === 'recurring',
'recurring_days' => $postData['recurring_days'] ?? null,
'recurring_time' => $postData['recurring_time'] ?? null
]);
logActivity($userId, 'create_message', "Mensaje creado ID: {$messageId}, Programación ID: {$scheduleId}");
return [
'success' => true,
'message_id' => $messageId,
'schedule_id' => $scheduleId
];
}
function updateMessage(int $messageId, string $content): bool
{
$pdo = getDbConnection();
$stmt = $pdo->prepare("UPDATE messages SET content = ? WHERE id = ?");
return $stmt->execute([$content, $messageId]);
}
function updateSchedule(int $scheduleId, array $data): bool
{
$pdo = getDbConnection();
$fields = [];
$values = [];
foreach ($data as $key => $value) {
$fields[] = "{$key} = ?";
$values[] = $value;
}
$values[] = $scheduleId;
$sql = "UPDATE schedules SET " . implode(', ', $fields) . " WHERE id = ?";
$stmt = $pdo->prepare($sql);
return $stmt->execute($values);
}
function handleEditMessage(int $messageId, array $postData): array
{
if (empty($postData['content']) || empty($postData['recipient_id'])) {
return ['success' => false, 'error' => 'Faltan campos requeridos'];
}
$userId = $_SESSION['user_id'] ?? 0;
updateMessage($messageId, $postData['content']);
if (!empty($postData['schedule_id'])) {
$sendTime = match ($postData['send_type']) {
'now' => date('Y-m-d H:i:s'),
'later' => $postData['send_datetime'],
'recurring' => calculateNextSendTime($postData['recurring_days'] ?? '', $postData['recurring_time'] ?? ''),
default => $postData['send_datetime']
};
updateSchedule((int) $postData['schedule_id'], [
'recipient_id' => $postData['recipient_id'],
'send_time' => $sendTime,
'is_recurring' => $postData['send_type'] === 'recurring',
'recurring_days' => $postData['recurring_days'] ?? null,
'recurring_time' => $postData['recurring_time'] ?? null,
'status' => 'pending'
]);
}
logActivity($userId, 'edit_message', "Mensaje actualizado ID: {$messageId}");
return ['success' => true, 'message_id' => $messageId];
}
function deleteMessage(int $messageId): bool
{
$pdo = getDbConnection();
$stmt = $pdo->prepare("DELETE FROM schedules WHERE message_id = ?");
$stmt->execute([$messageId]);
$stmt = $pdo->prepare("DELETE FROM messages WHERE id = ?");
$result = $stmt->execute([$messageId]);
if ($result) {
logActivity($_SESSION['user_id'] ?? 0, 'delete_message', "Mensaje eliminado ID: {$messageId}");
}
return $result;
}
function getMessageById(int $messageId): ?array
{
$pdo = getDbConnection();
$stmt = $pdo->prepare("SELECT * FROM messages WHERE id = ?");
$stmt->execute([$messageId]);
return $stmt->fetch() ?: null;
}
function getScheduleById(int $scheduleId): ?array
{
$pdo = getDbConnection();
$stmt = $pdo->prepare("SELECT * FROM schedules WHERE id = ?");
$stmt->execute([$scheduleId]);
return $stmt->fetch() ?: null;
}
function getScheduledMessages(?int $userId = null): array
{
$pdo = getDbConnection();
$sql = "
SELECT s.*, m.content, r.name as recipient_name, r.platform, r.platform_id
FROM schedules s
JOIN messages m ON s.message_id = m.id
JOIN recipients r ON s.recipient_id = r.id
";
if ($userId) {
$sql .= " WHERE m.user_id = ?";
$sql .= " ORDER BY s.send_time ASC";
$stmt = $pdo->prepare($sql);
$stmt->execute([$userId]);
} else {
$sql .= " ORDER BY s.send_time ASC";
$stmt = $pdo->query($sql);
}
return $stmt->fetchAll();
}
function getSentMessages(?int $userId = null, ?int $limit = 50): array
{
$pdo = getDbConnection();
$sql = "
SELECT sm.*, r.name as recipient_name, r.platform, r.platform_id
FROM sent_messages sm
JOIN recipients r ON sm.recipient_id = r.id
";
if ($userId) {
$sql .= " WHERE sm.user_id = ?";
$sql .= " ORDER BY sm.sent_at DESC LIMIT ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$userId, $limit]);
} else {
$sql .= " ORDER BY sm.sent_at DESC LIMIT ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$limit]);
}
return $stmt->fetchAll();
}