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