184 lines
4.1 KiB
PHP
184 lines
4.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @author Tassos Marinos <info@tassos.gr>
|
|
* @link https://www.tassos.gr
|
|
* @copyright Copyright © 2024 Tassos All Rights Reserved
|
|
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
|
|
*/
|
|
|
|
namespace NRFramework\Integrations;
|
|
|
|
// No direct access
|
|
defined('_JEXEC') or die;
|
|
|
|
use Joomla\CMS\Language\Text;
|
|
|
|
class ElasticEmail extends Integration
|
|
{
|
|
protected $endpoint = 'https://api.elasticemail.com/v2';
|
|
|
|
/**
|
|
* Create a new instance
|
|
*
|
|
* @param array $options The service's required options
|
|
* @throws \Exception
|
|
*/
|
|
public function __construct($options)
|
|
{
|
|
parent::__construct();
|
|
$this->setKey($options);
|
|
}
|
|
|
|
/**
|
|
* Subscribe user to ElasticEmail
|
|
*
|
|
* API References:
|
|
* http://api.elasticemail.com/public/help#Contact_Add
|
|
* http://api.elasticemail.com/public/help#Contact_Update
|
|
*
|
|
* @param string $email User's email address
|
|
* @param string $list The ElasticEmail List unique ID
|
|
* @param string $publicAccountID The ElasticEmail PublicAccountID
|
|
* @param array $params The form's parameters
|
|
* @param boolean $update_existing Update existing user
|
|
* @param boolean $double_optin Send ElasticEmail confirmation email?
|
|
*
|
|
* @return void
|
|
*/
|
|
public function subscribe($email, $list, $publicAccountID, $params = array(), $update_existing = true, $double_optin = false)
|
|
{
|
|
$data = array(
|
|
'apikey' => $this->key,
|
|
'email' => $email,
|
|
'publicAccountID' => $publicAccountID,
|
|
'publicListID' => $list,
|
|
'sendActivation' => $double_optin ? 'true' : 'false',
|
|
'consentIP' => \NRFramework\User::getIP()
|
|
);
|
|
|
|
if (is_array($params) && count($params))
|
|
{
|
|
foreach ($params as $param_key => $param_value)
|
|
{
|
|
$data[$param_key] = (is_array($param_value)) ? implode(',', $param_value) : $param_value;
|
|
}
|
|
}
|
|
|
|
if (!$update_existing)
|
|
{
|
|
return $this->get('/contact/add', $data);
|
|
}
|
|
|
|
if ($this->getContact($email))
|
|
{
|
|
$data['clearRestOfFields'] = 'false';
|
|
$this->get('/contact/update', $data);
|
|
}
|
|
else
|
|
{
|
|
$this->get('/contact/add', $data);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Returns all available ElasticEmail lists
|
|
*
|
|
* http://api.elasticemail.com/public/help#List_list
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getLists()
|
|
{
|
|
$data = $this->get('/list/list', array('apikey' => $this->key));
|
|
|
|
if (!$this->success())
|
|
{
|
|
return;
|
|
}
|
|
|
|
$lists = array();
|
|
|
|
if (!isset($data['data']) || !is_array($data['data']))
|
|
{
|
|
return $lists;
|
|
}
|
|
|
|
foreach ($data['data'] as $key => $list)
|
|
{
|
|
$lists[] = array(
|
|
'id' => $list['publiclistid'],
|
|
'name' => $list['listname']
|
|
);
|
|
}
|
|
|
|
return $lists;
|
|
}
|
|
|
|
/**
|
|
* Check to see if a contact exists
|
|
*
|
|
* @param string $email The contact's email
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function getContact($email)
|
|
{
|
|
$contact = $this->get('/contact/loadcontact', array('apikey' => $this->key, 'email' => $email));
|
|
|
|
return (bool) $contact['success'];
|
|
}
|
|
|
|
/**
|
|
* Get the Elastic Email Public Account ID
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getPublicAccountID()
|
|
{
|
|
$data = $this->get('/account/load', array('apikey' => $this->key));
|
|
|
|
if (isset($data['data']['publicaccountid']))
|
|
{
|
|
return $data['data']['publicaccountid'];
|
|
}
|
|
|
|
throw new \Exception(Text::_('NR_ELASTICEMAIL_UNRETRIEVABLE_PUBLICACCOUNTID'), 1);
|
|
}
|
|
|
|
/**
|
|
* Get the last error returned by either the network transport, or by the API.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getLastError()
|
|
{
|
|
$body = $this->last_response->body;
|
|
|
|
if (isset($body['error']))
|
|
{
|
|
return $body['error'];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if the response was successful or a failure. If it failed, store the error.
|
|
*
|
|
* @return bool If the request was successful
|
|
*/
|
|
protected function determineSuccess()
|
|
{
|
|
$code = $this->last_response->code;
|
|
$body = $this->last_response->body;
|
|
|
|
if ($code >= 200 && $code <= 299 && !isset($body['error']))
|
|
{
|
|
return ($this->request_successful = true);
|
|
}
|
|
|
|
$this->last_error = 'Unknown error, call getLastResponse() to find out what happened.';
|
|
return false;
|
|
}
|
|
} |