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;
 | |
| 	}
 | |
| } |