query("UPDATE newsletter_subscribers SET is_active = 0, unsubscribed_at = NOW() WHERE id = $sid"); $success = 'Subscriber marked as unsubscribed.'; } // Re-subscribe if (isset($_GET['resubscribe'])) { $sid = (int)$_GET['resubscribe']; $conn->query("UPDATE newsletter_subscribers SET is_active = 1, unsubscribed_at = NULL WHERE id = $sid"); $success = 'Subscriber reactivated.'; } // Delete single if (isset($_GET['delete'])) { $sid = (int)$_GET['delete']; $conn->query("DELETE FROM newsletter_subscribers WHERE id = $sid"); $success = 'Subscriber deleted permanently.'; } // Bulk actions if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['bulk_ids'])) { $ids = array_map('intval', (array)$_POST['bulk_ids']); $id_str = implode(',', $ids); if ($_POST['bulk_action'] === 'unsubscribe') { $conn->query("UPDATE newsletter_subscribers SET is_active = 0, unsubscribed_at = NOW() WHERE id IN ($id_str)"); $success = count($ids) . ' subscriber(s) unsubscribed.'; } elseif ($_POST['bulk_action'] === 'delete') { $conn->query("DELETE FROM newsletter_subscribers WHERE id IN ($id_str)"); $success = count($ids) . ' subscriber(s) deleted.'; } } // CSV Export if (isset($_GET['export'])) { $status_exp = $_GET['export'] === 'active' ? 'WHERE is_active = 1' : ''; $exp_result = $conn->query("SELECT email, name, source_survey_name, created_at FROM newsletter_subscribers $status_exp ORDER BY created_at DESC"); header('Content-Type: text/csv; charset=UTF-8'); header('Content-Disposition: attachment; filename="psh_subscribers_' . date('Y-m-d') . '.csv"'); $out = fopen('php://output', 'w'); fputcsv($out, ['Email', 'Name', 'Source Survey', 'Subscribed Date']); while ($row = $exp_result->fetch_assoc()) { fputcsv($out, [$row['email'], $row['name'], $row['source_survey_name'], $row['created_at']]); } fclose($out); exit; } // ── FILTERS ────────────────────────────────────────────────── $status_filter = $_GET['status'] ?? 'active'; $search = isset($_GET['search']) ? $conn->real_escape_string(trim($_GET['search'])) : ''; $where = ['1=1']; if ($status_filter === 'active') $where[] = 'is_active = 1'; if ($status_filter === 'unsubscribed') $where[] = 'is_active = 0'; if (!empty($search)) $where[] = "(email LIKE '%$search%' OR name LIKE '%$search%')"; $where_sql = implode(' AND ', $where); // Pagination $per_page = 30; $page_num = max(1, (int)($_GET['page'] ?? 1)); $offset = ($page_num - 1) * $per_page; $total_rows = $conn->query("SELECT COUNT(*) as c FROM newsletter_subscribers WHERE $where_sql")->fetch_assoc()['c']; $total_pages = ceil($total_rows / $per_page); $subs = $conn->query("SELECT * FROM newsletter_subscribers WHERE $where_sql ORDER BY created_at DESC LIMIT $per_page OFFSET $offset"); // Stats $active_count = $conn->query("SELECT COUNT(*) as c FROM newsletter_subscribers WHERE is_active = 1")->fetch_assoc()['c']; $unsub_count = $conn->query("SELECT COUNT(*) as c FROM newsletter_subscribers WHERE is_active = 0")->fetch_assoc()['c']; $today_count = $conn->query("SELECT COUNT(*) as c FROM newsletter_subscribers WHERE DATE(created_at) = CURDATE()")->fetch_assoc()['c']; $total_all = $active_count + $unsub_count; // Top source surveys $top_sources = $conn->query("SELECT source_survey_name, COUNT(*) as cnt FROM newsletter_subscribers WHERE is_active = 1 AND source_survey_name IS NOT NULL GROUP BY source_survey_name ORDER BY cnt DESC LIMIT 5"); $page_title = 'Newsletter Subscribers'; include 'includes/header.php'; ?>

Newsletter Subscribers

Members who opted in for survey updates via the review form.

📥 Export Active CSV 📥 Export All CSV ← Dashboard
Active
Today
Unsubscribed
Total Ever
num_rows > 0): ?>
Top Survey Pages
fetch_assoc()) $top_rows[] = $tr; $max_cnt = $top_rows[0]['cnt'] ?? 1; foreach ($top_rows as $tr): ?>
| subscriber(s)
num_rows > 0): ?>
fetch_assoc()): ?>
Email Name Source Survey Status Subscribed Actions
✅ Active 🚫 Unsubscribed
🚫 Unsub ✅ Resub 🗑
1): ?>
📭

No subscribers found

Subscribers will appear here as people review survey sites and opt in.

📋 Compliance Note: All subscribers have explicitly opted in via the review form. Always include an unsubscribe link in every marketing email you send. Sending to unsubscribed addresses is a violation of India's IT Act and international email laws (GDPR, CAN-SPAM). Export only active subscribers for campaigns.