From fff721dd185f5b97f7ae7a6e64189e55887ff590 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 05 Jul 2026 18:36:57 +0000
Subject: [PATCH] =Cleaning up the Square integration (still a bit more to do yet). Also majorly overhauled /rest/ files to ignore a rest request 'user' paramater, and rely on get_current_user_id() instead.

---
 inc/integrations/Integrations.php |  113 ++++++++++++++++++++++----------------------------------
 1 files changed, 44 insertions(+), 69 deletions(-)

diff --git a/inc/integrations/Integrations.php b/inc/integrations/Integrations.php
index 5a14350..761e6a0 100644
--- a/inc/integrations/Integrations.php
+++ b/inc/integrations/Integrations.php
@@ -28,6 +28,17 @@
  */
 abstract class Integrations
 {
+	//Flag to allow for custom settings (defaults, etc) for an integration in the dashboard
+	public static bool $hasExtraOptions = false;
+	/**
+	 * Queue types
+	 * These types match with IntegrationExecutor
+	 */
+	protected static string $syncTo = 'sync_to';
+	protected static string $deleteFrom = 'delete_from';
+	protected static string $syncFrom = 'sync_from';
+	protected static string $syncCustomer = 'sync_customer';
+	protected static string $import = 'import';
 	/**
 	 * API Configuration
 	 * These properties define how the integration connects to external services
@@ -57,7 +68,7 @@
 	 * Used for UI rendering in admin interfaces
 	 */
 	public string $title;  // Human-readable service name (e.g., 'Google My Business')
-	public string $icon;   // Phosphoricons icon slug
+	public string $icon = '';   // Phosphoricons icon slug
 
 	/**
 	 * Credentials & State
@@ -166,7 +177,7 @@
 	protected bool $is_healthy = true;
 	protected bool $handleWebhooks = false;
 
-	public function __construct(?int $userID = null)
+	protected function __construct(?int $userID = null)
 	{
 		$this->cacheName = $this->cacheName ?: $this->service_name;
 		$this->userID = $userID;
@@ -198,6 +209,13 @@
 		}
 
 		add_filter('jvbShouldRenderMeta', [$this, 'checkRenderField'], 10, 4);
+
+
+	}
+
+	protected function addFilters():bool
+	{
+		return is_null($this->userID);
 	}
 
 	protected function setContentTypes():void
@@ -319,7 +337,7 @@
 		if (!$taxonomies) {
 			// Combine both content and taxonomy filtering
 			$taxonomies = [];
-			foreach (Registrar::getFeatured('is_content', 'term') as $type) {
+			foreach (Registrar::withFeature('is_content', 'term') as $type) {
 				$registrar = Registrar::getInstance($type);
 				if ($registrar->hasIntegration($this->service_name)) {
 					$taxonomies[] = $registrar->getSlug();
@@ -1413,51 +1431,6 @@
 	}
 
 
-	/**
-	 * Switch user context
-	 */
-	public function switchUser(int $user_id): void
-	{
-		if ($this->userID === $user_id) {
-			return;
-		}
-
-		// Clean up current context
-		$this->cleanup();
-
-		// Switch context
-		$this->userID = $user_id;
-		$this->credentials = [];
-		$this->resetTokenRefreshFlag();  // ADD THIS LINE
-
-		$this->ensureInitialized();
-	}
-
-	public function getAsUser(int $user_id) {
-		return new $this($user_id);
-	}
-
-	/**
-	 * Clean up resources
-	 */
-	protected function cleanup(): void
-	{
-		// Clear sensitive data
-		$this->credentials = [];
-
-		// Clear request history
-		$this->request_history = [];
-	}
-
-	/**
-	 * Destructor - ensure cleanup
-	 */
-	public function __destruct()
-	{
-		$this->cleanup();
-	}
-
-
 	/***************************************************************
 		ERROR HANDLING
 	 ***************************************************************/
@@ -2705,6 +2678,20 @@
 		return $this->title;
 	}
 
+	public static function title():string
+	{
+		return static::getInstance()->getTitle();
+	}
+	public static function icon():string
+	{
+		return static::getInstance()->getIcon();
+	}
+
+	public static function hasExtraOptions():bool
+	{
+		return static::getInstance()::$hasExtraOptions;
+	}
+
 	/*********************************************************************
 		RENDERING
 	 *********************************************************************/
@@ -3340,27 +3327,10 @@
 			return [];
 		}
 
-		$key = BASE.$this->service_name.'_enabled_content_types';
-		$enabled = get_option($key);
-		if (!$enabled) {
-			$enabled = [];
-			foreach (Registrar::getRegistered() as $registrar) {
-				$registrar = Registrar::getInstance($registrar);
-				if (!$registrar->hasIntegration($this->service_name)) {
-					continue;
-				}
-				$type = $registrar->getIntegration($this->service_name)->getContent_type();
-				if (!$type) {
-					continue;
-				}
-
-				if (!in_array($type, $enabled)) {
-					$enabled[] = $type;
-				}
-			}
-			update_option($key, $enabled);
-		}
-		return $enabled;
+		return array_filter(array_map(function($registrar) {
+			$registrar = Registrar::getInstance($registrar);
+			return $registrar->getIntegration($this->service_name)->getContentType();
+		}, Registrar::withIntegration($this->service_name)));
 	}
 
 	protected function getSupportedImage(int $imgID):int
@@ -3543,4 +3513,9 @@
 	{
 		return [];
 	}
+
+	public function getIcon():string
+	{
+		return $this->icon;
+	}
 }

--
Gitblit v1.10.0