Jake Vanderwerf
2026-09-18 a6413da67a4579866f0fd0323ddb23a7b6b9654a
inc/integrations/Integrations.php
@@ -3,6 +3,7 @@
use Exception;
use JVBase\managers\Cache;
use JVBase\managers\queue\Queue;
use JVBase\managers\UploadManager;
use JVBase\registrar\Registrar;
use WP_Error;
@@ -29,6 +30,9 @@
    * These properties define how the integration connects to external services
    */
   protected string|array $apiBase = ''; // Base URL(s) for API endpoints. Array format: ['base' => '', 'auth' => '']
   /**
    * @var array<APIEndpoint> An array of endpoints objects, with optional create, update, delete, batch<x>, and batchImport
    */
   protected array $apiEndpoints = [];   // Valid endpoint paths for this service
   protected int $refresh_interval = 0; //seconds before expiry to refresh tokens. 0 to disable
@@ -56,6 +60,7 @@
      $this->userID = $userID;
      $this->cache = Cache::for('integrations_' . $this->cacheName);
      $this->getPostTypes();
      $this->getTaxonomies();
      $this->getUsers();
@@ -173,7 +178,7 @@
         return $this->response(false, 'Failed to save credentials to database');
      } catch (\Exception $e) {
      } catch (Exception $e) {
         // Revert to old credentials on any error
         $old = Auth::getInstance()->getCredentials(
            $this->service_name,
@@ -242,7 +247,7 @@
   public function testConnection(bool $force = false): bool
   {
      if (!$this->isSetUp()) {
         return false;
         return true;
      }
      $this->ensureInitialized();
@@ -250,16 +255,9 @@
         return false;
      }
      // Cache test results to avoid excessive API calls
      $cacheKey = "connection_test_$this->service_name" . ($this->userID ? "_$this->userID" : '');
      $cached = $this->cache->get($cacheKey);
      if ($cached !== false && !$force) {
         return (bool)$cached;
      }
      try {
         if ($this->isOAuthService && !$this->hasOAuthCredentials()){
         if (!$this->hasOAuthCredentials()){
            //If this is an OAuth service, we might only be saving the app credentials first
            $result = true;
         } else {
@@ -267,11 +265,9 @@
         }
         $this->updateLastTestedTime();
         $this->cache->set($cacheKey, $result, 300); // Cache for 5 minutes
         return $result;
      } catch (Exception $e) {
         $this->logError('Connection test failed', ['error' => $e->getMessage()]);
         $this->cache->set($cacheKey, false, 60); // Cache failure for 1 minute
         $this->logError('testConnection', $e->getMessage());
         return false;
      }
   }
@@ -334,7 +330,7 @@
      array $data,
      array $options = []
   ):bool {
      $queue = JVB()->queue();
      $queue = Queue::getInstance();
      $queued =  $queue->queueOperation(
         $type,
@@ -397,8 +393,11 @@
      if (!empty($this->syncPostTypes)) {
         $this->addSavePost();
         add_action('transition_post_status', [$this, 'handlePostStatusTransition'], 10, 3);
         if (method_exists($this, 'addSavePost')) {
            $this->addSavePost();
         }
//       add_action('transition_post_status', [$this, 'handlePostStatusTransition'], 10, 3);
         if ($this->canSync['delete']) {
            add_action('before_delete_post', [$this, 'handleDeletePost'], 10, 1);
@@ -469,7 +468,7 @@
            'message' => 'Connection established successfully'
         ];
      } catch (\Exception $e) {
      } catch (Exception $e) {
         return [
            'success' => false,
            'message' => 'Error: ' . $e->getMessage()
@@ -486,10 +485,7 @@
   public function hasOAuthCredentials(?int $userID = null): bool
   {
      if ($userID !== $this->userID) {
         $this->switchUser($userID);
      }
      return $this->hasOAuth && $this->hasValidOAuth();
      return false;
   }
@@ -543,7 +539,7 @@
   public static function hasExtraOptions():bool
   {
      return static::getInstance()::$hasExtraOptions;
      return self::$hasExtraOptions;
   }
   /**
@@ -603,8 +599,8 @@
      if ($jpegVersion !== '' && is_int($jpegVersion)) {
         return $jpegVersion;
      }
      $uploader = new UploadManager();
      $converted = $uploader->convertImageTo($imgID, 'jpeg', 80, false);
      $uploader = UploadManager::getInstance();
      $converted = $uploader->convertImageTo($imgID, 'jpeg');
      if ($converted && !is_wp_error($converted)) {
         update_post_meta($imgID, BASE . 'jpeg_version', $converted['attachment_id']);
         return $converted['attachment_id'];
@@ -616,6 +612,7 @@
   /**
    * Used by JVBase\registrar\helpers\AddIntegrationFields.php
    * @param string|null $content_type
    * @return array
    */
   public function getAdditionalFields(?string $content_type = null):array
@@ -628,4 +625,9 @@
      return $this->icon;
   }
   public function getUserID():?int
   {
      return $this->userID;
   }
}