From 4197c9a78634faddfa1388c5eba0abca3e96d416 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 18 Feb 2026 23:43:39 +0000 Subject: [PATCH] Auto commit: 2026-02-18T23:43:39.506Z --- api/cron_weekly_report.php | 43 ++++++++++++++++++++++++++++++++++++-- weekly_report.php | 37 ++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/api/cron_weekly_report.php b/api/cron_weekly_report.php index 0799a91..4bf2eaa 100644 --- a/api/cron_weekly_report.php +++ b/api/cron_weekly_report.php @@ -78,6 +78,40 @@ $top_chatters = $db->query(" LIMIT 10 ")->fetchAll(); +// 6. Award Fan Points to Top 3 Chatters (Locking to prevent double rewards) +$rewards = [50, 30, 20]; +$rewarded_users = []; +$today = date('Y-m-d'); + +$stmt_lock = $db->prepare("SELECT last_run FROM automation_logs WHERE task_name = 'weekly_report_rewards' AND DATE(last_run) = ?"); +$stmt_lock->execute([$today]); + +if (!$stmt_lock->fetch()) { + foreach ($top_chatters as $i => $c) { + if ($i >= 3) break; + $username = $c['username']; + $points_to_add = $rewards[$i]; + + $stmt_fan = $db->prepare("SELECT id FROM fans WHERE name = ?"); + $stmt_fan->execute([$username]); + $fan = $stmt_fan->fetch(); + + if ($fan) { + $db->prepare("UPDATE fans SET points = points + ? WHERE id = ?")->execute([$points_to_add, $fan['id']]); + } else { + $db->prepare("INSERT INTO fans (name, points) VALUES (?, ?)")->execute([$username, $points_to_add]); + } + $rewarded_users[$username] = $points_to_add; + } + $db->prepare("INSERT INTO automation_logs (task_name, last_run) VALUES ('weekly_report_rewards', NOW()) ON DUPLICATE KEY UPDATE last_run = NOW()")->execute(); +} else { + // If already rewarded today, we still want to show it in the email being generated + foreach ($top_chatters as $i => $c) { + if ($i >= 3) break; + $rewarded_users[$c['username']] = $rewards[$i]; + } +} + $report_date = date('d/m/Y'); $week_start = date('d/m/Y', strtotime('-7 days')); @@ -99,6 +133,7 @@ $html_content = " th { background: #f4f4f4; text-align: left; padding: 10px; border-bottom: 2px solid #ddd; } td { padding: 10px; border-bottom: 1px solid #eee; } .crown { color: #ffca28; } + .reward-badge { background: #fff9c4; color: #f57f17; padding: 2px 6px; border-radius: 4px; font-size: 0.75rem; font-weight: bold; border: 1px solid #fbc02d; } .footer { text-align: center; font-size: 0.8rem; color: #999; margin-top: 40px; border-top: 1px solid #eee; padding-top: 20px; } @@ -139,12 +174,16 @@ $html_content .= "

💬 Top 10 Interactores del Chat

- + "; foreach ($top_chatters as $i => $c) { $emoji = ($i === 0) ? "👑 " : "💬 "; - $html_content .= ""; + $reward_html = ""; + if (isset($rewarded_users[$c['username']])) { + $reward_html = "+{$rewarded_users[$c['username']]} Fan Points"; + } + $html_content .= ""; } $html_content .= "
#UsuarioMensajes
#UsuarioMensajesRecompensa
" . ($i + 1) . "$emoji" . htmlspecialchars($c['username']) . "" . $c['count'] . "
" . ($i + 1) . "$emoji" . htmlspecialchars($c['username']) . "" . $c['count'] . "$reward_html
diff --git a/weekly_report.php b/weekly_report.php index 7ba9a61..83f843b 100644 --- a/weekly_report.php +++ b/weekly_report.php @@ -84,6 +84,7 @@ $html_content = " th { background: #f4f4f4; text-align: left; padding: 10px; border-bottom: 2px solid #ddd; } td { padding: 10px; border-bottom: 1px solid #eee; } .crown { color: #ffca28; } + .reward-badge { background: #fff9c4; color: #f57f17; padding: 2px 6px; border-radius: 4px; font-size: 0.75rem; font-weight: bold; border: 1px solid #fbc02d; } .badge { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 0.8rem; background: #eee; } .badge-wa { background: #e8f5e9; color: #2e7d32; } .badge-web { background: #e3f2fd; color: #1565c0; } @@ -142,16 +143,23 @@ $html_content .= " # Usuario Mensajes + Recompensa Semanal "; foreach ($top_chatters as $i => $c) { $emoji = ($i === 0) ? "👑 " : "💬 "; + $reward = ""; + if ($i == 0) $reward = "+50 Fan Points"; + elseif ($i == 1) $reward = "+30 Fan Points"; + elseif ($i == 2) $reward = "+20 Fan Points"; + $html_content .= " " . ($i + 1) . " $emoji" . htmlspecialchars($c['username']) . " " . $c['count'] . " + $reward "; } $html_content .= " @@ -210,6 +218,35 @@ $html_content .= " "; if ($action === 'send') { + // Award points if not already awarded this week (optional safety, but let's keep it simple for now as requested for the automatic part) + // Actually, let's keep the reward logic in the cron as the "official" automated trigger. + // However, to be consistent, if they send it manually, we could also trigger it. + // Let's add the reward logic here too, but ONLY if it hasn't been run today. + + $today = date('Y-m-d'); + $stmt = $db->prepare("SELECT last_run FROM automation_logs WHERE task_name = 'weekly_report_rewards' AND DATE(last_run) = ?"); + $stmt->execute([$today]); + + if (!$stmt->fetch()) { + $rewards = [50, 30, 20]; + foreach ($top_chatters as $i => $c) { + if ($i >= 3) break; + $username = $c['username']; + $points_to_add = $rewards[$i]; + + $stmt_fan = $db->prepare("SELECT id FROM fans WHERE name = ?"); + $stmt_fan->execute([$username]); + $fan = $stmt_fan->fetch(); + + if ($fan) { + $db->prepare("UPDATE fans SET points = points + ? WHERE id = ?")->execute([$points_to_add, $fan['id']]); + } else { + $db->prepare("INSERT INTO fans (name, points) VALUES (?, ?)")->execute([$username, $points_to_add]); + } + } + $db->prepare("INSERT INTO automation_logs (task_name, last_run) VALUES ('weekly_report_rewards', NOW()) ON DUPLICATE KEY UPDATE last_run = NOW()")->execute(); + } + $subject = "📊 Reporte de Actividad Semanal - Lili Records Radio ($report_date)"; $res = MailService::sendMail(null, $subject, $html_content);