Jake Vanderwerf
2026-08-25 3d25ad7de4fdbb3eba2cde2a62422e6be5d79a0a
inc/managers/queue/executors/IntegrationExecutor.php
@@ -18,7 +18,7 @@
 *          {integration}_sync_from, {integration}_sync_customer, etc.
 *
 * Registration (in Integrations::registerAdditionalHooks):
 *   $queue = JVB()->queue();
 *   $queue = Queue::getInstance();
 *   $queue->registry()->register('helcim_sync_to', new TypeConfig(
 *       executor: new IntegrationExecutor(),
 *       chunkKey: 'items',
@@ -86,9 +86,6 @@
    */
   private function parseOperationType(string $type): array
   {
      // Remove BASE prefix if present (e.g. 'jvb_helcim_sync_to' → 'helcim_sync_to')
      $type = str_replace(BASE, '', $type);
      $pos = strpos($type, '_');
      if ($pos === false) {
         throw new Exception("Invalid integration operation type: {$type}");
@@ -103,21 +100,12 @@
   /**
    * Resolve integration instance, optionally for a specific user
    */
   private function resolveIntegration(string $serviceName, int $userId): ?object
   private function resolveIntegration(string $serviceName, ?int $userId = null): ?object
   {
      if (!isset($this->integrationCache[$serviceName])) {
         $this->integrationCache[$serviceName] = JVB()->connect($serviceName);
      if ($userId === 0) {
         $userId = null;
      }
      $integration = $this->integrationCache[$serviceName];
      // If operation has a user context, re-instantiate for that user
      if ($integration && $userId) {
         $class = get_class($integration);
         return new $class($userId);
      }
      return $integration;
      return JVB()->connect($serviceName, $userId);
   }
   /*****************************************************************
@@ -137,6 +125,11 @@
         return new Result(outcome: 'success', result: ['synced' => [], 'message' => 'No items to sync']);
      }
      if ($integration->hasBatchUpdate()) {
         $result = $integration->updateBatchToService($data['items']);
         return new Result(outcome: $result['outcome'], result: $result['result']);
      }
      foreach ($items as $postID) {
         try {
            $result = $integration->syncPostToService((int)$postID);