From c68aefb847b09daa0697de7684d3451e2e68ce1e Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 09 Jul 2026 23:10:23 +0000
Subject: [PATCH] =Refactor of Integrations.php to be a bit more useful with a suite of methods for create, update, delete back and forths for integrations where sharing is enabled. Also considering a single instance with a connect method to connect as the site (no user) vs connecting as an individual user - rather than recreating instances for every user.

---
 inc/integrations/GoogleMyBusiness.php |   38 ++++++++++++--------------------------
 1 files changed, 12 insertions(+), 26 deletions(-)

diff --git a/inc/integrations/GoogleMyBusiness.php b/inc/integrations/GoogleMyBusiness.php
index b802142..a66a81a 100644
--- a/inc/integrations/GoogleMyBusiness.php
+++ b/inc/integrations/GoogleMyBusiness.php
@@ -216,39 +216,25 @@
 
 	public function handleTheSavePost(int $postID, \WP_Post $post, bool $update, array $settings):void
 	{
-		$type = $settings['content_type']??'post'; //can be 'post', 'offer', 'event', 'hours', 'info',
-		$initial = $settings['initial']?? false;
-		$syncOnUpdate = $settings['update']??false;
-		if ($update && !$syncOnUpdate) {
-			return;
-		}
-		if (!$initial) {
+
+		if (!$this->hasOAuthCredentials()) {
+			error_log('OAuth Not set up for '.$this->service_name);
 			return;
 		}
 
-		$options = $data = [];
-		switch ($type) {
-			case 'menu_item':
-				$options = ['delay' => 60];
-				break;
-		}
-		if (!user_can($post->post_author, 'manage_options')) {
-			$data['user'] = $post->post_author;
-		}
-		$data['post_id'] = $postID;
-		$operation = ($update) ? 'update_' : 'create_';
-
-		$this->queueOperation(
-			$operation.$type,
-			$data,
-			$options
-		);
+		$this->queueOperation(self::$syncTo, [
+			'items'		=> [$postID],
+			'user'		=> user_can($post->post_author, 'manage_options') ? null : $post->post_author
+		], [
+			'delay'	=> 60
+		]);
+		Meta::forPost($postID)->set('_'.$this->service_name.'_sync_status', 'queued');
 	}
 
 	public function processOperation(\WP_Error|array $result, object $operation, array $data):\WP_Error|array
 	{
 		try {
-			$gmb = (array_key_exists('user', $data)) ? new self((int)$data['user']) : $this;
+			$gmb = (array_key_exists('user', $data) && $data['user'] !== 0) ? $this->getInstance((int)$data['user']) : $this;
 			$gmb->ensureInitialized();
 			switch ($operation->type) {
 				case 'gmb_create_menu_item':
@@ -481,7 +467,7 @@
 				];
 			}
 
-			$gmb = new self($data['userID']??null);
+			$gmb = self::getInstance($data['userID']??null);
 
 			// Build the complete menu structure
 			$menu_data = $gmb->collectMenu($menu_items);

--
Gitblit v1.10.0