161 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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;
 | |
| 	}
 | |
| } |