Files
tomtomgames/referral_setup.php
T
2026-05-22 12:52:50 +00:00

97 lines
3.8 KiB
PHP

<?php
require_once '/home/tomtomgames.com/includes/config.php';
require_once '/home/tomtomgames.com/includes/db.php';
// 1. referral_tiers
db()->exec("CREATE TABLE IF NOT EXISTS referral_tiers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
min_referrals INT NOT NULL DEFAULT 1,
tokens_per_ref DECIMAL(10,2) NOT NULL DEFAULT 10,
bonus_tokens DECIMAL(10,2) NOT NULL DEFAULT 0,
description VARCHAR(300),
is_active TINYINT(1) DEFAULT 1,
sort_order INT DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
echo "referral_tiers table OK\n";
// 2. Seed tiers
$count = (int)db()->query("SELECT COUNT(*) FROM referral_tiers")->fetchColumn();
if ($count == 0) {
$seeds = [
['Bronze Referrer', 1, 5, 0, 'Earn 5 tokens for each verified referral', 1, 0],
['Silver Referrer', 5, 8, 25, 'Earn 8 tokens per referral + 25 bonus at 5 referrals', 1, 1],
['Gold Referrer', 10, 10, 100, 'Earn 10 tokens per referral + 100 bonus at 10 referrals', 1, 2],
['Elite Referrer', 25, 15, 250, 'Earn 15 tokens per referral + 250 bonus at 25 referrals', 1, 3],
];
$st = db()->prepare("INSERT INTO referral_tiers (name,min_referrals,tokens_per_ref,bonus_tokens,description,is_active,sort_order) VALUES (?,?,?,?,?,?,?)");
foreach ($seeds as $s) $st->execute($s);
echo "4 tiers seeded\n";
} else {
echo "Tiers already exist: $count\n";
}
// 3. referrals table
db()->exec("CREATE TABLE IF NOT EXISTS referrals (
id INT AUTO_INCREMENT PRIMARY KEY,
referrer_id INT NOT NULL,
referred_id INT NOT NULL UNIQUE,
tier_id INT,
status ENUM('pending','verified','denied','deleted') DEFAULT 'pending',
tokens_awarded DECIMAL(10,2) DEFAULT 0,
admin_id INT,
admin_note VARCHAR(300),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
resolved_at DATETIME
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
echo "referrals table OK\n";
// 4. referral_social_shares
db()->exec("CREATE TABLE IF NOT EXISTS referral_social_shares (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
platform VARCHAR(50) NOT NULL,
bonus_tokens DECIMAL(10,2) DEFAULT 5,
status ENUM('pending','approved','denied') DEFAULT 'pending',
admin_id INT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
resolved_at DATETIME
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
echo "referral_social_shares table OK\n";
// 5. Add referral_code to users
$cols = array_column(db()->query("SHOW COLUMNS FROM users")->fetchAll(), 'Field');
if (!in_array('referral_code', $cols)) {
db()->exec("ALTER TABLE users ADD COLUMN referral_code VARCHAR(20) UNIQUE");
echo "referral_code column added\n";
}
// 6. Add referred_by to users
if (!in_array('referred_by', $cols)) {
db()->exec("ALTER TABLE users ADD COLUMN referred_by INT DEFAULT NULL");
echo "referred_by column added\n";
}
// 7. Add referred_by to pending_registrations
$pcols = array_column(db()->query("SHOW COLUMNS FROM pending_registrations")->fetchAll(), 'Field');
if (!in_array('referred_by', $pcols)) {
db()->exec("ALTER TABLE pending_registrations ADD COLUMN referred_by INT DEFAULT NULL");
echo "pending_registrations.referred_by added\n";
}
// 8. Generate codes for users missing one
$users = db()->query("SELECT id FROM users WHERE referral_code IS NULL OR referral_code = ''")->fetchAll();
$upd = db()->prepare("UPDATE users SET referral_code=? WHERE id=?");
foreach ($users as $u) {
$code = strtoupper(substr(md5($u['id'].uniqid()), 0, 8));
$upd->execute([$code, $u['id']]);
}
echo count($users) . " users given referral codes\n";
// 9. Show sample
$sample = db()->query("SELECT username, referral_code FROM users LIMIT 5")->fetchAll();
foreach ($sample as $r) echo " " . $r['username'] . ": " . $r['referral_code'] . "\n";
echo "\nDONE\n";