140 lines
3.0 KiB
PHP
140 lines
3.0 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;
|
|
|
|
class HubSpot extends Integration
|
|
{
|
|
/**
|
|
* Create a new instance
|
|
*
|
|
* @param string $key Your HubSpot API key
|
|
*/
|
|
public function __construct($options)
|
|
{
|
|
parent::__construct();
|
|
|
|
$this->setKey(is_array($options) ? $options['api'] : $options);
|
|
$this->setEndpoint('https://api.hubapi.com');
|
|
}
|
|
|
|
/**
|
|
* Subscribe user to HubSpot
|
|
*
|
|
* API References:
|
|
* http://developers.hubspot.com/docs/methods/contacts/update_contact-by-email
|
|
*
|
|
* @param string $email User's email address
|
|
* @param string $params The forms extra fields
|
|
*
|
|
* @return void
|
|
*/
|
|
public function subscribe($email, $params)
|
|
{
|
|
$fields = $this->validateCustomFields($params);
|
|
|
|
$fields[] = array('property' => 'email', 'value' => $email);
|
|
|
|
$data = array(
|
|
'properties' => $fields
|
|
);
|
|
|
|
$this->post('contacts/v1/contact/createOrUpdate/email/' . $email . '/?hapikey=' . $this->key, $data);
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get the last error returned by either the network transport, or by the API.
|
|
*
|
|
* API References:
|
|
* http://developers.hubspot.com/docs/faq/api-error-responses
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getLastError()
|
|
{
|
|
$body = $this->last_response->body;
|
|
|
|
$message = '';
|
|
|
|
if ((isset($body['status'])) && ($body['status'] == 'error'))
|
|
{
|
|
$message = $body['message'];
|
|
}
|
|
|
|
if (isset($body['validationResults']) && is_array($body['validationResults']) && count($body['validationResults']))
|
|
{
|
|
foreach ($body['validationResults'] as $key => $validation)
|
|
{
|
|
if ($validation['isValid'] === false)
|
|
{
|
|
$message .= ' - ' . $validation['message'];
|
|
}
|
|
}
|
|
}
|
|
|
|
return $message;
|
|
}
|
|
|
|
/**
|
|
* Returns a new array with valid only custom fields
|
|
*
|
|
* API References:
|
|
* http://developers.hubspot.com/docs/methods/contacts/v2/get_contacts_properties
|
|
*
|
|
* @param array $formCustomFields Array of custom fields
|
|
*
|
|
* @return array Array of valid only custom fields
|
|
*/
|
|
public function validateCustomFields($formCustomFields)
|
|
{
|
|
|
|
$fields = array();
|
|
|
|
if (!is_array($formCustomFields))
|
|
{
|
|
return $fields;
|
|
}
|
|
|
|
$accountFields = $this->get('properties/v1/contacts/properties?hapikey='.$this->key);
|
|
|
|
if (!$this->request_successful)
|
|
{
|
|
return $fields;
|
|
}
|
|
|
|
$accountFieldsNames = array_map(
|
|
function ($ar)
|
|
{
|
|
return $ar['name'];
|
|
}, $accountFields
|
|
);
|
|
|
|
$formCustomFieldsKeys = array_keys($formCustomFields);
|
|
|
|
foreach ($accountFieldsNames as $accountFieldsName)
|
|
{
|
|
if (!in_array($accountFieldsName, $formCustomFieldsKeys))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$fields[] = array(
|
|
"property" => $accountFieldsName,
|
|
"value" => $formCustomFields[$accountFieldsName],
|
|
);
|
|
}
|
|
|
|
return $fields;
|
|
}
|
|
} |