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";