acf
This commit is contained in:
		| @ -0,0 +1,184 @@ | ||||
| <?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; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user