Jake Vanderwerf
2026-09-18 a6413da67a4579866f0fd0323ddb23a7b6b9654a
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');
   }
   /**