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
- | # | Usuario | Mensajes |
+ | # | Usuario | Mensajes | Recompensa |
";
foreach ($top_chatters as $i => $c) {
$emoji = ($i === 0) ? "👑 " : "💬 ";
- $html_content .= "| " . ($i + 1) . " | $emoji" . htmlspecialchars($c['username']) . " | " . $c['count'] . " |
";
+ $reward_html = "";
+ if (isset($rewarded_users[$c['username']])) {
+ $reward_html = "+{$rewarded_users[$c['username']]} Fan Points";
+ }
+ $html_content .= "| " . ($i + 1) . " | $emoji" . htmlspecialchars($c['username']) . " | " . $c['count'] . " | $reward_html |
";
}
$html_content .= "
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);