feat: unify invite flow with referral ref

This commit is contained in:
2026-08-17 13:49:59 +08:00
parent f1d6809109
commit b501cf4611
47 changed files with 1083 additions and 2548 deletions
+22 -48
View File
@@ -9,7 +9,6 @@ defined('ABSPATH') || exit;
class UserController extends ControllerBase {
use UserControllerReportOperations;
use UserControllerInviteOperations;
use UserControllerVerifyIntegrations;
use UserControllerIdentitySettings;
use UserControllerAuthPhoneOperations;
@@ -208,36 +207,6 @@ class UserController extends ControllerBase {
'permission_callback' => '__return_true',
]);
// Invite codes management (admin)
register_rest_route(self::API_NAMESPACE, '/invite/codes', [
'methods' => 'GET',
'callback' => [$this, 'get_invite_codes'],
'permission_callback' => [$this, 'check_permission'],
]);
register_rest_route(self::API_NAMESPACE, '/invite/codes', [
'methods' => 'POST',
'callback' => [$this, 'generate_invite_codes'],
'permission_callback' => [$this, 'check_permission'],
]);
register_rest_route(self::API_NAMESPACE, '/invite/codes/(?P<id>\d+)/disable', [
'methods' => 'POST',
'callback' => [$this, 'disable_invite_code'],
'permission_callback' => [$this, 'check_permission'],
]);
register_rest_route(self::API_NAMESPACE, '/invite/codes/bulk', [
'methods' => 'POST',
'callback' => [$this, 'bulk_update_invite_codes'],
'permission_callback' => [$this, 'check_permission'],
]);
register_rest_route(self::API_NAMESPACE, '/invite/stats', [
'methods' => 'GET',
'callback' => [$this, 'get_invite_stats'],
'permission_callback' => [$this, 'check_permission'],
]);
// ── Modal Auth (弹窗登录/注册) ──
// Modal login
@@ -432,17 +401,21 @@ class UserController extends ControllerBase {
if ($request->get_method() === 'GET') {
$data = \AKSRT\Settings\Settings::get_all();
$invite = class_exists('\AKSRT\Settings\CreditsRuntime')
? \AKSRT\Settings\CreditsRuntime::get_invite_registration_config()
$referral = class_exists('\AKSRT\Settings\CreditsRuntime')
? \AKSRT\Settings\CreditsRuntime::get_referral_registration_settings()
: [];
$shared = class_exists('\AKSRT\Settings\CreditsRuntime')
? \AKSRT\Settings\CreditsRuntime::get_referral_settings()
: [];
return $this->success(['data' => [
'registration_email_verification_enabled' => \AKSRT\Settings\Settings::registration_requires_email_verification(),
'registration_email_verification_method' => \AKSRT\Settings\Settings::registration_verification_method(),
'invite_registration_enabled' => $invite['enabled'] ?? true,
'invite_code_length' => class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::invite_code_length() : 6,
'invite_register_field' => $invite['register_field'] ?? 'optional',
'invite_reject_invalid' => $invite['reject_invalid'] ?? false,
'referral_registration_enabled' => $referral['enabled'] ?? true,
'referral_code_length' => $shared['code_length'] ?? 12,
'referral_window_days' => $shared['window_days'] ?? 30,
'referral_register_field' => $referral['register_field'] ?? 'optional',
'referral_reject_invalid' => $referral['reject_invalid'] ?? true,
] + array_intersect_key($data, $allowed)]);
}
@@ -451,20 +424,21 @@ class UserController extends ControllerBase {
$sanitized = $this->sanitize_fields($params, $allowed);
$settings = array_merge($settings, $sanitized);
if (array_key_exists('invite_registration_enabled', $params)) {
$settings['invite_registration_enabled'] = !empty($params['invite_registration_enabled']);
if (array_key_exists('referral_registration_enabled', $params)) {
$settings['referral_registration_enabled'] = !empty($params['referral_registration_enabled']);
}
if (array_key_exists('invite_code_length', $params)) {
$settings['invite_code_length'] = max(4, min(12, (int) $params['invite_code_length']));
if (array_key_exists('referral_code_length', $params)) {
$settings['referral_code_length'] = max(4, min(12, (int) $params['referral_code_length']));
}
if (array_key_exists('invite_register_field', $params)) {
$field = (string) $params['invite_register_field'];
$settings['invit_code_mode'] = $field === 'required' ? 'must' : ($field === 'hidden' ? 'close' : 'open');
if (array_key_exists('referral_window_days', $params)) {
$settings['referral_window_days'] = max(1, min(365, (int) $params['referral_window_days']));
}
if (array_key_exists('invite_reject_invalid', $params)) {
$reward = is_array($settings['invite_reward'] ?? null) ? $settings['invite_reward'] : [];
$reward['reject_invalid'] = !empty($params['invite_reject_invalid']);
$settings['invite_reward'] = $reward;
if (array_key_exists('referral_register_field', $params)) {
$field = sanitize_key((string) $params['referral_register_field']);
$settings['referral_register_field'] = in_array($field, ['hidden', 'optional', 'required'], true) ? $field : 'optional';
}
if (array_key_exists('referral_reject_invalid', $params)) {
$settings['referral_reject_invalid'] = !empty($params['referral_reject_invalid']);
}
if (array_key_exists('registration_email_verification_enabled', $params)) {
$settings['registration_email_verification_enabled'] = !empty($params['registration_email_verification_enabled']);