Jake Vanderwerf
2026-07-05 fff721dd185f5b97f7ae7a6e64189e55887ff590
inc/rest/routes/ReferralRoutes.php
@@ -35,7 +35,6 @@
      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',
@@ -55,7 +54,6 @@
      // Referral code endpoint
      Route::for('referrals/code')
         ->get([$this, 'getCode'])
         ->args(['user' => 'integer'])
         ->auth('user')
         ->rateLimit(30)
         ->post([$this, 'validateCode'])
@@ -67,7 +65,6 @@
      // Stats endpoint
      Route::for('referrals/stats')
         ->get([$this, 'getStats'])
         ->args(['user' => 'integer'])
         ->auth('user')
         ->rateLimit(30)
         ->register();
@@ -102,16 +99,15 @@
    */
   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();
         return $this->unauthorized();
      }
         if (current_user_can('manage_options')) {
            return $this->getAllReferrals($request);
         }
         $user_id = $current_user_id;
      }
      // Build cache key
      $args = [
@@ -164,13 +160,12 @@
    */
   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;
@@ -298,11 +293,10 @@
    */
   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);
@@ -353,7 +347,10 @@
    */
   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