Spaces:
No application file
No application file
namespace MauticPlugin\MauticCrmBundle\Api; | |
use Mautic\PluginBundle\Exception\ApiErrorException; | |
class ZohoApi extends CrmApi | |
{ | |
/** | |
* @param string $operation | |
* @param string $method | |
* @param bool $json | |
* @param array $settings | |
* | |
* @return array | |
* | |
* @throws ApiErrorException | |
*/ | |
protected function request($operation, array $parameters = [], $method = 'GET', $json = false, $settings = []) | |
{ | |
$tokenData = $this->integration->getKeys(); | |
$url = sprintf('%s/%s', $tokenData['api_domain'].'/crm/v2', $operation); | |
if (!isset($settings['headers'])) { | |
$settings['headers'] = []; | |
} | |
$settings['headers']['Authorization'] = 'Zoho-oauthtoken '.$tokenData['access_token']; | |
if ($json) { | |
$settings['Content-Type'] = 'application/json'; | |
$settings['encode_parameters'] = 'json'; | |
} | |
$response = $this->integration->makeRequest($url, $parameters, $method, $settings); | |
if (isset($response['status']) && 'error' === $response['status']) { | |
throw new ApiErrorException($response['message']); | |
} | |
return $response; | |
} | |
/** | |
* @param string $object | |
* | |
* @return array | |
* | |
* @throws ApiErrorException | |
*/ | |
public function getLeadFields($object = 'Leads') | |
{ | |
if ('company' == $object) { | |
$object = 'Accounts'; // Zoho object name | |
} | |
return $this->request('settings/fields?module='.$object, [], 'GET'); | |
} | |
/** | |
* @param string $object | |
* | |
* @return array | |
* | |
* @throws ApiErrorException | |
*/ | |
public function createLead(array $data, $object = 'Leads') | |
{ | |
$parameters['data'] = $data; | |
return $this->request($object, $parameters, 'POST', true); | |
} | |
/** | |
* @param string $object | |
* | |
* @return array | |
* | |
* @throws ApiErrorException | |
*/ | |
public function updateLead(array $data, $object = 'Leads') | |
{ | |
$parameters['data'] = $data; | |
return $this->request($object, $parameters, 'PUT', true); | |
} | |
/** | |
* @param string $object | |
* | |
* @return array | |
* | |
* @throws ApiErrorException | |
*/ | |
public function getLeads(array $params, $object, $id = null) | |
{ | |
if (!isset($params['selectColumns'])) { | |
$params['selectColumns'] = 'All'; | |
$params['newFormat'] = 1; | |
} | |
$settings = []; | |
if ($params['lastModifiedTime']) { | |
$settings['headers'] = [ | |
'If-Modified-Since' => $params['lastModifiedTime'], | |
]; | |
} | |
if ($id) { | |
if (is_array($id)) { | |
$params['id'] = implode(';', $id); | |
} else { | |
$params['id'] = $id; | |
} | |
$data = $this->request($object, $params, 'GET', false, $settings); | |
} else { | |
$data = $this->request($object, $params, 'GET', false, $settings); | |
} | |
return $data; | |
} | |
/** | |
* @return array | |
* | |
* @throws ApiErrorException | |
*/ | |
public function getCompanies(array $params, $id = null) | |
{ | |
if (!isset($params['selectColumns'])) { | |
$params['selectColumns'] = 'All'; | |
} | |
$settings = []; | |
if ($params['lastModifiedTime']) { | |
$settings['headers'] = [ | |
'If-Modified-Since' => $params['lastModifiedTime'], | |
]; | |
} | |
if ($id) { | |
$params['id'] = $id; | |
$data = $this->request('Accounts', $params, 'GET', false, $settings); | |
} else { | |
$data = $this->request('Accounts', $params, 'GET', false, $settings); | |
} | |
return $data; | |
} | |
/** | |
* @param string $searchColumn | |
* @param string $searchValue | |
* @param string $object | |
* | |
* @return mixed|string | |
* | |
* @throws ApiErrorException | |
*/ | |
public function getSearchRecords($searchColumn, $searchValue, $object = 'Leads') | |
{ | |
$parameters = [ | |
'criteria' => '('.$searchColumn.':equals:'.$searchValue.')', | |
]; | |
return $this->request($object.'/search', $parameters, 'GET', false); | |
} | |
} | |