![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/plugins/MauticSocialBundle/Integration/ |
<?php namespace MauticPlugin\MauticSocialBundle\Integration; class FoursquareIntegration extends SocialIntegration { public function getName(): string { return 'Foursquare'; } public function getPriority(): int { return 2; } /** * @return string[] */ public function getIdentifierFields(): array { return [ 'email', 'twitter', // foursquare allows searching directly by twitter handle ]; } public function getAuthenticationUrl(): string { return 'https://foursquare.com/oauth2/authenticate'; } public function getAccessTokenUrl(): string { return 'https://foursquare.com/oauth2/access_token'; } public function getAuthenticationType(): string { return 'oauth2'; } /** * @param string $endpoint * @param string $m */ public function getApiUrl($endpoint, $m = 'foursquare'): string { return "https://api.foursquare.com/v2/$endpoint?v=20140806&m={$m}"; } /** * @param array $parameters * @param string $method * @param array $settings * * @return mixed|string */ public function makeRequest($url, $parameters = [], $method = 'GET', $settings = []) { $settings[$this->getAuthTokenKey()] = 'oauth_token'; return parent::makeRequest($url, $parameters, $method, $settings); } /** * Get public data. */ public function getUserData($identifier, &$socialCache): void { if ($id = $this->getContactUserId($identifier, $socialCache)) { $url = $this->getApiUrl("users/{$id}"); $data = $this->makeRequest($url); if (!empty($data) && isset($data->response->user)) { $result = $data->response->user; $socialCache['profile'] = $this->matchUpData($result); if (isset($result->photo)) { $socialCache['profile']['profileImage'] = $result->photo->prefix.'300x300'.$result->photo->suffix; } $socialCache['profile']['profileHandle'] = $id; } } } public function getPublicActivity($identifier, &$socialCache): void { if ($id = $this->getContactUserId($identifier, $socialCache)) { $activity = [ // 'mayorships' => array(), 'tips' => [], // 'lists' => array() ]; /* //mayorships $url = $this->getApiUrl("users/{$id}/mayorships"); $data = $this->makeRequest($url); if (isset($data->response->mayorships) && count($data->response->mayorships->items)) { $limit = 5; foreach ($data->response->mayorships->items as $m) { if (empty($limit)) { break; } //find main category of venue $category = ''; foreach ($m->venue->categories as $c) { if ($c->primary) { $category = $c->name; break; } } $contact = (!empty($m->contact->formattedPhone)) ? $m->contact->formattedPhone : ''; $activity['mayorships'][] = array( 'venueName' => $m->venue->name, 'venueLocation' => $m->venue->location->formattedAddress, 'venueContact' => $contact, 'venueCategory' => $category ); $limit--; } } */ // tips $url = $this->getApiUrl("users/{$id}/tips").'&limit=5&sort=recent'; $data = $this->makeRequest($url); if (isset($data->response->tips) && count($data->response->tips->items)) { foreach ($data->response->tips->items as $t) { // find main category of venue $category = ''; foreach ($t->venue->categories as $c) { if ($c->primary) { $category = $c->name; break; } } $contact = (!empty($t->contact->formattedPhone)) ? $t->contact->formattedPhone : ''; $activity['tips'][] = [ 'createdAt' => $t->createdAt, 'tipText' => $t->text, 'tipUrl' => $t->canonicalUrl, 'venueName' => $t->venue->name, 'venueLocation' => $t->venue->location->formattedAddress, 'venueContact' => $contact, 'venueCategory' => $category, ]; } } /* //lists $url = $this->getApiUrl("users/{$id}/lists") . "&limit=5&group=created"; $data = $this->makeRequest($url); if (isset($data->response->lists) && count($data->response->lists->items)) { foreach ($data->response->lists->items as $l) { if (!$l->listItems->count) { continue; } $item = array( 'listName' => $l->name, 'listDescription' => $l->description, 'listUrl' => $l->canonicalUrl, 'listCreatedAt' => (isset($l->createdAt)) ? $l->createdAt : '', 'listUpdatedAt' => (isset($l->updatedAt)) ? $l->updatedAt : '', 'listItems' => array() ); //get a sample of the list items $url = "https://api.foursquare.com/v2/lists/{$l->id}?limit=5&sort=recent&v=20140719&oauth_token={$keys['access_token']}"; $listData = $this->makeRequest($url); if (isset($listData->response->list->listItems) && count($listData->response->list->listItems->items)) { foreach ($listData->response->list->listItems->items as $li) { //find main category of venue $category = ''; foreach ($li->venue->categories as $c) { if ($c->primary) { $category = $c->name; break; } } $contact = (!empty($li->contact->formattedPhone)) ? $li->contact->formattedPhone : ''; $item['listItems'][] = array( 'createdAt' => $li->createdAt, 'venueName' => $li->venue->name, 'venueLocation' => $li->venue->location->formattedAddress, 'venueContact' => $contact, 'venueCategory' => $category ); } } $activity['lists'][] = $item; } } */ if (!empty($activity)) { $socialCache['activity'] = $activity; } } } public function getErrorsFromResponse($response): string { if (is_object($response) && isset($response->meta->errorDetail)) { return $response->meta->errorDetail.' ('.$response->meta->code.')'; } return ''; } public function matchFieldName($field, $subfield = '') { if ('contact' == $field && in_array($subfield, ['facebook', 'twitter'])) { return $subfield.'ProfileHandle'; } return parent::matchFieldName($field, $subfield); } public function getAvailableLeadFields($settings = []): array { return [ 'profileHandle' => ['type' => 'string'], 'firstName' => ['type' => 'string'], 'lastName' => ['type' => 'string'], 'gender' => ['type' => 'string'], 'homeCity' => ['type' => 'string'], 'bio' => ['type' => 'string'], 'contact' => [ 'type' => 'object', 'fields' => [ 'twitter', 'facebook', 'phone', ], ], ]; } public function getSupportedFeatures(): array { return [ 'public_profile', 'public_activity', ]; } /** * @return bool */ private function getContactUserId(&$identifier, &$socialCache) { if (!empty($socialCache['id'])) { return $socialCache['id']; } elseif (empty($identifier)) { return false; } $cleaned = $this->cleanIdentifier($identifier); if (!is_array($cleaned)) { $cleaned = [$cleaned]; } foreach ($cleaned as $type => $c) { $url = $this->getApiUrl('users/search')."&{$type}={$c}"; $data = $this->makeRequest($url); if (!empty($data) && isset($data->response->results) && count($data->response->results)) { $socialCache['id'] = $data->response->results[0]->id; return $socialCache['id']; } } return false; } public function getFormType() { return null; } }