Spaces:
No application file
No application file
namespace MauticPlugin\MauticEmailMarketingBundle\Integration; | |
use MauticPlugin\MauticEmailMarketingBundle\Form\Type\MailchimpType; | |
class MailchimpIntegration extends EmailAbstractIntegration | |
{ | |
public function getName(): string | |
{ | |
return 'Mailchimp'; | |
} | |
public function getDisplayName(): string | |
{ | |
return 'MailChimp'; | |
} | |
public function getAuthenticationType(): string | |
{ | |
return (empty($this->keys['client_id'])) ? 'basic' : 'oauth2'; | |
} | |
/** | |
* Get the URL required to obtain an oauth2 access token. | |
*/ | |
public function getAccessTokenUrl(): string | |
{ | |
return 'https://login.mailchimp.com/oauth2/token'; | |
} | |
/** | |
* Get the authentication/login URL for oauth2 access. | |
*/ | |
public function getAuthenticationUrl(): string | |
{ | |
return 'https://login.mailchimp.com/oauth2/authorize'; | |
} | |
/** | |
* @return array | |
*/ | |
public function getRequiredKeyFields() | |
{ | |
return (empty($this->keys['client_id'])) ? | |
[ | |
'username' => 'mautic.integration.keyfield.username', | |
'password' => 'mautic.integration.keyfield.api', | |
] : | |
[ | |
'client_id' => 'mautic.integration.keyfield.clientid', | |
'client_secret' => 'mautic.integration.keyfield.clientsecret', | |
]; | |
} | |
/** | |
* @param array $settings | |
* @param array $parameters | |
* | |
* @return bool|string | |
*/ | |
public function authCallback($settings = [], $parameters = []) | |
{ | |
$error = parent::authCallback($settings, $parameters); | |
if (empty($error)) { | |
// Now post to the metadata URL | |
$data = $this->makeRequest('https://login.mailchimp.com/oauth2/metadata'); | |
return $this->extractAuthKeys($data, 'dc'); | |
} else { | |
return $error; | |
} | |
} | |
/** | |
* @param array $settings | |
* | |
* @return mixed[] | |
*/ | |
public function getAvailableLeadFields($settings = []): array | |
{ | |
if (isset($settings['list'])) { | |
// Ajax update | |
$listId = $settings['list']; | |
} elseif (!empty($settings['feature_settings']['list_settings']['list'])) { | |
// Form load | |
$listId = $settings['feature_settings']['list_settings']['list']; | |
} elseif (!empty($settings['list_settings']['list'])) { | |
// Push action | |
$listId = $settings['list_settings']['list']; | |
} | |
if (!empty($listId)) { | |
$settings['cache_suffix'] = $cacheSuffix = '.'.$listId; | |
if ($fields = parent::getAvailableLeadFields($settings)) { | |
return $fields; | |
} | |
$fields = $this->getApiHelper()->getCustomFields($listId); | |
if (!empty($fields['merge_fields']) && count($fields['merge_fields'])) { | |
foreach ($fields['merge_fields'] as $field) { | |
$leadFields[$field['tag']] = [ | |
'label' => $field['name'], | |
'type' => 'string', | |
'required' => $field['required'], | |
]; | |
} | |
} | |
$leadFields['EMAIL'] = [ | |
'label' => 'Email', | |
'type' => 'string', | |
'required' => true, | |
]; | |
$this->cache->set('leadFields'.$cacheSuffix, $leadFields); | |
return $leadFields; | |
} | |
return []; | |
} | |
/** | |
* @param array $config | |
*/ | |
public function pushLead($lead, $config = []): bool | |
{ | |
$config = $this->mergeConfigToFeatureSettings($config); | |
$mappedData = $this->populateLeadData($lead, $config); | |
if (empty($mappedData)) { | |
return false; | |
} elseif (empty($mappedData['EMAIL'])) { | |
return false; | |
} elseif (!isset($config['list_settings'])) { | |
return false; | |
} | |
try { | |
if ($this->isAuthorized()) { | |
$email = $mappedData['EMAIL']; | |
unset($mappedData['EMAIL']); | |
$options = []; | |
$options['status'] = $config['list_settings']['doubleOptin'] ? 'pending' : 'subscribed'; | |
$options['send_welcome'] = $config['list_settings']['sendWelcome']; | |
$listId = $config['list_settings']['list']; | |
$this->getApiHelper()->subscribeLead($email, $listId, $mappedData, $options); | |
return true; | |
} | |
} catch (\Exception $e) { | |
$this->logIntegrationError($e); | |
} | |
return false; | |
} | |
/** | |
* @return array<string, mixed> | |
*/ | |
public function getFormSettings(): array | |
{ | |
$settings = parent::getFormSettings(); | |
$settings['dynamic_contact_fields'] = true; | |
return $settings; | |
} | |
public function getFormType(): string | |
{ | |
return MailchimpType::class; | |
} | |
} | |