700 lines
30 KiB
PHP
Executable File
700 lines
30 KiB
PHP
Executable File
<?php
|
|
|
|
namespace MauticPlugin\MauticCrmBundle\Api;
|
|
|
|
use Mautic\PluginBundle\Exception\ApiErrorException;
|
|
use MauticPlugin\MauticCrmBundle\Integration\SugarcrmIntegration;
|
|
|
|
/**
|
|
* @property SugarcrmIntegration $integration
|
|
*/
|
|
class SugarcrmApi extends CrmApi
|
|
{
|
|
protected $object = 'Leads';
|
|
|
|
/**
|
|
* @param array $data
|
|
* @param string $method
|
|
*
|
|
* @return mixed|string
|
|
*
|
|
* @throws ApiErrorException
|
|
*/
|
|
public function request($sMethod, $data = [], $method = 'GET', $object = null)
|
|
{
|
|
if (!$object) {
|
|
$object = $this->object;
|
|
}
|
|
$tokenData = $this->integration->getKeys();
|
|
|
|
if ('6' == $tokenData['version']) {
|
|
$request_url = sprintf('%s/service/v4_1/rest.php', $tokenData['sugarcrm_url']);
|
|
|
|
$sessionParams = [
|
|
'session' => $tokenData['id'],
|
|
];
|
|
if (!isset($data['module_names'])) {
|
|
$sessionParams['module_name'] = $object;
|
|
} // Making sure that module_name is the second value of the array
|
|
else {
|
|
$sessionParams['module_names'] = $data['module_names'];
|
|
}
|
|
|
|
$sessionParams = array_merge($sessionParams, $data);
|
|
$parameters = [
|
|
'method' => $sMethod,
|
|
'input_type' => 'JSON',
|
|
'response_type' => 'JSON',
|
|
'rest_data' => json_encode($sessionParams),
|
|
];
|
|
|
|
$response = $this->integration->makeRequest($request_url, $parameters, $method);
|
|
|
|
if (is_array($response) && !empty($response['name']) && !empty($response['number'])) {
|
|
throw new ApiErrorException($response['name'].' '.$object.' '.$sMethod.' '.$method);
|
|
} else {
|
|
return $response;
|
|
}
|
|
} else {
|
|
$request_url = sprintf('%s/rest/v10/%s', $tokenData['sugarcrm_url'], $sMethod);
|
|
$settings = [
|
|
'request_timeout' => 50,
|
|
'encode_parameters' => 'json',
|
|
];
|
|
$response = $this->integration->makeRequest($request_url, $data, $method, $settings);
|
|
|
|
if (isset($response['error'])) {
|
|
throw new ApiErrorException($response['error_message'] ?? $response['error']['message'], ('invalid_grant' == $response['error']) ? 1 : 500);
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return mixed|string
|
|
*
|
|
* @throws ApiErrorException
|
|
*/
|
|
public function getLeadFields($object = null)
|
|
{
|
|
if (!$object) {
|
|
$object = $this->object;
|
|
}
|
|
if ('company' == $object) {
|
|
$object = 'Accounts'; // sugarCRM object name
|
|
} elseif ('lead' == $object || 'Lead' == $object) {
|
|
$object = 'Leads';
|
|
} elseif ('contact' == $object || 'Contact' == $object) {
|
|
$object = 'Contacts';
|
|
}
|
|
|
|
$tokenData = $this->integration->getKeys();
|
|
|
|
if ('6' == $tokenData['version']) {
|
|
return $this->request('get_module_fields', [], 'GET', $object);
|
|
} else {
|
|
$parameters = [
|
|
'module_filter' => $object,
|
|
'type_filter' => 'modules',
|
|
];
|
|
|
|
$response = $this->request('metadata', $parameters, 'GET', $object);
|
|
|
|
return $response['modules'][$object];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*
|
|
* @throws ApiErrorException
|
|
*/
|
|
public function createLead(array $fields, $lead)
|
|
{
|
|
$tokenData = $this->integration->getKeys();
|
|
$createdLeadData = [];
|
|
// search for Sugar id in mautic records first to avoid making an API call
|
|
if (is_object($lead)) {
|
|
$sugarLeadRecords = $this->integration->getSugarLeadId($lead);
|
|
}
|
|
if ('6' == $tokenData['version']) {
|
|
// if not found then go ahead and make an API call to find all the records with that email
|
|
if (isset($fields['email1']) && empty($sugarLeadRecords)) {
|
|
$sLeads = $this->getLeads(['email' => $fields['email1'], 'offset' => 0, 'max_results' => 1000], 'Leads');
|
|
$sugarLeadRecords = $sLeads['entry_list'] ?? [];
|
|
}
|
|
$leadFields = [];
|
|
foreach ($fields as $name => $value) {
|
|
if ('id' != $name) {
|
|
$leadFields[] = [
|
|
'name' => $name,
|
|
'value' => $value,
|
|
];
|
|
}
|
|
}
|
|
$parameters = [
|
|
'name_value_list' => $leadFields,
|
|
];
|
|
|
|
if (!empty($sugarLeadRecords)) {
|
|
foreach ($sugarLeadRecords as $sLeadRecord) {
|
|
$localParam = $parameters;
|
|
$sugarLeadId = ($sLeadRecord['integration_entity_id'] ?? $sLeadRecord['id']);
|
|
$sugarObject = ($sLeadRecord['integration_entity'] ?? 'Leads');
|
|
// update the converted contact if found and not the Lead
|
|
if (isset($sLeadRecord['contact_id']) && null != $sLeadRecord['contact_id'] && '' != $sLeadRecord['contact_id']) {
|
|
unset($fields['Company']); // because this record is not in the Contact object.
|
|
$localParams['name_value_list'][] = ['name' => 'id', 'value' => $sLeadRecord['contact_id']];
|
|
$createdLeadData[] = $this->request('set_entry', $localParams, 'POST', 'Contacts');
|
|
} else {
|
|
$localParams['name_value_list'][] = ['name' => 'id', 'value' => $sugarLeadId];
|
|
$createdLeadData[] = $this->request('set_entry', $localParams, 'POST', $sugarObject);
|
|
}
|
|
}
|
|
} else {
|
|
$createdLeadData = $this->request('set_entry', $parameters, 'POST', 'Leads');
|
|
}
|
|
|
|
// $createdLeadData[] = $this->request('set_entry', $parameters, 'POST');
|
|
} else {
|
|
// if not found then go ahead and make an API call to find all the records with that email
|
|
if (isset($fields['email1']) && empty($sugarLeadRecords)) {
|
|
$sLeads = $this->getLeads(['email' => $fields['email1'], 'offset' => 0, 'max_results' => 1000], 'Leads');
|
|
$sugarLeadRecords = $sLeads['records'];
|
|
}
|
|
unset($fields['id']);
|
|
|
|
if (!empty($sugarLeadRecords)) {
|
|
foreach ($sugarLeadRecords as $sLeadRecord) {
|
|
$sugarLeadId = ($sLeadRecord['integration_entity_id'] ?? $sLeadRecord['id']);
|
|
$sugarObject = ($sLeadRecord['integration_entity'] ?? 'Leads');
|
|
// update the converted contact if found and not the Lead
|
|
$config = $this->integration->mergeConfigToFeatureSettings();
|
|
$fieldsToUpdateInSugar = isset($config['update_mautic']) ? array_keys($config['update_mautic'], 1) : [];
|
|
|
|
if (isset($sLeadRecord['contact_id']) && null != $sLeadRecord['contact_id'] && '' != $sLeadRecord['contact_id']) {
|
|
unset($fields['Company']); // because this record is not in the Contact object
|
|
$fieldsToUpdateInContactsSugar = $this->integration->cleanSugarData($config, $fieldsToUpdateInSugar, 'Contacts');
|
|
$contactSugarFields = array_diff_key($fields, $fieldsToUpdateInContactsSugar);
|
|
$createdLeadData[] = $this->request("Contacts/$sugarLeadId", $contactSugarFields, 'PUT', 'Contacts');
|
|
} else {
|
|
$fieldsToUpdateInLeadsSugar = $this->integration->cleanSugarData($config, $fieldsToUpdateInSugar, 'Leads');
|
|
$leadSugarFields = array_diff_key($fields, $fieldsToUpdateInLeadsSugar);
|
|
$createdLeadData[] = $this->request("$sugarObject/$sugarLeadId", $leadSugarFields, 'PUT', $sugarObject);
|
|
}
|
|
}
|
|
} else {
|
|
$createdLeadData = $this->request('Leads', $fields, 'POST', 'Leads');
|
|
}
|
|
// $createdLeadData[] = $this->request('set_entry', $fields, 'POST', 'Leads');
|
|
}
|
|
|
|
return $createdLeadData;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*
|
|
* @throws ApiErrorException
|
|
*/
|
|
public function syncLeadsToSugar(array $data)
|
|
{
|
|
$tokenData = $this->integration->getKeys();
|
|
$object = $this->object;
|
|
|
|
if ('6' == $tokenData['version']) {
|
|
$leadFieldsList = [];
|
|
$response = [];
|
|
|
|
foreach ($data as $object => $leadFieldsList) {
|
|
$parameters = [
|
|
'name_value_lists' => $leadFieldsList,
|
|
];
|
|
$resp = $this->request('set_entries', $parameters, 'POST', $object);
|
|
if (!empty($resp)) {
|
|
foreach ($leadFieldsList as $k => $leadFields) {
|
|
$fields = [];
|
|
foreach ($leadFields as $item) {
|
|
$fields[$item['name']] = $item['value'];
|
|
}
|
|
if (isset($resp['ids'])) {
|
|
$result = ['reference_id' => $fields['reference_id'],
|
|
'id' => $resp['ids'][$k],
|
|
'new' => !isset($fields['id']),
|
|
'ko' => false, ];
|
|
}
|
|
if (isset($resp['error'])) {
|
|
$result['ko'] = true;
|
|
$result['error'] = $resp['error']['message'];
|
|
}
|
|
if (isset($fields['id']) && $fields['id'] != $resp['ids'][$k]) {
|
|
$result['ko'] = true;
|
|
$result['error'] = 'Returned ID does not correspond to input id';
|
|
}
|
|
|
|
$response[] = $result;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $response;
|
|
} else {
|
|
$leadFieldsList = [];
|
|
$response = [];
|
|
// body is prepared for Sugar6. Translate it to sugar 7
|
|
$reference_ids = [];
|
|
foreach ($data as $object => $leadFieldsList) {
|
|
$requests = [];
|
|
$all_ids = [];
|
|
foreach ($leadFieldsList as $body) {
|
|
$fields = [];
|
|
$ids = [];
|
|
foreach ($body as $field) {
|
|
$fields[$field['name']] = $field['value'];
|
|
}
|
|
$request = [];
|
|
if (isset($fields['id'])) {
|
|
$ids['id'] = $fields['id'];
|
|
// Update record
|
|
$sugarLeadId = $fields['id'];
|
|
unset($fields['id']);
|
|
$request['method'] = 'PUT';
|
|
$request['url'] = "/v10/$object/$sugarLeadId";
|
|
$request['data'] = $fields;
|
|
} else {
|
|
// Create record
|
|
$request['data'] = $fields;
|
|
$request['url'] = '/v10/'.$object;
|
|
$request['method'] = 'POST';
|
|
}
|
|
$requests[] = $request;
|
|
$ids['reference_id'] = $fields['reference_id'];
|
|
$all_ids[] = $ids;
|
|
}
|
|
$parameters = [
|
|
'requests' => $requests,
|
|
];
|
|
|
|
$resp = $this->request('bulk', $parameters, 'POST', $object);
|
|
if (!empty($resp)) {
|
|
foreach ($resp as $k => $leadFields) {
|
|
$fields = $leadFields['contents'];
|
|
if (200 != $leadFields['status']) {
|
|
$result = ['ko' => true,
|
|
'error' => $leadFields['error'].' '.$leadFields['error_message'], ];
|
|
} else {
|
|
$result = ['reference_id' => $all_ids[$k]['reference_id'],
|
|
'id' => $fields['id'],
|
|
'new' => !isset($all_ids[$k]['id']),
|
|
'ko' => false, ];
|
|
if (isset($all_ids[$k]['id']) && $fields['id'] != $all_ids[$k]['id']) {
|
|
$result['ko'] = true;
|
|
$result['error'] = 'Returned ID does not correspond to input id';
|
|
}
|
|
}
|
|
$response[] = $result;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $object
|
|
* TODO 7.x
|
|
*
|
|
* @return array|mixed|string
|
|
*/
|
|
public function createLeadActivity(array $activity, $object)
|
|
{
|
|
$tokenData = $this->integration->getKeys();
|
|
|
|
// 1st : set_entries to return name_value_lists (array of arrays of name/value)
|
|
$set_name_value_lists = [];
|
|
// set relationship
|
|
$module_names = []; // Contacts or Leads
|
|
$module_ids = []; // Contacts or leads ids
|
|
$link_field_names = []; // Array of mtc_webactivities_contacts or mtc_webactivities_leads
|
|
$related_ids = []; // Array of arrays of web activity array
|
|
$name_value_lists = []; // array of empty arrays
|
|
$delete_array = []; // Array of 0
|
|
// set_relationships
|
|
$s7_records = [];
|
|
// Send activities and get back sugar activities id
|
|
|
|
if (!empty($activity)) {
|
|
foreach ($activity as $sugarId => $records) {
|
|
foreach ($records['records'] as $record) {
|
|
$rec = [];
|
|
$rec[] = ['name' => 'name', 'value' => $record['name']];
|
|
$rec[] = ['name' => 'description', 'value' => $record['description']];
|
|
$rec[] = ['name' => 'url', 'value' => $records['leadUrl']];
|
|
$rec[] = ['name' => 'date_entered', 'value' => $record['dateAdded']->format('c')];
|
|
$rec[] = ['name' => 'reference_id', 'value' => $record['id'].'-'.$sugarId];
|
|
if ('Contacts' == $object) {
|
|
$rec[] = ['name' => 'contact_id_c', 'value' => $sugarId];
|
|
} else {
|
|
$rec[] = ['name' => 'lead_id_c', 'value' => $sugarId];
|
|
}
|
|
$set_name_value_lists[] = $rec; // Sugar 6
|
|
$s7_record = [];
|
|
foreach ($rec as $r) {
|
|
$s7_record[$r['name']] = $r['value'];
|
|
}
|
|
$s7_records[] = $s7_record;
|
|
}
|
|
}
|
|
|
|
$parameters = [
|
|
'name_value_lists' => $set_name_value_lists,
|
|
];
|
|
if ('6' == $tokenData['version']) {
|
|
$resp = $this->request('set_entries', $parameters, 'POST', 'mtc_WebActivities');
|
|
} else {
|
|
$requests = [];
|
|
foreach ($s7_records as $fields) {
|
|
// Create record
|
|
$request['data'] = $fields;
|
|
$request['url'] = '/v10/mtc_WebActivities';
|
|
$request['method'] = 'POST';
|
|
$requests[] = $request;
|
|
}
|
|
$parameters = [
|
|
'requests' => $requests,
|
|
];
|
|
$resp = $this->request('bulk', $parameters, 'POST', 'bulk');
|
|
}
|
|
|
|
if ('6' == $tokenData['version']) {
|
|
// Send sugar relationsips
|
|
if (!empty($resp)) {
|
|
$nbLeads = 0;
|
|
$nbAct = 0;
|
|
$idList = [];
|
|
|
|
foreach ($activity as $sugarId => $records) {
|
|
$related_ids_row = [];
|
|
|
|
$module_names[] = $object;
|
|
$module_ids[] = $sugarId;
|
|
if ('Contacts' == $object) {
|
|
$link_field_names[] = 'mtc_webactivities_contacts';
|
|
} else {
|
|
$link_field_names[] = 'mtc_webactivities_leads';
|
|
}
|
|
++$nbLeads;
|
|
foreach ($records['records'] as $record) {
|
|
$name_value_lists[] = [];
|
|
$delete_array[] = 0;
|
|
$idList[] = $sugarId;
|
|
$related_ids_row[] = $resp['ids'][$nbAct];
|
|
++$nbAct;
|
|
}
|
|
$related_ids[] = $related_ids_row;
|
|
}
|
|
$parameters = [
|
|
'module_names' => $module_names, // Contacts or Leads
|
|
'module_ids' => $module_ids, // Contacts or leads ids
|
|
'link_field_names' => $link_field_names, // Array of mtc_webactivities_contacts or mtc_webactivities_leads
|
|
'related_ids' => $related_ids, // Array of arrays of web activity array
|
|
'name_value_lists' => $name_value_lists, // array of empty arrays
|
|
'delete_array' => $delete_array, // Array of 0
|
|
];
|
|
$resp2 = $this->request('set_relationships', $parameters, 'POST', $object);
|
|
}
|
|
} else {
|
|
// Sugar 7 set relationship
|
|
if (!empty($resp)) {
|
|
$nbAct = 0;
|
|
foreach ($activity as $sugarId => $records) {
|
|
if ('Contacts' == $object) {
|
|
$link_field_name = 'mtc_webactivities_contacts';
|
|
} else {
|
|
$link_field_name = 'mtc_webactivities_leads';
|
|
}
|
|
foreach ($records['records'] as $record) {
|
|
if (!isset($resp[$nbAct]['contents']['id'])) {
|
|
continue;
|
|
} // current Web activity was not created
|
|
$wa_id = $resp[$nbAct]['contents']['id'];
|
|
$resp2 = $this->request("mtc_WebActivities/$wa_id/link/$link_field_name/$sugarId", [], 'POST');
|
|
++$nbAct;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return [];
|
|
}
|
|
}
|
|
|
|
public function getEmailBySugarUserId($query = null)
|
|
{
|
|
$tokenData = $this->integration->getKeys();
|
|
if ('6' == $tokenData['version']) {
|
|
if (isset($query['emails'])) {
|
|
$q = " users.id IN (SELECT bean_id FROM email_addr_bean_rel eabr JOIN email_addresses ea ON (eabr.email_address_id = ea.id) WHERE bean_module = 'Users' AND ea.email_address IN ('".implode("','", $query['emails'])."') AND eabr.deleted=0) ";
|
|
}
|
|
if (isset($query['ids'])) {
|
|
$q = " users.id IN ('".implode("','", $query['ids'])."') ";
|
|
}
|
|
|
|
$data = ['filter' => 'all'];
|
|
$fields = ['id', 'email1'];
|
|
|
|
$parameters = [
|
|
'query' => $q,
|
|
'order_by' => '',
|
|
'offset' => 0,
|
|
'select_fields' => $fields,
|
|
'link_name_to_fields_array' => [/* TO BE MODIFIED */
|
|
],
|
|
'max_results' => 1000,
|
|
'deleted' => 0,
|
|
'favorites' => false,
|
|
];
|
|
$data = $this->request('get_entry_list', $parameters, 'GET', 'Users');
|
|
|
|
if (isset($query['type']) && 'BYEMAIL' == $query['type']) {
|
|
$type = 'BYEMAIL';
|
|
} else {
|
|
$type = 'BYID';
|
|
}
|
|
|
|
$res = [];
|
|
if (isset($data['entry_list'])) {
|
|
foreach ($data['entry_list'] as $record) {
|
|
$fields = [];
|
|
$fields['id'] = $record['id'];
|
|
foreach ($record['name_value_list'] as $item) {
|
|
$fields[$item['name']] = $item['value'];
|
|
}
|
|
if ('BYID' == $type) {
|
|
$res[$fields['id']] = $fields['email1'];
|
|
} elseif (isset($fields['email1'])) {
|
|
$res[$fields['email1']] = $fields['id'];
|
|
} elseif (!isset($fields['email1'])) {
|
|
$res[$query['emails'][0]] = $fields['id'];
|
|
}
|
|
}
|
|
}
|
|
|
|
return $res;
|
|
} else {
|
|
// TODO
|
|
|
|
if (isset($query['emails'])) {
|
|
$filter[] = ['email_addresses.email_address' => ['$in' => $query['emails']]];
|
|
$filter[] = ['deleted' => '0'];
|
|
}
|
|
if (isset($query['ids'])) {
|
|
$filter[] = ['id' => ['$in' => $query['ids']]];
|
|
}
|
|
|
|
$data = ['filter' => 'all'];
|
|
$fields = ['id', 'email1', 'email'];
|
|
|
|
$parameters = [
|
|
'filter' => [['$and' => $filter]],
|
|
'offset' => 0,
|
|
'fields' => implode(',', $fields),
|
|
'max_num' => 1000,
|
|
// 'deleted' => 0,
|
|
// 'favorites' => false,
|
|
];
|
|
$data = $this->request('Users/filter', $parameters, 'GET', 'Users');
|
|
|
|
if (isset($query['type']) && 'BYEMAIL' == $query['type']) {
|
|
$type = 'BYEMAIL';
|
|
} else {
|
|
$type = 'BYID';
|
|
}
|
|
$res = [];
|
|
if (isset($data['records'])) {
|
|
foreach ($data['records'] as $record) {
|
|
if (isset($record['email'][0]['email_address']) && '' != $record['email'][0]['email_address']) {
|
|
$found_email = $record['email'][0]['email_address'];
|
|
if (isset($record['name_value_list'])) {
|
|
foreach ($record['name_value_list'] as $email) {
|
|
if ('' != $email['email_address'] && 1 == $email['primary_address']) {
|
|
$found_email = $email;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if ('BYID' == $type) {
|
|
$res[$record['id']] = $found_email;
|
|
} else {
|
|
$res[$found_email] = $record['id'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
}
|
|
|
|
public function getIdBySugarEmail($query = null)
|
|
{
|
|
if (null == $query) {
|
|
$query = ['type' => 'BYEMAIL'];
|
|
} else {
|
|
$query['type'] = 'BYEMAIL';
|
|
}
|
|
|
|
return $this->getEmailBySugarUserId($query);
|
|
}
|
|
|
|
/**
|
|
* Get SugarCRM leads.
|
|
*
|
|
* @param array $query
|
|
* @param string $object
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function getLeads($query, $object)
|
|
{
|
|
$tokenData = $this->integration->getKeys();
|
|
$availableFields = $this->integration->getIntegrationSettings()->getFeatureSettings();
|
|
|
|
switch ($object) {
|
|
case 'company':
|
|
case 'Account':
|
|
case 'Accounts':
|
|
$fields = array_keys(array_filter($availableFields['companyFields']));
|
|
break;
|
|
default:
|
|
$mixedFields = array_filter($availableFields['leadFields']);
|
|
$fields = [];
|
|
$object = ('Contacts' == $object) ? 'Contacts' : 'Leads';
|
|
foreach ($mixedFields as $sugarField => $mField) {
|
|
if (str_contains($sugarField, '__'.$object)) {
|
|
$fields[] = str_replace('__'.$object, '', $sugarField);
|
|
}
|
|
if (str_contains($sugarField, '-'.$object)) {
|
|
$fields[] = str_replace('-'.$object, '', $sugarField);
|
|
}
|
|
}
|
|
}
|
|
|
|
if ('6' == $tokenData['version']) {
|
|
$result = [];
|
|
|
|
if (!empty($fields)) {
|
|
$q = '';
|
|
$qry = [];
|
|
if (isset($query['start'])) {
|
|
$qry[] = ' '.strtolower($object).".date_modified >= '".$query['start']."' ";
|
|
}
|
|
if (isset($query['end'])) {
|
|
$qry[] = ' '.strtolower($object).".date_modified <= '".$query['end']."' ";
|
|
}
|
|
if (isset($query['email'])) {
|
|
$qry[] = " leads.id IN (SELECT bean_id FROM email_addr_bean_rel eabr JOIN email_addresses ea ON (eabr.email_address_id = ea.id) WHERE bean_module = 'Leads' AND ea.email_address = '".$query['email']."' AND eabr.deleted=0) ";
|
|
$fields[] = 'contact_id';
|
|
}
|
|
if (isset($query['checkemail'])) {
|
|
$qry[] = ' leads.deleted=0 ';
|
|
$qry[] = " leads.id IN (SELECT bean_id FROM email_addr_bean_rel eabr JOIN email_addresses ea ON (eabr.email_address_id = ea.id) WHERE bean_module = 'Leads' AND ea.email_address IN ('".implode("','", $query['checkemail'])."') AND eabr.deleted=0) ";
|
|
$fields[] = 'contact_id';
|
|
$fields[] = 'deleted';
|
|
}
|
|
if (isset($query['checkemail_contacts'])) {
|
|
$qry[] = ' contacts.deleted=0 ';
|
|
$qry[] = " contacts.id IN (SELECT bean_id FROM email_addr_bean_rel eabr JOIN email_addresses ea ON (eabr.email_address_id = ea.id) WHERE bean_module = 'Contacts' AND ea.email_address IN ('".implode("','", $query['checkemail_contacts'])."') AND eabr.deleted=0) ";
|
|
$fields[] = 'deleted';
|
|
}
|
|
|
|
$q = implode('AND', $qry);
|
|
$fields[] = 'id';
|
|
$fields[] = 'date_modified';
|
|
$fields[] = 'date_entered';
|
|
$fields[] = 'assigned_user_id';
|
|
$fields[] = 'email1';
|
|
if ('Accounts' != $object) {
|
|
$fields[] = 'account_id';
|
|
}
|
|
$parameters = [
|
|
'query' => $q,
|
|
'order_by' => '',
|
|
'offset' => $query['offset'],
|
|
'select_fields' => $fields,
|
|
'link_name_to_fields_array' => [/* TO BE MODIFIED */
|
|
[
|
|
'name' => 'email_addresses',
|
|
'value' => [
|
|
'email_address',
|
|
'opt_out',
|
|
'primary_address',
|
|
],
|
|
],
|
|
],
|
|
'max_results' => $query['max_results'],
|
|
'deleted' => 0,
|
|
'favorites' => false,
|
|
];
|
|
|
|
return $this->request('get_entry_list', $parameters, 'GET', $object);
|
|
}
|
|
} else {
|
|
if (!empty($fields)) {
|
|
$q = '';
|
|
$qry = [];
|
|
$filter = [];
|
|
if (isset($query['start'])) {
|
|
$filter[] = ['date_modified' => ['$gte' => $query['start']]];
|
|
// $qry[] = ' '.strtolower($object).".date_modified >= '".$query['start']."' ";
|
|
}
|
|
if (isset($query['end'])) {
|
|
$filter[] = ['date_modified' => ['$lte' => $query['end']]];
|
|
// $qry[] = ' '.strtolower($object).".date_modified <= '".$query['end']."' ";
|
|
}
|
|
if (isset($query['email'])) {
|
|
$filter[] = ['email' => ['$equals' => $query['email']]];
|
|
// $qry[] = " leads.id IN (SELECT bean_id FROM email_addr_bean_rel eabr JOIN email_addresses ea ON (eabr.email_address_id = ea.id) WHERE bean_module = 'Leads' AND ea.email_address = '".$query['email']."' AND eabr.deleted=0) ";
|
|
$fields[] = 'contact_id';
|
|
}
|
|
if (isset($query['checkemail'])) {
|
|
$filter[] = ['email' => ['$in' => $query['checkemail']]];
|
|
$filter[] = ['deleted' => '0'];
|
|
$fields = []; // Do not need previous fields
|
|
$fields[] = 'contact_id';
|
|
$fields[] = 'deleted';
|
|
}
|
|
if (isset($query['checkemail_contacts'])) {
|
|
$filter[] = ['email' => ['$in' => $query['checkemail_contacts']]];
|
|
$filter[] = ['deleted' => '0'];
|
|
$fields = []; // Do not need previous fields
|
|
$fields[] = 'deleted';
|
|
}
|
|
$fields[] = 'id';
|
|
$fields[] = 'date_modified';
|
|
$fields[] = 'date_entered';
|
|
$fields[] = 'assigned_user_id';
|
|
$fields[] = 'email1';
|
|
if ('Accounts' != $object) {
|
|
$fields[] = 'account_id';
|
|
}
|
|
// $filter_args = ['filter' => [['$and' => $filter]]];
|
|
// $fields_arg = implode(',', $fields);
|
|
$parameters = [
|
|
// 'order_by' => '',
|
|
'filter' => [['$and' => $filter]],
|
|
'offset' => $query['offset'],
|
|
'fields' => implode(',', $fields),
|
|
'max_num' => $query['max_results'],
|
|
// 'deleted' => 0,
|
|
// 'favorites' => false,
|
|
];
|
|
|
|
return $this->request("$object/filter", $parameters, 'GET', $object);
|
|
}
|
|
}
|
|
}
|
|
}
|