From 7a9054bb3f033c98067b3196378311dae54c5fbf Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 20 Jan 2026 01:31:53 +0000
Subject: [PATCH] =OperationQueue refactor to the JVBase/managers/queue namespace
---
inc/integrations/GoogleMyBusiness.php | 123 ++++++++++++----------------------------
1 files changed, 37 insertions(+), 86 deletions(-)
diff --git a/inc/integrations/GoogleMyBusiness.php b/inc/integrations/GoogleMyBusiness.php
index f6541cc..c838f64 100644
--- a/inc/integrations/GoogleMyBusiness.php
+++ b/inc/integrations/GoogleMyBusiness.php
@@ -10,9 +10,12 @@
class GoogleMyBusiness extends Integrations
{
- private string $access_token;
+ private ?string $access_token = null;
protected string $readMask = 'name,title,storefrontAddress,metadata,openInfo,storeCode,categories,phoneNumbers,labels,specialHours';
private ?string $location = null;
+ private ?string $refresh_token = null;
+ private ?string $client_id = null;
+ private ?string $client_secret = null;
private ?string $account_id = null;
public function __construct(?int $userID = null)
@@ -82,18 +85,18 @@
'label' => 'OAuth Client Secret',
'required' => true,
],
- 'access_token' => [
- 'type' => 'text',
- 'subtype' => 'password',
- 'label' => 'Access Token',
- 'hint' => 'Generated automagically after OAuth authorization.'
- ],
- 'refresh_token' => [
- 'type' => 'text',
- 'subtype' => 'password',
- 'label' => 'Refresh Token',
- 'hint' => 'Generated automagically after OAuth authorization.'
- ]
+// 'access_token' => [
+// 'type' => 'text',
+// 'subtype' => 'password',
+// 'label' => 'Access Token',
+// 'hint' => 'Generated automagically after OAuth authorization.'
+// ],
+// 'refresh_token' => [
+// 'type' => 'text',
+// 'subtype' => 'password',
+// 'label' => 'Refresh Token',
+// 'hint' => 'Generated automagically after OAuth authorization.'
+// ]
];
$this->advanced = [
@@ -134,12 +137,12 @@
if (empty($this->credentials)) {
$this->loadCredentials();
}
- $this->access_token = $this->credentials['access_token'] ?? '';
- $this->refresh_token = $this->credentials['refresh_token'] ?? '';
- $this->client_id = $this->credentials['client_id'] ?? '';
- $this->client_secret = $this->credentials['client_secret'] ?? '';
- $this->location = $this->credentials['location'] ?? null;
- $this->account_id = $this->credentials['account'] ?? null;
+ $this->access_token = (array_key_exists('access_token', $this->credentials)) ? $this->credentials['access_token'] : null;
+ $this->refresh_token = (array_key_exists('refresh_token', $this->credentials)) ? $this->credentials['refresh_token'] : null;
+ $this->client_id = (array_key_exists('client_id', $this->credentials)) ? $this->credentials['client_id'] : null;
+ $this->client_secret = (array_key_exists('client_secret', $this->credentials)) ? $this->credentials['client_secret'] : null;
+ $this->location = (array_key_exists('location', $this->credentials)) ? $this->credentials['location'] : null;
+ $this->account_id = (array_key_exists('account', $this->credentials)) ? $this->credentials['account'] : null;
if ($this->account_id) {
$this->apiEndpoints[] = "/v1/{$this->account_id}/locations";
@@ -200,7 +203,6 @@
$type = $settings['content_type']??'post'; //can be 'post', 'offer', 'event', 'hours', 'info',
$initial = $settings['initial']?? false;
$syncOnUpdate = $settings['update']??false;
- error_log('Handling GMB Save Post with settings: '.print_r($settings, true));
if ($update && !$syncOnUpdate) {
return;
}
@@ -208,7 +210,6 @@
return;
}
- error_log('Continuing on...');
$options = $data = [];
switch ($type) {
case 'menu_item':
@@ -220,8 +221,7 @@
}
$data['post_id'] = $postID;
$operation = ($update) ? 'update_' : 'create_';
- error_log('[GMB]Queuing sync to service:'.print_r($data, true));
- error_log('Options: '.print_r($options, true));
+
$this->queueOperation(
$operation.$type,
$data,
@@ -470,8 +470,6 @@
// Build the complete menu structure
$menu_data = $gmb->collectMenu($menu_items);
- error_log('Menu Data: '.print_r($menu_data, true));
-
// Send to Google My Business API
$result = $this->updateFoodMenus($menu_data);
return [
@@ -509,7 +507,6 @@
$locations = $this->getLocations($account['name']);
foreach ($locations as $location) {
- error_log('Fetched Location: '.print_r($location, true));
if ($location['storeCode'] === $this->credentials['location']) {
// Auto-migrate: update stored location to use full resource name
$this->setSelectedLocation($location['name']);
@@ -696,7 +693,6 @@
// Filter to only allowed fields
$patch_data = array_intersect_key($updates,$allowed_fields);
- error_log('Updates: '.print_r($updates, true));
$location_name = $this->getSelectedLocationResourceName();
if (empty($patch_data)) {
@@ -1041,7 +1037,6 @@
if(!$this->isSetUp()) {
return [];
}
- error_log('[GMB] updateBusinessHours called with hours: ' . print_r($hours, true));
$location_name = $this->credentials['location'];
if (empty($location_name)) {
@@ -1064,11 +1059,7 @@
]
];
- error_log('[GMB] Complete update data: ' . print_r($update_data, true));
-
$endpoint = "/v1/{$location_name}?updateMask=regularHours";
- error_log('[GMB] API endpoint: ' . $endpoint);
- error_log('[GMB] Using API base: ' . 'base');
// Make the API request
$response = $this->makeRequest(
@@ -1078,18 +1069,15 @@
'base'
);
- error_log('[GMB] API response: ' . print_r($response, true));
-
$success = $response !== null;
- error_log('[GMB] updateBusinessHours result: ' . ($success ? 'SUCCESS' : 'FAILED'));
// Additional validation - check if the response contains the updated hours
if ($success && $response) {
if (isset($response['regularHours'])) {
- error_log('[GMB] SUCCESS: Updated hours confirmed in response: ' . print_r($response['regularHours'], true));
+// error_log('[GMB] SUCCESS: Updated hours confirmed in response: ' . print_r($response['regularHours'], true));
} else {
- error_log('[GMB] WARNING: No regularHours in response, but API call succeeded');
- error_log('[GMB] Full response keys: ' . implode(', ', array_keys($response)));
+// error_log('[GMB] WARNING: No regularHours in response, but API call succeeded');
+// error_log('[GMB] Full response keys: ' . implode(', ', array_keys($response)));
}
}
@@ -1099,9 +1087,6 @@
];
} catch (\Exception $e) {
- error_log('[GMB] Exception in updateBusinessHours: ' . $e->getMessage());
- error_log('[GMB] Exception trace: ' . $e->getTraceAsString());
-
$this->logError($e->getMessage(), [
'method' => 'updateBusinessHours'
]);
@@ -1114,8 +1099,6 @@
private function validateAndFormatHours(array $hours): array
{
- error_log('[GMB] Validating hours format...');
-
$valid_days = ['MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY'];
$periods = [];
@@ -1145,8 +1128,6 @@
continue;
}
- error_log('[GMB] Processing ' . $formatted_day . ' - times data: ' . print_r($times, true));
-
// Check if day is open with flexible comparison
$is_open = false;
if (isset($times['open'])) {
@@ -1178,10 +1159,7 @@
];
$periods[] = $period;
- error_log('[GMB] Valid period for ' . $formatted_day . ': ' . print_r($period, true));
}
-
- error_log('[GMB] Total valid periods: ' . count($periods));
return $periods;
}
@@ -1260,8 +1238,6 @@
]
];
- error_log('[GMB] Updating special hours with corrected structure: ' . json_encode($update_data, JSON_PRETTY_PRINT));
-
// Try the PATCH request
$response = $this->makeRequest(
'PATCH',
@@ -1276,8 +1252,6 @@
];
} catch (\Exception $e) {
- error_log('[GMB] setSpecialHours Exception: ' . $e->getMessage());
-
$this->logError($e->getMessage(), [
'method' => 'setSpecialHours'
]);
@@ -1429,9 +1403,6 @@
$ttl = 7 * 24 * 60 * 60; // week in seconds
$response = $this->getRequest('/v1/accounts', [], 'accounts', $ttl, $force)??[];
- // Log the raw response for debugging
- error_log('[GMB] Raw accounts response: ' . print_r($response, true));
-
if (isset($response['accounts']) && is_array($response['accounts'])) {
return $response['accounts'];
}
@@ -1479,7 +1450,6 @@
'v4'
);
- error_log('Review response: '.print_r($response, true));
$reviews = $response ?? [];
// Cache for 1 week (604800 seconds)
@@ -1580,7 +1550,6 @@
if (empty($account_name) || !str_starts_with($account_name, 'accounts/')) {
return [];
}
- error_log('[GMB] getLocations() called for: ' . $account_name . ' (force: ' . ($force ? 'true' : 'false') . ')');
$params = ['readMask' => $this->readMask];
$ttl = 7 * 24 * 60 * 60; // Week in seconds
@@ -1610,8 +1579,6 @@
*/
public function refreshStoredData(): array
{
- error_log('[GMB] Manually refreshing accounts and locations data');
-
try {
// Fetch fresh accounts data from API
$accounts = $this->getAccounts(true);
@@ -1671,7 +1638,6 @@
];
$endpoint = "/v1/{$location_name}?".http_build_query($params);
- error_log('[GMB] Fetching location: ' . $location_name);
$location = $this->getRequest($endpoint, [], 'base', 'moderate', $force);
return $location??null;
@@ -1771,9 +1737,7 @@
$text = preg_replace('/\s+/', ' ', $text);
// Trim
- $text = trim($text);
-
- return $text;
+ return trim($text);
}
/**
* Format date for GMB API
@@ -1814,13 +1778,10 @@
// Validate hour and minute ranges
if ($hour >= 0 && $hour <= 23 && $minute >= 0 && $minute <= 59) {
- $result = [
+ return [
'hours' => $hour,
'minutes' => $minute
];
-
- error_log('[GMB] Converted time "' . $time . '" to Google format: ' . print_r($result, true));
- return $result;
}
}
@@ -2110,9 +2071,7 @@
[],
'posts'
);
- $result = $response['foodMenus'] ?? [];
-
- return $result;
+ return $response['foodMenus'] ?? [];
}
/**
@@ -2234,8 +2193,6 @@
public function handleGetAllLocations():WP_Error|array
{
try {
- error_log('[GMB] AJAX getAllLocations called');
-
// Check if we should force refresh
$force = isset($_POST['force']) && $_POST['force'] === 'true';
@@ -2249,7 +2206,6 @@
$all_locations = array_merge($all_locations, $locations);
}
- error_log('[GMB] AJAX returning ' . count($all_locations) . ' locations');
return [
'success' => true,
'locations' => $all_locations,
@@ -2257,7 +2213,6 @@
];
} catch (\Exception $e) {
- error_log('[GMB] AJAX getAllLocations exception: ' . $e->getMessage());
return new WP_Error('failure', 'Something went wrong: '.$e->getMessage());
}
}
@@ -2271,15 +2226,12 @@
// Handle both AJAX and REST API calls
$selected_account = null;
- error_log('handle Update Location: '.print_r($data, true));
if (is_array($data)) {
$selected_account = $data['account'] ?? $data['location'] ?? null;
} elseif (isset($_POST['account'])) {
$selected_account = sanitize_text_field($_POST['account']);
}
- error_log('[GMB] updateLocation received: ' . print_r($selected_account, true));
-
if (empty($selected_account)) {
throw new \Exception('No account selected');
}
@@ -2322,9 +2274,7 @@
{
try {
// Use the static method to clear the entire cache group
- CacheManager::invalidateGroup('integrations_'.$this->cacheName);
-
- error_log('[GMB] Cleared all stored data for cache group: ' . $this->cacheName);
+ $this->cache->clear();
return true;
} catch (\Exception $e) {
@@ -2396,12 +2346,11 @@
'dailyRange.endDate.day' => date('j', strtotime($end_date))
];
- $response = $this->getRequest(
- "/v1/{$location_name}:fetchMultiDailyMetricsTimeSeries?" . http_build_query($params),
- $params,
- 'performance'
- );
- return $response;
+ return $this->getRequest(
+ "/v1/{$location_name}:fetchMultiDailyMetricsTimeSeries?" . http_build_query($params),
+ $params,
+ 'performance'
+ );
}
/**
@@ -3019,4 +2968,6 @@
]
];
}
+
+
}
--
Gitblit v1.10.0