From 9bbeea742424837fb58207d88e10dbca0b2cae04 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 03 May 2026 22:04:17 +0000
Subject: [PATCH] =SEO Field registration and formatting

---
 inc/managers/ReferralManager.php |   55 +++++++++++++++++++++++++++----------------------------
 1 files changed, 27 insertions(+), 28 deletions(-)

diff --git a/inc/managers/ReferralManager.php b/inc/managers/ReferralManager.php
index af9f0b2..b5db099 100644
--- a/inc/managers/ReferralManager.php
+++ b/inc/managers/ReferralManager.php
@@ -1,12 +1,10 @@
 <?php
 namespace JVBase\managers;
 
-use JVBase\managers\MagicLinkManager;
-use JVBase\integrations\Cloudflare;
 use JVBase\meta\Form;
 use JVBase\ui\CRUDSkeleton;
 use JVBase\ui\Tabs;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_User;
 use WP_Error;
 
@@ -45,16 +43,17 @@
 		'referee_reward_type' => 'percentage',  // 'percentage' or 'fixed'
 		'referee_reward_amount' => 20,  // 20% or $20
 		'referee_reward_applies_to' => 'first_order',  // 'first_order' or 'all_orders'
-		'referral_role'	=> BASE.'client'
 	];
 
-	protected string $role = BASE.'client';
+	protected string $role;
 
 	protected array $settings;
 
 	public function __construct()
 	{
 		$this->defineTables();
+		$this->role = Site::getDefaultReferralRole();
+		$this->default_settings['referral_role'] = $this->role;
 		global $wpdb;
 		$this->wpdb = $wpdb;
 		$this->cache = Cache::for('referrals', WEEK_IN_SECONDS);
@@ -134,7 +133,7 @@
 
 			$table->setKeys([
 				['key' => 'PRIMARY', 'value' => 'id'],
-				['key' => 'UNIQUE', 'value' => 'to_user (`to_user`)'],
+				['key' => 'UNIQUE', 'value' => '(`to_user`)'],
 				'from_user (`from_user`)',
 				'status (`status`)',
 				'code (`referral_code`)',
@@ -165,8 +164,8 @@
 			]);
 
 			$table->setKeys([
-				['key' => 'PRIMARY', 'value' => 'id'],
-				['key' => 'UNIQUE', 'value' => 'code (`code`)'],
+				['key' => 'PRIMARY', 'value' => '(`id`)'],
+				['key' => 'UNIQUE', 'value' => '(`code`)'],
 				'user (`user_id`)',
 			]);
 
@@ -195,7 +194,7 @@
 
 			$table->setKeys([
 				['key' => 'PRIMARY', 'value' => '(`id`)'],
-				['key' => 'UNIQUE', 'value' => 'patient_guid (`patient_guid`)'],
+				['key' => 'UNIQUE', 'value' => '(`patient_guid`)'],
 				'user (`user_id`)',
 				'email (`email`)',
 			]);
@@ -238,9 +237,9 @@
 			$base = BASE;
 			$table->setConstraints([
 				"CONSTRAINT `{$base}reward_referral` FOREIGN KEY (`referral_id`)
-				REFERENCES {$this->referrals->getFullTableName()} (`id`) ON DELETE CASCADE",
+				REFERENCES `{$this->referrals->getFullTableName()}` (`id`) ON DELETE CASCADE",
 				"CONSTRAINT `{$base}reward_user` FOREIGN KEY (`user_id`)
-				REFERENCES {$table->getUserTable()}` (`ID`) ON DELETE CASCADE"
+				REFERENCES `{$table->getUserTable()}` (`ID`) ON DELETE CASCADE"
 			]);
 			$table->defineTable();
 			$this->rewards = $table;
@@ -329,7 +328,7 @@
 			'jvb-data-store',
 		];
 
-		if (Features::hasIntegration('cloudflare') && JVB()->connect('cloudflare')->isSetUp()) {
+		if (Site::hasIntegration('cloudflare') && JVB()->connect('cloudflare')->isSetUp()) {
 			JVB()->connect('cloudflare')->enqueueTurnstileScripts();
 		}
 		if (is_singular(BASE.'dash')) {
@@ -396,24 +395,24 @@
 	 * @param string|null $custom_code Optional custom code
 	 * @return string|WP_Error
 	 */
-	public function getUserReferralCode(int $user_id, ?string $custom_code = null):array|wp_error
+	public function getUserReferralCode(int $user_id, ?string $custom_code = null):string|false
 	{
 		$user = get_userdata($user_id);
 		if (!$user) {
-			return new WP_Error('invalid_user', 'User not found');
+			return false;
 		}
 
 		$existing = $this->codes->pluck('code', ['user_id' => $user_id],'created_at', 'DESC');
-		if ($existing && !$custom_code) {
-			return $existing;
+		if (!empty($existing) && !$custom_code) {
+			return $existing[0];
 		}
-		if ($custom_code && !in_array($custom_code, $existing)) {
+		if ($custom_code && !empty($existing) && !in_array($custom_code, $existing)) {
 			$test = $this->createCode($user_id, $custom_code);
 			if ($test) {
 				return $this->codes->pluck('code', ['user_id' => $user_id], 'created_at', 'DESC');
+			} else {
+				return $existing[0];
 			}
-		} else {
-			return $existing;
 		}
 
 		// Generate new code if custom provided or none exists
@@ -421,10 +420,10 @@
 
 		$success = $this->createCode($user_id, $code);
 		if ($success) {
-			return $this->codes->pluck('code', ['user_id' => $user_id], 'created_at', 'DESC');
+			return $this->codes->pluck('code', ['user_id' => $user_id], 'created_at', 'DESC')[0];
 		}
 
-		return $code;
+		return false;
 	}
 
 	/**
@@ -1395,7 +1394,7 @@
 	public function getLoggedInReferral(int $user_id): string
 	{
 		$referral_code = $this->getUserReferralCode($user_id);
-		if (is_wp_error($referral_code)) {
+		if (!$referral_code) {
 			return '';
 		}
 
@@ -1494,7 +1493,7 @@
 
 		$code = $this->getUserReferralCode($user->ID);
 		$yourCode = '';
-		if (!is_wp_error($code)) {
+		if ($code) {
 			$share_url = $this->getShareURL($code);
 			$yourCode = sprintf(
 				'<div class="callout">
@@ -1556,7 +1555,7 @@
 		$referrer = get_user_by('ID', $user_id);
 		$referral_code = $this->getUserReferralCode($user_id);
 
-		if (is_wp_error($referral_code)) {
+		if ($referral_code) {
 			return $referral_code;
 		}
 
@@ -2621,10 +2620,10 @@
 
 		// Regular users get their referral dashboard
 		$user_id = get_current_user_id();
-		$referral_code = get_user_meta($user_id, BASE . 'referral_code', true);
 
+		$referral_code = $this->getUserReferralCode($user_id);
 		if (!$referral_code) {
-			$referral_code = $this->getUserReferralCode($user_id);
+			$referral_code = $this->generateReferralCode($user_id);
 		}
 
 		$referrals = $this->getUserReferrals($user_id, ['limit' => 20]);
@@ -2839,7 +2838,7 @@
 			update_option(BASE . 'referral_page_id', $page_id);
 
 			// Save client import role
-			$import_role = sanitize_text_field($post_data[BASE . 'referral_role'] ?? JVB_USER);
+			$import_role = sanitize_text_field($post_data[BASE . 'referral_role'] ?? Site::getDefaultReferralRole());
 			update_option(BASE . 'referral_role', $import_role);
 
 			// Save reward settings
@@ -2892,7 +2891,7 @@
 	public function getShareButtons(int $user_id):void
 	{
 		$referral_code = $this->getUserReferralCode($user_id);
-		if (is_wp_error($referral_code)) {
+		if (!$referral_code) {
 			return;
 		}
 

--
Gitblit v1.10.0