From b38f03c0e7218762d90fa5092696b127f24f36db Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 25 Jan 2026 07:07:26 +0000
Subject: [PATCH] =Some logical flaws in Queue.php, Queue.js, ContentExecutor.php, UploadExecutor.php - particularly with timeline ordering, frontend queue updates, etc
---
inc/managers/ReferralManager.php | 154 ++++++++++++++++++++++++++++-----------------------
1 files changed, 84 insertions(+), 70 deletions(-)
diff --git a/inc/managers/ReferralManager.php b/inc/managers/ReferralManager.php
index ade87e0..b3c1644 100644
--- a/inc/managers/ReferralManager.php
+++ b/inc/managers/ReferralManager.php
@@ -24,7 +24,9 @@
{
protected $wpdb;
protected MagicLinkManager $magic_link;
- protected CacheManager $cache;
+ protected Cache $cache;
+ protected Cache $requestCache;
+ protected Cache $statsCache;
protected string $referrals_table;
protected ?int $referralPage = null;
protected string $rewards_table;
@@ -48,7 +50,10 @@
{
global $wpdb;
$this->wpdb = $wpdb;
- $this->cache = CacheManager::for('referrals', WEEK_IN_SECONDS);
+ $this->cache = Cache::for('referrals', WEEK_IN_SECONDS);
+ $this->requestCache = Cache::for('referral_requests', WEEK_IN_SECONDS)->connect('referrals', true);
+ $this->statsCache = Cache::for('referral_stats', WEEK_IN_SECONDS)->connect('referrals', true);
+
$this->referrals_table = $wpdb->prefix . BASE . 'referrals';
$this->rewards_table = $wpdb->prefix . BASE . 'referral_rewards';
@@ -355,7 +360,7 @@
}
// Clear caches
- $this->cache->clear();
+ $this->cache->flush();
// Fire action for tracking
do_action('jvb_referral_processed', $user_id, $referrer->ID, $referral_code);
@@ -519,19 +524,19 @@
*/
public function getUserReferrals(int $user_id, array $args = []): array
{
- return $this->cache->remember(
- $user_id,
+ $defaults = [
+ 'status' => 'all',
+ 'limit' => 100,
+ 'offset' => 0,
+ 'orderby' => 'referred_at',
+ 'order' => 'DESC'
+ ];
+
+ $args = wp_parse_args($args, $defaults);
+
+ return $this->requestCache->remember(
+ $this->requestCache->generateKey(array_merge(['user'=>$user_id], $args)),
function() use ($user_id, $args) {
- $defaults = [
- 'status' => 'all',
- 'limit' => 100,
- 'offset' => 0,
- 'orderby' => 'referred_at',
- 'order' => 'DESC'
- ];
-
- $args = wp_parse_args($args, $defaults);
-
$where = $this->wpdb->prepare("WHERE referrer_id = %d", $user_id);
if ($args['status'] !== 'all') {
@@ -575,37 +580,33 @@
*/
public function getUserStats(int $user_id): array
{
- $cache_key = 'stats_' . $user_id;
- $cached = $this->cache->get($cache_key);
-
- if ($cached !== false) {
- return $cached;
- }
-
- $stats = $this->wpdb->get_row($this->wpdb->prepare(
- "SELECT
+ return $this->statsCache->remember(
+ $user_id,
+ function() use ($user_id) {
+ $stats = $this->wpdb->get_row($this->wpdb->prepare(
+ "SELECT
COUNT(*) as code_used,
SUM(CASE WHEN status IN ('consulted', 'treated') THEN 1 ELSE 0 END) as consultations,
SUM(CASE WHEN status = 'treated' THEN 1 ELSE 0 END) as treatments,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) as pending
FROM {$this->referrals_table}
WHERE referrer_id = %d",
- $user_id
- ), ARRAY_A);
+ $user_id
+ ), ARRAY_A);
- // Get total rewards earned (available + redeemed)
- $rewards = $this->wpdb->get_var($this->wpdb->prepare(
- "SELECT SUM(amount)
+ // Get total rewards earned (available + redeemed)
+ $rewards = $this->wpdb->get_var($this->wpdb->prepare(
+ "SELECT SUM(amount)
FROM {$this->rewards_table}
WHERE user_id = %d AND reward_type = 'referrer'",
- $user_id
- ));
+ $user_id
+ ));
- $stats['total_rewards'] = floatval($rewards ?? 0);
- $stats['user_id'] = $user_id;
- $this->cache->set($cache_key, $stats, HOUR_IN_SECONDS);
-
- return $stats;
+ $stats['total_rewards'] = floatval($rewards ?? 0);
+ $stats['user_id'] = $user_id;
+ return $stats;
+ }
+ );
}
/**
@@ -617,20 +618,23 @@
*/
public function getTopReferrers(int $limit = 10, string $period = 'all'): array
{
- $where = '';
+ return $this->statsCache->remember(
+ $this->statsCache->generateKey(['limit'=>$limit, 'period' => $period]),
+ function() use ($limit, $period) {
+ $where = '';
- if ($period !== 'all') {
- $date_where = match($period) {
- 'day' => "referred_at >= DATE_SUB(NOW(), INTERVAL 1 DAY)",
- 'week' => "referred_at >= DATE_SUB(NOW(), INTERVAL 1 WEEK)",
- 'month' => "referred_at >= DATE_SUB(NOW(), INTERVAL 1 MONTH)",
- default => "1=1"
- };
+ if ($period !== 'all') {
+ $date_where = match($period) {
+ 'day' => "referred_at >= DATE_SUB(NOW(), INTERVAL 1 DAY)",
+ 'week' => "referred_at >= DATE_SUB(NOW(), INTERVAL 1 WEEK)",
+ 'month' => "referred_at >= DATE_SUB(NOW(), INTERVAL 1 MONTH)",
+ default => "1=1"
+ };
- $where = "WHERE {$date_where}";
- }
+ $where = "WHERE {$date_where}";
+ }
- $query = "SELECT
+ $query = "SELECT
referrer_id,
COUNT(*) as referral_count,
SUM(CASE WHEN status = 'treated' THEN 1 ELSE 0 END) as treated_count
@@ -640,16 +644,19 @@
ORDER BY referral_count DESC
LIMIT {$limit}";
- $results = $this->wpdb->get_results($query);
+ $results = $this->wpdb->get_results($query);
- // Enrich with user data
- foreach ($results as &$result) {
- $user = get_user_by('ID', $result->referrer_id);
- $result->user_name = $user ? $user->display_name : 'Unknown';
- $result->user_email = $user ? $user->user_email : '';
- }
+ // Enrich with user data
+ foreach ($results as &$result) {
+ $user = get_user_by('ID', $result->referrer_id);
+ $result->user_name = $user ? $user->display_name : 'Unknown';
+ $result->user_email = $user ? $user->user_email : '';
+ }
- return $results;
+ return $results;
+ }
+ );
+
}
/**
@@ -772,23 +779,30 @@
*/
protected function generateCSV(array $referrals): string
{
- $csv = "Referred By,Referee Name,Referee Email,Referee Phone,Referral Code,Status,Referred At,Treated At\n";
+ $cache = Cache::for('referralCSV', HOUR_IN_SECONDS)->connect('referrals');
+ return $cache->remember(
+ 'csv',
+ function () use ($referrals) {
+ $csv = "Referred By,Referee Name,Referee Email,Referee Phone,Referral Code,Status,Referred At,Treated At\n";
- foreach ($referrals as $referral) {
- $csv .= sprintf(
- '"%s","%s","%s","%s","%s","%s","%s","%s"' . "\n",
- $referral->referrer_name ?? 'Unknown',
- $referral->referee_name,
- $referral->referee_email,
- $referral->referee_phone,
- $referral->referral_code,
- $referral->status,
- $referral->referred_at,
- $referral->treated_at ?? 'Not yet'
- );
- }
+ foreach ($referrals as $referral) {
+ $csv .= sprintf(
+ '"%s","%s","%s","%s","%s","%s","%s","%s"' . "\n",
+ $referral->referrer_name ?? 'Unknown',
+ $referral->referee_name,
+ $referral->referee_email,
+ $referral->referee_phone,
+ $referral->referral_code,
+ $referral->status,
+ $referral->referred_at,
+ $referral->treated_at ?? 'Not yet'
+ );
+ }
- return $csv;
+ return $csv;
+ }
+ );
+
}
/**
--
Gitblit v1.10.0