Skip to content

Commit 8a92ad2

Browse files
Merge pull request #1072 from Codeinwp/bugfix/pro/624
Handled multiple GMB accounts for post sharing
2 parents df73ab5 + 1d099cb commit 8a92ad2

File tree

1 file changed

+37
-14
lines changed

1 file changed

+37
-14
lines changed

includes/admin/services/class-rop-gmb-service.php

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -210,13 +210,11 @@ public function add_account_with_app( $accounts_data ) {
210210
*
211211
* @since 8.5.9
212212
* @access private
213+
* @param array<string, mixed> $arguments Arguments needed by the method.
213214
*
214215
* @return array
215216
*/
216-
private function gmb_refresh_access_token() {
217-
218-
$rop_data = get_option( 'rop_data' );
219-
$rop_services_data = $rop_data['services'];
217+
private function gmb_refresh_access_token( $arguments ) {
220218

221219
$id = '';
222220
$access_token = '';
@@ -225,26 +223,51 @@ private function gmb_refresh_access_token() {
225223
$gmb_service_id = '';
226224
$refresh_token = '';
227225

226+
$credentials = isset( $arguments['credentials'] ) ? $arguments['credentials'] : array();
227+
228+
if ( ! empty( $credentials ) ) {
229+
$created = isset( $credentials['created'] ) ? $credentials['created'] : '';
230+
$expires_in = isset( $credentials['expires_in'] ) ? $credentials['expires_in'] : '';
231+
$access_token = isset( $credentials['access_token'] ) ? $credentials['access_token'] : '';
232+
233+
// Check if access token will expire in next 30 seconds.
234+
$expired = ( $created + ( $expires_in - 30 ) ) < time();
235+
236+
// If it's not expired then return current access token in DB
237+
if ( ! $expired ) {
238+
// Add an expires_in value to prevent Google Client PHP notice for undefined expires_in index
239+
$access_token = array( 'access_token' => $access_token, 'expires_in' => $expires_in );
240+
return $access_token;
241+
}
242+
}
243+
244+
$rop_data = get_option( 'rop_data' );
245+
$rop_services_data = isset( $rop_data['services'] ) ? $rop_data['services'] : array();
246+
$account_id = isset( $arguments['id'] ) ? $arguments['id'] : '';
247+
228248
foreach ( $rop_services_data as $service => $service_data ) {
229249
if ( $service_data['service'] === 'gmb' ) {
230-
$id = $service_data['id'];
231-
$access_token = $service_data['credentials']['access_token'];
232-
$created = $service_data['credentials']['created'];
233-
$expires_in = $service_data['credentials']['expires_in'];
234-
$gmb_service_id = $service;
235-
$refresh_token = $service_data['credentials']['refresh_token'];
236-
break;
250+
foreach ( $service_data['available_accounts'] as $account ) {
251+
if ( $account_id === $account['id'] ) {
252+
$id = $service_data['id'];
253+
$access_token = $service_data['credentials']['access_token'];
254+
$created = $service_data['credentials']['created'];
255+
$expires_in = $service_data['credentials']['expires_in'];
256+
$gmb_service_id = $service;
257+
$refresh_token = $service_data['credentials']['refresh_token'];
258+
break;
259+
}
260+
}
237261
}
238262
}
239263

240-
// $created = '1593273390';
241264
// Check if access token will expire in next 30 seconds.
242265
$expired = ( $created + ( $expires_in - 30 ) ) < time();
243266

244267
// If it's not expired then return current access token in DB
245268
if ( ! $expired ) {
246269
// Add an expires_in value to prevent Google Client PHP notice for undefined expires_in index
247-
$access_token = array('access_token' => $access_token, 'expires_in' => $expires_in);
270+
$access_token = array( 'access_token' => $access_token, 'expires_in' => $expires_in );
248271
return $access_token;
249272
}
250273

@@ -488,7 +511,7 @@ public function share( $post_details, $args = array() ) {
488511
}
489512
}
490513

491-
$access_token = $this->gmb_refresh_access_token();
514+
$access_token = $this->gmb_refresh_access_token( $args );
492515
$client->setAccessToken( $access_token );
493516
$client->setApiFormatV2( true );
494517

0 commit comments

Comments
 (0)