Files
conservatorio-tomadini/plugins/system/nrframework/NRFramework/Integrations/ConvertKit.php
2024-12-31 11:07:09 +01:00

161 lines
3.5 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\String\StringHelper;
class ConvertKit extends Integration
{
/**
* Create a new instance
*
* @param string $api_key Your ConvertKit API Key
*/
public function __construct($api_key)
{
parent::__construct();
$this->setKey($api_key);
$this->setEndpoint('https://api.convertkit.com/v3');
}
/**
* Subscribe a user to a ConvertKit Form
*
* API Reference:
* http://help.convertkit.com/article/33-api-documentation-v3
*
* @param string $email The subscriber's email
* @param string $formid The account owner's form id
* @param array $params The form's parameters
*
* @return boolean
*/
public function subscribe($email, $formid, $params)
{
$first_name = (isset($params['first_name'])) ? $params['first_name'] : '';
$tags = (isset($params['tags'])) ? $this->convertTagnamesToTagIDs($params['tags']) : '';
$fields = $this->validateCustomFields($params);
$data = array(
'api_key' => $this->key,
'email' => $email,
'first_name' => $first_name,
'tags' => $tags,
'fields' => $fields,
);
$this->post('forms/' . $formid . '/subscribe', $data);
return true;
}
/**
* Converts tag names to tag IDs for the subscribe method
*
* @param string $tagnames comma separated list of tagnames
*
* @return string comma separated list of tag IDs
*/
public function convertTagnamesToTagIDs($tagnames)
{
if (empty($tagnames))
{
return;
}
$tagArray = !is_array($tagnames) ? explode(',', $tagnames) : $tagnames;
$tagnames = array_map('trim', $tagArray);
$accountTags = $this->get('tags', array('api_key' => $this->key));
if (empty($accountTags) || !$this->request_successful)
{
return;
}
$tagIDs = array();
foreach ($accountTags['tags'] as $tag)
{
foreach ($tagnames as $tagname)
{
if (StringHelper::strcasecmp($tag['name'], $tagname) == 0)
{
$tagIDs[] = $tag['id'];
break;
}
}
}
return implode(',', $tagIDs);
}
/**
* Returns a new array with valid only custom fields
*
* @param array $formCustomFields Array of custom fields
*
* @return array Array of valid only custom fields
*/
public function validateCustomFields($formCustomFields)
{
if (!is_array($formCustomFields))
{
return;
}
$customFields = $this->get('custom_fields', array('api_key' => $this->key));
if (!$this->request_successful)
{
return;
}
$fields = array();
$formCustomFieldsKeys = array_keys($formCustomFields);
foreach ($customFields['custom_fields'] as $customField)
{
if (in_array($customField['key'], $formCustomFieldsKeys))
{
$fields[$customField['key']] = $formCustomFields[$customField['key']];
}
}
return $fields;
}
/**
* Get the last error returned by either the network transport, or by the API.
*
* @return string
*/
public function getLastError()
{
$body = $this->last_response->body;
$message = '';
if (isset($body['error']) && !empty($body['error']))
{
$message = $body['error'];
}
if (isset($body['message']) && !empty($body['message']))
{
$message .= ' - ' . $body['message'];
}
return $message;
}
}