acf
This commit is contained in:
209
plugins/system/nrframework/NRFramework/Integrations/IContact.php
Normal file
209
plugins/system/nrframework/NRFramework/Integrations/IContact.php
Normal file
@ -0,0 +1,209 @@
|
||||
<?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 IContact extends Integration
|
||||
{
|
||||
public $accountID;
|
||||
|
||||
public $clientFolderID;
|
||||
|
||||
/**
|
||||
* Create a new instance
|
||||
* @param array $options The service's required options
|
||||
*/
|
||||
public function __construct($options)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->endpoint = 'https://app.icontact.com/icp/a';
|
||||
$this->options->set('headers.API-Version', '2.2');
|
||||
$this->options->set('headers.API-AppId', $options['appID']);
|
||||
$this->options->set('headers.API-Username', $options['username']);
|
||||
$this->options->set('headers.API-Password', $options['appPassword']);
|
||||
$this->setAccountID($options['accountID']);
|
||||
$this->setClientFolderID($options['clientFolderID']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds and sets the iContact AccountID
|
||||
*
|
||||
* @param mixed $accountID
|
||||
*/
|
||||
public function setAccountID($accountID = false)
|
||||
{
|
||||
if ($accountID)
|
||||
{
|
||||
$this->accountID = $accountID;
|
||||
}
|
||||
|
||||
$accounts = $this->get('');
|
||||
|
||||
if (!$this->success())
|
||||
{
|
||||
throw new \Exception($this->getLastError());
|
||||
}
|
||||
|
||||
// Make sure the account is active
|
||||
if (intval($accounts['accounts'][0]['enabled']) === 1)
|
||||
{
|
||||
$this->accountID = (integer) $accounts['accounts'][0]['accountId'];
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new \Exception(Text::_('NR_ICONTACT_ACCOUNTID_ERROR'), 1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds and sets the iContact ClientFolderID
|
||||
*
|
||||
* @param mixed $clientFolderID
|
||||
*/
|
||||
public function setClientFolderID($clientFolderID = false)
|
||||
{
|
||||
if ($clientFolderID)
|
||||
{
|
||||
$this->clientFolderID = $clientFolderID;
|
||||
}
|
||||
|
||||
// We need an existant accountID
|
||||
if (empty($this->accountID))
|
||||
{
|
||||
try
|
||||
{
|
||||
$this->setAccountID();
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
if ($clientFolder = $this->get($this->accountID . '/c/'))
|
||||
{
|
||||
$this->clientFolderID = $clientFolder['clientfolders'][0]['clientFolderId'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribes a user to an iContact List
|
||||
*
|
||||
* API REFERENCE
|
||||
* https://www.icontact.com/developerportal/documentation/contacts
|
||||
*
|
||||
* @param string $email
|
||||
* @param object $params The extra form fields
|
||||
* @param mixed $list The iContact List ID
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function subscribe($email, $params, $list)
|
||||
{
|
||||
$data = array('contact' => array_merge(array('email' => $email, 'status' => 'normal'), (array) $params));
|
||||
|
||||
try
|
||||
{
|
||||
$contact = $this->post($this->accountID .'/c/' . $this->clientFolderID . '/contacts', $data);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw $e;
|
||||
}
|
||||
|
||||
if ((isset($contact['contacts'])) && (is_array($contact['contacts'])) && (count($contact['contacts']) > 0))
|
||||
{
|
||||
$this->addToList($list, $contact['contacts'][0]['contactId']);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a contact to an iContact List
|
||||
*
|
||||
* API REFERENCE
|
||||
* https://www.icontact.com/developerportal/documentation/subscriptions
|
||||
*
|
||||
* @param string $listID
|
||||
* @param string $contactID
|
||||
*/
|
||||
public function addToList($listID, $contactID)
|
||||
{
|
||||
$data = array(
|
||||
array(
|
||||
'contactId' => $contactID,
|
||||
'listId' => $listID,
|
||||
'status' => 'normal'
|
||||
)
|
||||
);
|
||||
$this->post($this->accountID .'/c/' . $this->clientFolderID . '/subscriptions',$data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all Client lists
|
||||
*
|
||||
* API REFERENCE
|
||||
* https://www.icontact.com/developerportal/documentation/lists
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getLists()
|
||||
{
|
||||
$data = $this->get($this->accountID .'/c/' . $this->clientFolderID . '/lists');
|
||||
|
||||
if (!$this->success())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$lists = array();
|
||||
|
||||
if (!isset($data["lists"]) || !is_array($data["lists"]))
|
||||
{
|
||||
return $lists;
|
||||
}
|
||||
|
||||
foreach ($data["lists"] as $key => $list)
|
||||
{
|
||||
$lists[] = array(
|
||||
'id' => $list['listId'],
|
||||
'name' => $list['name']
|
||||
);
|
||||
}
|
||||
|
||||
return $lists;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the last error returned by either the network transport, or by the API.
|
||||
* If something didn't work, this should contain the string describing the problem.
|
||||
*
|
||||
* @return string describing the error
|
||||
*/
|
||||
public function getLastError()
|
||||
{
|
||||
$body = $this->last_response->body;
|
||||
$message = '';
|
||||
|
||||
if (isset($body['errors']))
|
||||
{
|
||||
foreach ($body['errors'] as $error) {
|
||||
$message .= $error . ' ';
|
||||
}
|
||||
}
|
||||
|
||||
return trim($message);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user