From e9967fa22781d922ba4eb8fb44fe72d200ac4b14 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 10 Nov 2025 21:04:10 +0000
Subject: [PATCH] =IconsManager.php update
---
inc/rest/routes/ReferralRoutes.php | 65 ++++++++++++++++++++++++++++++--
1 files changed, 60 insertions(+), 5 deletions(-)
diff --git a/inc/rest/routes/ReferralRoutes.php b/inc/rest/routes/ReferralRoutes.php
index 1589135..15f293e 100644
--- a/inc/rest/routes/ReferralRoutes.php
+++ b/inc/rest/routes/ReferralRoutes.php
@@ -1,6 +1,7 @@
<?php
namespace JVBase\rest\routes;
+use JVBase\managers\ReferralManager;
use JVBase\rest\RestRouteManager;
use WP_REST_Request;
use WP_REST_Response;
@@ -15,7 +16,7 @@
*/
class ReferralRoutes extends RestRouteManager
{
-
+ protected ReferralManager $manager;
public function __construct()
{
$this->route = 'referrals';
@@ -31,10 +32,10 @@
'permission_callback' => [$this, 'checkPermission']
]);
- register_rest_route($this->namespace, '/referrals/register', [
+ register_rest_route($this->namespace, "/{$this->route}/register", [
'methods' => 'POST',
'callback' => [$this, 'registerWithReferral'],
- 'permission_callback' => '__return_true',
+ 'permission_callback' => [$this, 'checkRateLimit'],
'args' => [
'name' => [
'required' => true,
@@ -62,7 +63,7 @@
register_rest_route($this->namespace, '/referrals/check-code', [
'methods' => 'POST',
'callback' => [$this, 'checkReferralCode'],
- 'permission_callback' => '__return_true',
+ 'permission_callback' => [$this, 'checkRateLimit'],
'args' => [
'code' => [
'required' => true,
@@ -85,7 +86,7 @@
register_rest_route($this->namespace, "/{$this->route}/track", [
'methods' => 'POST',
'callback' => [$this, 'trackReferralClick'],
- 'permission_callback' => '__return_true',
+ 'permission_callback' => [$this, 'checkRateLimit'],
'args' => [
'code' => [
'required' => true,
@@ -181,6 +182,8 @@
]
]);
+
+
// Get top referrers (admin only)
register_rest_route($this->namespace, "/{$this->route}/leaderboard", [
'methods' => 'GET',
@@ -217,6 +220,21 @@
}
]
]);
+
+ register_rest_route($this->namespace, "/{$this->route}/add-code", [
+ 'methods' => 'POST',
+ 'callback' => [$this, 'addReferralCodeAfterRegistration'],
+ 'permission_callback' => [$this, 'checkRateLimit'],
+ 'args' => [
+ 'code' => [
+ 'required' => true,
+ 'type' => 'string',
+ 'sanitize_callback' => function ($code) {
+ return strtoupper(sanitize_text_field($code));
+ }
+ ]
+ ]
+ ]);
}
public function checkPermission(WP_REST_Request $request): bool
@@ -588,6 +606,9 @@
'message' => 'Invalid referral code'
], 404);
}
+ if (is_user_logged_in() && get_current_user_id() === $referrer->ID) {
+ return $this->error('You cannot use your own referral code', 'self_referral', 400);
+ }
// Return basic referrer info (no sensitive data)
return new WP_REST_Response([
@@ -596,4 +617,38 @@
'referrer_name' => $referrer->display_name,
], 200);
}
+
+ public function addReferralCodePostRegistration(WP_REST_Request $request): WP_REST_Response
+ {
+ if (!$this->manager) {
+ $this->manager = JVB()->referrals();
+ }
+ $user_id = get_current_user_id();
+ $code = $request->get_param('code');
+
+ // Check if user already has a referral (can't change)
+ $existing = $this->manager->getReferralByReferee($user_id);
+ if ($existing) {
+ return $this->error('You already have a referral code applied', 'already_referred', 400);
+ }
+
+ // Validate the code exists
+ $referrer = $this->manager->getUserByReferralCode($code);
+ if (!$referrer) {
+ return $this->error('Invalid referral code', 'invalid_code', 400);
+ }
+
+ // Create the referral
+ $user = wp_get_current_user();
+ $result = $this->manager->createReferral($referrer->ID, $user_id, $code);
+
+ if ($result) {
+ return $this->success([
+ 'message' => 'Referral code applied successfully!',
+ 'referrer_name' => $referrer->display_name
+ ]);
+ }
+
+ return $this->error('Failed to apply referral code', 'creation_failed', 500);
+ }
}
--
Gitblit v1.10.0