From a6413da67a4579866f0fd0323ddb23a7b6b9654a Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Fri, 18 Sep 2026 17:00:53 +0000
Subject: [PATCH] =Cleaning up the Integrations setup a bit, started the Helcim integration work too

---
 inc/managers/InvitationsManager.php |   49 ++++++++++++++++++++++++++++---------------------
 1 files changed, 28 insertions(+), 21 deletions(-)

diff --git a/inc/managers/InvitationsManager.php b/inc/managers/InvitationsManager.php
index da6cec1..de21889 100644
--- a/inc/managers/InvitationsManager.php
+++ b/inc/managers/InvitationsManager.php
@@ -2,10 +2,15 @@
 namespace JVBase\managers;
 
 use Exception;
+use JVBase\inc\managers\ErrorHelper;
+use JVBase\Instance;
 use JVBase\managers\queue\executors\InvitationExecutor;
+use JVBase\managers\queue\Queue;
 use JVBase\managers\queue\TypeConfig;
 use JVBase\registrar\Registrar;
 use JVBase\base\Site;
+use JVBase\rest\Rest;
+use JVBase\rest\routes\Invitations;
 use WP_Error;
 
 if (!defined('ABSPATH')) {
@@ -14,16 +19,22 @@
 
 class InvitationsManager
 {
+	use Instance, ErrorHelper;
 	protected array $inviteConfig;
 	protected CustomTable $table;
 	protected int $expiryDays = 14;
 	protected Cache $cache;
-	public function __construct()
+	protected Rest $route;
+
+	private function __construct()
 	{
 		$this->defineTable();
 		if (!isset($this->table)) {
 			return;
 		}
+		if (Site::membership() && Site::membership()->has('can_invite')) {
+			$this->route = Invitations::getInstance();
+		}
 		$this->setInviteConfig();
 		$this->cache = Cache::for('invitations')->user();
 		add_action('init', [$this, 'registerInvitationExecutors'], 5);
@@ -118,7 +129,7 @@
 	 */
 	public function registerInvitationExecutors(): void
 	{
-		$registry = JVB()->queue()->registry();
+		$registry = Queue::getInstance()->registry();
 		$executor = new InvitationExecutor();
 
 		// Create invitations - chunked at 20
@@ -144,10 +155,12 @@
 	/**
 	 * Build invite types from JVB constants
 	 * Combines JVB_MEMBERSHIP['can_invite'] and invitable taxonomies
+	 * TODO: Should be accessible via Site::getInstance()->membership()\
+	 *
 	 */
 	protected function buildInviteTypes(): array
 	{
-		$invitable = $this->cache->remember(
+		return $this->cache->remember(
 			'invitableTypes',
 			function () {
 				$types = [];
@@ -197,7 +210,6 @@
 				return $types;
 			}
 		);
-		return $invitable;
 
 	}
 
@@ -214,7 +226,7 @@
 		}
 
 		// User must be owner or manager of the term
-		return JVB()->roles()->isManager($userID, $termID);
+		return Roles::getInstance()()->isManager($userID, $termID);
 	}
 
 	/**
@@ -380,12 +392,7 @@
 
 		} catch (Exception $e) {
 			$this->table->rollback();
-
-			JVB()->error()->log(
-				'invitation_create',
-				'Error processing invitations: ' . $e->getMessage(),
-				['user_id' => $userID],
-			);
+			$this->logError($e->getMessage(), 'processInvitations', ['user_id' => $userID]);
 
 			return [
 				'success' => false,
@@ -554,9 +561,9 @@
 		}
 		$termText = implode('', $termContent);
 
-		$button = JVB()->email()->button($signupUrl, 'Join the Scene!');
-		$link = JVB()->email()->link($signupUrl);
-		$signature = JVB()->email()->signature();
+		$button = Emails::getInstance()->button($signupUrl, 'Join the Scene!');
+		$link = Emails::getInstance()->link($signupUrl);
+		$signature = Emails::getInstance()->signature();
 
 		$message = sprintf(
 			'<p>Hi %s!</p>
@@ -593,7 +600,7 @@
 			$signature
 		);
 
-		JVB()->email()->sendEmail($email, $subject, $message);
+		Emails::getInstance()->sendEmail($email, $subject, $message);
 	}
 
 	/**
@@ -655,7 +662,7 @@
 
 			// Grant capabilities
 			$user = get_userdata($userID);
-			$user->add_cap('skip_moderation', true);
+			$user->add_cap('skip_moderation');
 
 			return true;
 		});
@@ -671,7 +678,7 @@
 		$this->notifyInvitersOfAcceptance($invitation, $userID);
 
 		// Invalidate cache
-		Cache::for('invitations')->forget('user_' . $userID);
+		$this->cache->forget('user_' . $userID);
 
 		return true;
 	}
@@ -681,7 +688,7 @@
 	 */
 	protected function processTermMembership(int $userID, object $invitation): void
 	{
-		foreach (JVB()->roles()->getInvitableTaxonomies() as $taxonomy) {
+		foreach (Roles::getInstance()()->getInvitableTaxonomies() as $taxonomy) {
 			$column = 'to_' . $taxonomy;
 			if (isset($invitation->$column) && $invitation->$column) {
 				$termID = (int) $invitation->$column;
@@ -706,7 +713,7 @@
 		$userData = get_userdata($userID);
 
 		foreach ($inviters as $inviter) {
-			JVB()->notification()->addNotification(
+			NotificationManager::getInstance()->addNotification(
 				$inviter['user_id'],
 				'invitation_accepted',
 				[
@@ -732,7 +739,7 @@
 		);
 
 		// Clear cache after cleanup
-		Cache::for('invitations')->flush();
+		$this->cache->flush();
 	}
 
 	/*****************************************************************
@@ -760,7 +767,7 @@
 			$name
 		);
 
-		JVB()->email()->sendEmail($email, $subject, $content, 'INVITATION REVOKED');
+		Emails::getInstance()->sendEmail($email, $subject, $content, 'INVITATION REVOKED');
 	}
 
 	/**

--
Gitblit v1.10.0