| | |
| | | Route::for('referrals') |
| | | ->get([$this, 'getReferrals']) |
| | | ->args([ |
| | | 'user' => 'integer', |
| | | 'status' => 'string|enum:all,pending,consulted,treated,unused,registered,completed|default:all', |
| | | 'date_start' => 'string', |
| | | 'date_end' => 'string', |
| | |
| | | // Referral code endpoint |
| | | Route::for('referrals/code') |
| | | ->get([$this, 'getCode']) |
| | | ->args(['user' => 'integer']) |
| | | ->auth('user') |
| | | ->rateLimit(30) |
| | | ->post([$this, 'validateCode']) |
| | |
| | | // Stats endpoint |
| | | Route::for('referrals/stats') |
| | | ->get([$this, 'getStats']) |
| | | ->args(['user' => 'integer']) |
| | | ->auth('user') |
| | | ->rateLimit(30) |
| | | ->register(); |
| | |
| | | */ |
| | | public function getReferrals(WP_REST_Request $request): WP_REST_Response |
| | | { |
| | | $user_id = $request->get_param('user'); |
| | | $user_id = get_current_user_id(); |
| | | |
| | | // Determine scope: admin without user param gets all referrals |
| | | if (!$user_id) { |
| | | $current_user_id = get_current_user_id(); |
| | | if (current_user_can('manage_options')) { |
| | | return $this->getAllReferrals($request); |
| | | } |
| | | $user_id = $current_user_id; |
| | | return $this->unauthorized(); |
| | | } |
| | | |
| | | if (current_user_can('manage_options')) { |
| | | return $this->getAllReferrals($request); |
| | | } |
| | | |
| | | // Build cache key |
| | |
| | | */ |
| | | protected function actionInvite(WP_REST_Request $request): WP_REST_Response |
| | | { |
| | | $user = absint($request->get_param('user')); |
| | | if (!$user || !get_userdata($user)) { |
| | | return $this->error('Invalid user', 'invalid_user', 400); |
| | | $user = get_current_user_id(); |
| | | if (!$user) { |
| | | return $this->unauthorized(); |
| | | } |
| | | |
| | | //Additional check to not send too many emails in an hour |
| | | $user = absint($request->get_param('user')); |
| | | $transient_key = "referral_invite_limit_{$user}"; |
| | | $recent_invites = get_transient($transient_key) ?: 0; |
| | | |
| | |
| | | */ |
| | | public function getCode(WP_REST_Request $request): WP_REST_Response |
| | | { |
| | | $user_id = $request->get_param('user') ?? get_current_user_id(); |
| | | $user_id = get_current_user_id(); |
| | | |
| | | // Check permission |
| | | if ($user_id != get_current_user_id() && !current_user_can('manage_options')) { |
| | | return $this->forbidden('Unauthorized'); |
| | | if (!$user_id) { |
| | | return $this->unauthorized(); |
| | | } |
| | | |
| | | $code = JVB()->referrals()->getUserReferralCode($user_id); |
| | |
| | | */ |
| | | public function getStats(WP_REST_Request $request): WP_REST_Response |
| | | { |
| | | $user_id = $request->get_param('user') ?? get_current_user_id(); |
| | | $user_id = get_current_user_id(); |
| | | if (!$user_id) { |
| | | return $this->unauthorized(); |
| | | } |
| | | $cache_key = "stats_{$user_id}"; |
| | | |
| | | // Check 304 Not Modified |