prepare("SELECT * FROM admin_users WHERE username = ? AND status = 'active'");
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['admin_id'] = $user['id'];
$_SESSION['admin_username'] = $user['username'];
$_SESSION['admin_email'] = $user['email'];
$_SESSION['admin_role'] = $user['role'];
$_SESSION['admin_name'] = $user['full_name'];
$updateStmt = $pdo->prepare("UPDATE admin_users SET last_login = NOW() WHERE id = ?");
$updateStmt->execute([$user['id']]);
logActivity($user['id'], 'login', 'User logged in successfully');
header('Location: index.php');
exit;
} else {
$error = 'Invalid username or password';
}
} catch (Exception $e) {
error_log("Login error: " . $e->getMessage());
$error = 'An error occurred. Please try again.';
}
}
}
// ============ SHOW LOGIN FORM ============
?>
Login - Relevant Reflex Admin
RELEVANT REFLEX
Admin Portal
🛠
Panel Management System
Manage members, projects, clients, invoices, fieldwork, and survey operations from a single unified dashboard.
Member & Panel Management
Client & Project Operations
Invoice & Finance Tracking
Fieldwork & Survey Monitoring
Welcome Back!
Sign in to your admin account to continue.
⚠
🛡
This is a secure admin area. All login attempts are logged and monitored. Unauthorized access is strictly prohibited.
0, 'members_active' => 0, 'members_verified' => 0,
'members_inactive' => 0, 'members_new' => 0, 'members_new_verified' => 0,
'members_mobile_verified' => 0,
// Points economy
'points_circulation' => 0, 'points_total_earned' => 0, 'points_total_redeemed' => 0,
'points_earned_period' => 0, 'points_redeemed_period' => 0,
// Redemptions
'redemptions_pending' => 0, 'redemptions_completed' => 0, 'redemptions_total' => 0,
'redemptions_pending_value' => 0, 'redemptions_period' => 0, 'redemptions_paid_period' => 0,
// Tickets
'tickets_total' => 0, 'tickets_open' => 0, 'tickets_pending' => 0,
'tickets_resolved' => 0, 'tickets_closed' => 0,
'tickets_member' => 0, 'tickets_partner' => 0, 'tickets_client' => 0,
'tickets_period' => 0,
// Affiliates
'affiliates_total' => 0, 'affiliates_active' => 0,
'affiliates_total_signups' => 0, 'affiliates_verified_signups' => 0,
'affiliates_total_commission' => 0, 'affiliates_commission_balance' => 0,
'affiliates_total_rewards_paid' => 0,
'affiliates_clicks_period' => 0, 'affiliates_signups_period' => 0,
'partner_redemptions_pending' => 0, 'partner_redemptions_pending_value' => 0,
// Clients
'clients_total' => 0, 'clients_active' => 0,
// Projects
'projects_total' => 0, 'projects_live' => 0, 'projects_created' => 0,
'projects_targeted' => 0, 'projects_onhold' => 0, 'projects_closed' => 0,
'projects_period' => 0,
// Survey URLs
'urls_total' => 0, 'urls_available' => 0, 'urls_sent' => 0,
'urls_complete' => 0, 'urls_screenout' => 0, 'urls_quotafull' => 0,
'completes_period' => 0,
// Member Availability (non-closed projects)
'avail_available' => 0, 'avail_selected' => 0, 'avail_assigned' => 0,
'avail_invited' => 0, 'avail_started' => 0, 'avail_completed' => 0,
'avail_screenout' => 0, 'avail_other_term' => 0,
'avail_live_projects' => 0,
// Finance
'invoices_total' => 0, 'invoices_invoiced' => 0, 'invoices_paid' => 0,
'invoices_due' => 0, 'invoices_overdue' => 0, 'invoices_critical' => 0,
'revenue_total_inr' => 0, 'revenue_paid_inr' => 0, 'revenue_outstanding_inr' => 0,
'revenue_invoiced_inr' => 0, 'revenue_due_inr' => 0, 'revenue_overdue_inr' => 0,
'revenue_critical_inr' => 0, 'revenue_period_inr' => 0,
// Admin
'admins_active' => 0,
];
$recent_activities = $recent_tickets = $recent_members_list = $recent_projects = [];
// Get DB connections
$pdo = null;
$panelPdo = null;
try {
$pdo = getDBConnection();
$pdo->exec("SET time_zone = '+05:30'");
} catch (Exception $e) { error_log("Dashboard shop DB error: " . $e->getMessage()); }
try {
$panelPdo = getPanelDBConnection();
$panelPdo->exec("SET time_zone = '+05:30'");
} catch (Exception $e) { error_log("Dashboard panel DB error: " . $e->getMessage()); }
// ─── MEMBERS ───
if ($panelPdo) {
try {
$d['members_total'] = (int)$panelPdo->query("SELECT COUNT(*) FROM users")->fetchColumn();
$d['members_active'] = (int)$panelPdo->query("SELECT COUNT(*) FROM users WHERE status='active'")->fetchColumn();
$d['members_verified'] = (int)$panelPdo->query("SELECT COUNT(*) FROM users WHERE email_verified=1")->fetchColumn();
$d['members_inactive'] = (int)$panelPdo->query("SELECT COUNT(*) FROM users WHERE status='inactive'")->fetchColumn();
$stmt = $panelPdo->prepare("SELECT COUNT(*) FROM users WHERE created_at BETWEEN ? AND ?");
$stmt->execute([$dateFromSQL, $dateToSQL]);
$d['members_new'] = (int)$stmt->fetchColumn();
$stmt = $panelPdo->prepare("SELECT COUNT(*) FROM users WHERE email_verified=1 AND created_at BETWEEN ? AND ?");
$stmt->execute([$dateFromSQL, $dateToSQL]);
$d['members_new_verified'] = (int)$stmt->fetchColumn();
} catch (Exception $e) { error_log("Dashboard members error: " . $e->getMessage()); }
try {
$d['members_mobile_verified'] = (int)$panelPdo->query("SELECT COUNT(*) FROM mobile_verifications WHERE is_verified=1")->fetchColumn();
} catch (Exception $e) { /* table may not exist */ }
}
// ─── POINTS ECONOMY ───
if ($panelPdo) {
try {
$d['points_circulation'] = (int)$panelPdo->query("SELECT COALESCE(SUM(points),0) FROM user_points")->fetchColumn();
$d['points_total_earned'] = (int)$panelPdo->query("SELECT COALESCE(SUM(total_earned),0) FROM user_points")->fetchColumn();
$d['points_total_redeemed'] = (int)$panelPdo->query("SELECT COALESCE(SUM(total_redeemed),0) FROM user_points")->fetchColumn();
} catch (Exception $e) { error_log("Dashboard user_points error: " . $e->getMessage()); }
try {
$stmt = $panelPdo->prepare("SELECT COALESCE(SUM(amount),0) FROM point_transactions WHERE type='credit' AND created_at BETWEEN ? AND ?");
$stmt->execute([$dateFromSQL, $dateToSQL]);
$d['points_earned_period'] = (int)$stmt->fetchColumn();
$stmt = $panelPdo->prepare("SELECT COALESCE(SUM(amount),0) FROM point_transactions WHERE type='debit' AND created_at BETWEEN ? AND ?");
$stmt->execute([$dateFromSQL, $dateToSQL]);
$d['points_redeemed_period'] = (int)$stmt->fetchColumn();
} catch (Exception $e) { error_log("Dashboard point_transactions error: " . $e->getMessage()); }
}
// ─── REDEMPTIONS ───
if ($panelPdo) {
try {
$d['redemptions_pending'] = (int)$panelPdo->query("SELECT COUNT(*) FROM redemption_requests WHERE status='pending'")->fetchColumn();
$d['redemptions_completed'] = (int)$panelPdo->query("SELECT COUNT(*) FROM redemption_requests WHERE status='completed'")->fetchColumn();
$d['redemptions_total'] = (int)$panelPdo->query("SELECT COUNT(*) FROM redemption_requests")->fetchColumn();
$d['redemptions_pending_value'] = (float)$panelPdo->query("SELECT COALESCE(SUM(amount),0) FROM redemption_requests WHERE status='pending'")->fetchColumn();
$stmt = $panelPdo->prepare("SELECT COUNT(*) FROM redemption_requests WHERE created_at BETWEEN ? AND ?");
$stmt->execute([$dateFromSQL, $dateToSQL]);
$d['redemptions_period'] = (int)$stmt->fetchColumn();
$stmt = $panelPdo->prepare("SELECT COALESCE(SUM(amount),0) FROM redemption_requests WHERE status='completed' AND processed_at BETWEEN ? AND ?");
$stmt->execute([$dateFromSQL, $dateToSQL]);
$d['redemptions_paid_period'] = (float)$stmt->fetchColumn();
} catch (Exception $e) { error_log("Dashboard redemptions error: " . $e->getMessage()); }
}
// ─── SUPPORT TICKETS ───
if ($panelPdo) {
try {
$d['tickets_total'] = (int)$panelPdo->query("SELECT COUNT(*) FROM support_tickets")->fetchColumn();
$d['tickets_open'] = (int)$panelPdo->query("SELECT COUNT(*) FROM support_tickets WHERE status='open'")->fetchColumn();
$d['tickets_pending'] = (int)$panelPdo->query("SELECT COUNT(*) FROM support_tickets WHERE status='pending'")->fetchColumn();
$d['tickets_resolved'] = (int)$panelPdo->query("SELECT COUNT(*) FROM support_tickets WHERE status='resolved'")->fetchColumn();
$d['tickets_closed'] = (int)$panelPdo->query("SELECT COUNT(*) FROM support_tickets WHERE status='closed'")->fetchColumn();
$d['tickets_member'] = (int)$panelPdo->query("SELECT COUNT(*) FROM support_tickets WHERE sender_type='member'")->fetchColumn();
$d['tickets_partner'] = (int)$panelPdo->query("SELECT COUNT(*) FROM support_tickets WHERE sender_type='partner'")->fetchColumn();
$d['tickets_client'] = (int)$panelPdo->query("SELECT COUNT(*) FROM support_tickets WHERE sender_type='client'")->fetchColumn();
$stmt = $panelPdo->prepare("SELECT COUNT(*) FROM support_tickets WHERE created_at BETWEEN ? AND ?");
$stmt->execute([$dateFromSQL, $dateToSQL]);
$d['tickets_period'] = (int)$stmt->fetchColumn();
} catch (Exception $e) { error_log("Dashboard tickets error: " . $e->getMessage()); }
}
// ─── AFFILIATES / PARTNERS ───
if ($pdo) {
try {
$d['affiliates_total'] = (int)$pdo->query("SELECT COUNT(*) FROM affiliates")->fetchColumn();
$d['affiliates_active'] = (int)$pdo->query("SELECT COUNT(*) FROM affiliates WHERE status='active'")->fetchColumn();
$d['affiliates_total_signups'] = (int)$pdo->query("SELECT COALESCE(SUM(total_signups),0) FROM affiliates")->fetchColumn();
$d['affiliates_verified_signups'] = (int)$pdo->query("SELECT COALESCE(SUM(total_verified_signups),0) FROM affiliates")->fetchColumn();
$d['affiliates_total_commission'] = (float)$pdo->query("SELECT COALESCE(SUM(total_commission_earned),0) FROM affiliates")->fetchColumn();
$d['affiliates_commission_balance'] = (float)$pdo->query("SELECT COALESCE(SUM(commission_balance),0) FROM affiliates")->fetchColumn();
$d['affiliates_total_rewards_paid'] = (float)$pdo->query("SELECT COALESCE(SUM(total_rewards_paid),0) FROM affiliates")->fetchColumn();
} catch (Exception $e) { error_log("Dashboard affiliates error: " . $e->getMessage()); }
try {
$stmt = $pdo->prepare("SELECT COUNT(*) FROM affiliate_signups WHERE clicked_at BETWEEN ? AND ?");
$stmt->execute([$dateFromSQL, $dateToSQL]);
$d['affiliates_clicks_period'] = (int)$stmt->fetchColumn();
$stmt = $pdo->prepare("SELECT COUNT(*) FROM affiliate_signups WHERE signup_completed=1 AND signed_up_at BETWEEN ? AND ?");
$stmt->execute([$dateFromSQL, $dateToSQL]);
$d['affiliates_signups_period'] = (int)$stmt->fetchColumn();
} catch (Exception $e) { error_log("Dashboard affiliate_signups error: " . $e->getMessage()); }
try {
$d['partner_redemptions_pending'] = (int)$pdo->query("SELECT COUNT(*) FROM partner_redemptions WHERE status='pending'")->fetchColumn();
$d['partner_redemptions_pending_value'] = (float)$pdo->query("SELECT COALESCE(SUM(amount),0) FROM partner_redemptions WHERE status='pending'")->fetchColumn();
} catch (Exception $e) { /* partner_redemptions table may not exist */ }
}
// ─── CLIENTS ───
if ($pdo) {
try {
$d['clients_total'] = (int)$pdo->query("SELECT COUNT(*) FROM clients")->fetchColumn();
$d['clients_active'] = (int)$pdo->query("SELECT COUNT(*) FROM clients WHERE status='active'")->fetchColumn();
} catch (Exception $e) { error_log("Dashboard clients error: " . $e->getMessage()); }
}
// ─── PROJECTS ───
if ($pdo) {
try {
$d['projects_total'] = (int)$pdo->query("SELECT COUNT(*) FROM projects")->fetchColumn();
$d['projects_live'] = (int)$pdo->query("SELECT COUNT(*) FROM projects WHERE status='Live'")->fetchColumn();
$d['projects_created'] = (int)$pdo->query("SELECT COUNT(*) FROM projects WHERE status='Created'")->fetchColumn();
$d['projects_targeted'] = (int)$pdo->query("SELECT COUNT(*) FROM projects WHERE status='Targeted'")->fetchColumn();
$d['projects_onhold'] = (int)$pdo->query("SELECT COUNT(*) FROM projects WHERE status='On hold'")->fetchColumn();
$d['projects_closed'] = (int)$pdo->query("SELECT COUNT(*) FROM projects WHERE status='Closed'")->fetchColumn();
$stmt = $pdo->prepare("SELECT COUNT(*) FROM projects WHERE created_at BETWEEN ? AND ?");
$stmt->execute([$dateFromSQL, $dateToSQL]);
$d['projects_period'] = (int)$stmt->fetchColumn();
} catch (Exception $e) { error_log("Dashboard projects error: " . $e->getMessage()); }
}
// ─── SURVEY URLs ───
if ($pdo) {
try {
$d['urls_total'] = (int)$pdo->query("SELECT COUNT(*) FROM survey_urls")->fetchColumn();
$d['urls_available'] = (int)$pdo->query("SELECT COUNT(*) FROM survey_urls WHERE status='available'")->fetchColumn();
$d['urls_sent'] = (int)$pdo->query("SELECT COUNT(*) FROM survey_urls WHERE status='sent'")->fetchColumn();
$d['urls_complete'] = (int)$pdo->query("SELECT COUNT(*) FROM survey_urls WHERE status='complete'")->fetchColumn();
$d['urls_screenout'] = (int)$pdo->query("SELECT COUNT(*) FROM survey_urls WHERE status IN ('earlyscreenout','latescreenout')")->fetchColumn();
$d['urls_quotafull'] = (int)$pdo->query("SELECT COUNT(*) FROM survey_urls WHERE status='quotafull'")->fetchColumn();
$stmt = $pdo->prepare("SELECT COUNT(*) FROM survey_urls WHERE status='complete' AND completed_at BETWEEN ? AND ?");
$stmt->execute([$dateFromSQL, $dateToSQL]);
$d['completes_period'] = (int)$stmt->fetchColumn();
} catch (Exception $e) { error_log("Dashboard survey_urls error: " . $e->getMessage()); }
}
// ─── MEMBER AVAILABILITY (non-closed projects only) ───
if ($pdo) {
try {
// Count non-closed projects
$d['avail_live_projects'] = (int)$pdo->query("SELECT COUNT(*) FROM projects WHERE status NOT IN ('Closed')")->fetchColumn();
// Selected: distinct members in selection_members for non-closed projects
$d['avail_selected'] = (int)$pdo->query("
SELECT COUNT(DISTINCT sm.user_id) FROM selection_members sm
JOIN project_selections ps ON sm.selection_id = ps.id
JOIN projects p ON ps.project_id = p.id
WHERE p.status NOT IN ('Closed')
")->fetchColumn();
// Survey URL stage counts (distinct members per stage, non-closed projects only)
$urlStages = $pdo->query("
SELECT
COUNT(DISTINCT CASE WHEN su.status = 'assigned' THEN su.sent_to_user_id END) as assigned_members,
COUNT(DISTINCT CASE WHEN su.status = 'sent' THEN su.sent_to_user_id END) as sent_members,
COUNT(DISTINCT CASE WHEN su.status = 'clicked' THEN su.sent_to_user_id END) as started_members,
COUNT(DISTINCT CASE WHEN su.status = 'complete' THEN su.sent_to_user_id END) as completed_members,
COUNT(DISTINCT CASE WHEN su.status IN ('earlyscreenout','latescreenout') THEN su.sent_to_user_id END) as screenout_members,
COUNT(DISTINCT CASE WHEN su.status IN ('quotafull','timeout','partial') THEN su.sent_to_user_id END) as other_members
FROM survey_urls su
JOIN projects p ON su.project_id = p.project_id
WHERE p.status NOT IN ('Closed') AND su.sent_to_user_id IS NOT NULL
")->fetch();
if ($urlStages) {
$d['avail_assigned'] = (int)($urlStages['assigned_members'] ?? 0);
$d['avail_invited'] = (int)($urlStages['sent_members'] ?? 0);
$d['avail_started'] = (int)($urlStages['started_members'] ?? 0);
$d['avail_completed'] = (int)($urlStages['completed_members'] ?? 0);
$d['avail_screenout'] = (int)($urlStages['screenout_members'] ?? 0);
$d['avail_other_term'] = (int)($urlStages['other_members'] ?? 0);
}
} catch (Exception $e) { error_log("Dashboard availability error: " . $e->getMessage()); }
// Available: active+verified members NOT in any non-closed project
if ($panelPdo) {
try {
$totalVerifiedActive = (int)$panelPdo->query("SELECT COUNT(*) FROM users WHERE status='active' AND email_verified=1")->fetchColumn();
$d['avail_available'] = max(0, $totalVerifiedActive - $d['avail_selected']);
} catch (Exception $e) { error_log("Dashboard avail_available error: " . $e->getMessage()); }
}
}
// ─── INVOICES / FINANCE (multi-currency → INR) ───
$forexRates = ['INR' => 1.0, 'USD' => 86.50, 'EUR' => 93.00];
if ($pdo) {
try {
try {
$ctx = stream_context_create(['http' => ['timeout' => 3]]);
$rateJson = @file_get_contents('https://api.exchangerate-api.com/v4/latest/USD', false, $ctx);
if ($rateJson) {
$rateData = json_decode($rateJson, true);
if (!empty($rateData['rates']['INR'])) {
$usdToInr = (float)$rateData['rates']['INR'];
$forexRates['USD'] = $usdToInr;
if (!empty($rateData['rates']['EUR'])) {
$forexRates['EUR'] = $usdToInr / (float)$rateData['rates']['EUR'];
}
}
}
} catch (Exception $e) { /* use fallback rates */ }
$d['invoices_total'] = (int)$pdo->query("SELECT COUNT(*) FROM invoices")->fetchColumn();
$d['invoices_invoiced'] = (int)$pdo->query("SELECT COUNT(*) FROM invoices WHERE status='invoiced'")->fetchColumn();
$d['invoices_paid'] = (int)$pdo->query("SELECT COUNT(*) FROM invoices WHERE status='paid'")->fetchColumn();
$d['invoices_due'] = (int)$pdo->query("SELECT COUNT(*) FROM invoices WHERE status='due'")->fetchColumn();
$d['invoices_overdue'] = (int)$pdo->query("SELECT COUNT(*) FROM invoices WHERE status='overdue'")->fetchColumn();
$d['invoices_critical'] = (int)$pdo->query("SELECT COUNT(*) FROM invoices WHERE status IN ('critical','banned')")->fetchColumn();
$amtStmt = $pdo->query("
SELECT status, currency, SUM(total_amount) as amt
FROM invoices
GROUP BY status, currency
");
$amtRows = $amtStmt->fetchAll();
$statusMap = [
'invoiced' => 'revenue_invoiced_inr',
'paid' => 'revenue_paid_inr',
'due' => 'revenue_due_inr',
'overdue' => 'revenue_overdue_inr',
'critical' => 'revenue_critical_inr',
'banned' => 'revenue_critical_inr',
];
foreach ($amtRows as $row) {
$cur = $row['currency'] ?? 'INR';
$rate = $forexRates[$cur] ?? 1.0;
$inr = (float)$row['amt'] * $rate;
$key = $statusMap[$row['status']] ?? null;
if ($key) $d[$key] += $inr;
$d['revenue_total_inr'] += $inr;
}
$d['revenue_outstanding_inr'] = $d['revenue_total_inr'] - $d['revenue_paid_inr'];
$stmt = $pdo->prepare("SELECT currency, SUM(total_amount) as amt FROM invoices WHERE created_at BETWEEN ? AND ? GROUP BY currency");
$stmt->execute([$dateFromSQL, $dateToSQL]);
foreach ($stmt->fetchAll() as $row) {
$rate = $forexRates[$row['currency'] ?? 'INR'] ?? 1.0;
$d['revenue_period_inr'] += (float)$row['amt'] * $rate;
}
} catch (Exception $e) { /* invoices table may not exist */ }
}
// ─── ADMIN USERS ───
if ($pdo) {
try {
$d['admins_active'] = (int)$pdo->query("SELECT COUNT(*) FROM admin_users WHERE status='active'")->fetchColumn();
} catch (Exception $e) { /* */ }
}
// ─── RECENT ACTIVITIES ───
if ($pdo) {
try {
$activitiesStmt = $pdo->query("
SELECT al.*, au.full_name
FROM admin_activity_log al
LEFT JOIN admin_users au ON al.admin_id = au.id
ORDER BY al.created_at DESC LIMIT 15
");
$recent_activities = $activitiesStmt->fetchAll();
} catch (Exception $e) { /* */ }
}
// ─── RECENT TICKETS ───
if ($panelPdo) {
try {
$recentTicketsStmt = $panelPdo->query("SELECT * FROM support_tickets ORDER BY updated_at DESC LIMIT 8");
$recent_tickets = $recentTicketsStmt->fetchAll();
} catch (Exception $e) { /* */ }
}
// ─── RECENT MEMBERS ───
if ($panelPdo) {
try {
$recentMembersStmt = $panelPdo->query("SELECT id, email, gender, email_verified, status, created_at FROM users ORDER BY created_at DESC LIMIT 8");
$recent_members_list = $recentMembersStmt->fetchAll();
} catch (Exception $e) { /* */ }
}
// ─── RECENT PROJECTS ───
if ($pdo) {
try {
$recentProjectsStmt = $pdo->query("
SELECT p.*, c.company_name as client_name FROM projects p
LEFT JOIN clients c ON p.client_id = c.id
ORDER BY p.updated_at DESC LIMIT 8
");
$recent_projects = $recentProjectsStmt->fetchAll();
} catch (Exception $e) { /* */ }
}
// Helper functions
function fmtIST($dt, $fmt = 'd M Y, h:i A') {
if (!$dt) return '—';
try {
$date = new DateTime($dt, new DateTimeZone('Asia/Kolkata'));
return $date->format($fmt);
} catch (Exception $e) {
return date($fmt, strtotime($dt));
}
}
function fmtISTDate($dt) { return fmtIST($dt, 'd M Y'); }
function fmtISTTime($dt) { return fmtIST($dt, 'h:i A'); }
function fmtINR($v) { return '₹' . number_format((float)$v, 2); }
function fmtNum($v) { return number_format((int)$v); }
include 'includes/header.php';
?>
Showing data for –
0) $alerts[] = ['warn', '💰 ' . fmtNum($d['redemptions_pending']) . ' pending member redemptions (' . fmtINR($d['redemptions_pending_value']) . ')', 'https://relevantreflex.com/support'];
if (($d['partner_redemptions_pending'] ?? 0) > 0) $alerts[] = ['warn', '🤝 ' . fmtNum($d['partner_redemptions_pending']) . ' pending partner redemptions (' . fmtINR($d['partner_redemptions_pending_value']) . ')', 'https://relevantreflex.com/support'];
if (($d['tickets_open'] ?? 0) > 0) $alerts[] = ['info', '🎫 ' . fmtNum($d['tickets_open']) . ' open support tickets', 'https://relevantreflex.com/support'];
if (($d['projects_live'] ?? 0) > 0) $alerts[] = ['info', '🔴 ' . fmtNum($d['projects_live']) . ' live projects', 'https://relevantreflex.com/clients/projects.php'];
?>
Total Members
+ in period
Active
0 ? round($d['members_active']/$d['members_total']*100) : 0; ?>% of total
Email Verified
+ in period
📋 Member Availability — non-closed project
Available
Verified active, not in any live project
Selected
Added to project selections
Assigned
URL assigned, not yet sent
Started
Clicked survey link
Completed
Survey completed
Screen Out
Early / late screenout
Other Term.
Quota full, timeout, partial
Excludes closed projects • Counts distinct members
In Circulation
Unredeemed balance
Lifetime Earned
+ in period
Lifetime Redeemed
in period
Pending Redemptions
value
Period Redemptions
paid out
Active Affiliates
of total
Total Signups
+ in period
Verified Signups
0 ? round($d['affiliates_verified_signups']/$d['affiliates_total_signups']*100) : 0; ?>% conversion
Commission Earned
Balance:
Pending Redemptions
to pay
Total Projects
+ in period
Total Invoiced
invoice · + in period
| Project | Client | Status | Updated |
|
|
'green','Closed'=>'gray','On hold'=>'amber','Created'=>'blue','Targeted'=>'blue'][$p['status']] ?? 'gray';
?>
|
|
No projects yet
| Ticket | Type | Status | Updated |
|
|
'red','pending'=>'amber','resolved'=>'green','closed'=>'gray'][$t['status']] ?? 'gray';
?>
|
|
No tickets yet
| Email | Gender | Status | Joined |
|
✓
|
|
|
|
No members yet
Admin Activity Log
No activity yet
🖥️ System
Admin Users: active
Admin DB: u752449863_rrshop
Panel DB: u752449863_rrpanel
PHP:
Server Time (IST):
Timezone: