acf
This commit is contained in:
		
							
								
								
									
										169
									
								
								plugins/system/nrframework/NRFramework/Integrations/Zoho.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								plugins/system/nrframework/NRFramework/Integrations/Zoho.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,169 @@ | ||||
| <?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 Zoho extends Integration | ||||
| { | ||||
| 	/** | ||||
| 	 * Create a new instance | ||||
| 	 * | ||||
| 	 * @param array $options The service's required options | ||||
| 	 * @throws \Exception | ||||
| 	 */ | ||||
| 	public function __construct($options) | ||||
| 	{ | ||||
| 		parent::__construct(); | ||||
| 		$this->setKey($options['api']); | ||||
| 		$this->endpoint = 'https://campaigns.zoho.com/api'; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Subscribe user to ZoHo | ||||
| 	 * | ||||
| 	 *  https://www.zoho.com/campaigns/help/api/contact-subscribe.html | ||||
| 	 * | ||||
| 	 *  @param   string   $email         	  User's email address | ||||
| 	 *  @param   string   $list          	  The ZoHo list unique ID | ||||
| 	 *  @param   Object   $customFields  	  Collection of custom fields | ||||
| 	 * | ||||
| 	 *  @return  void | ||||
| 	 */ | ||||
| 	public function subscribe($email, $list, $customFields = array()) | ||||
| 	{ | ||||
|  | ||||
| 		$contactinfo = json_encode(array_merge(array("Contact Email" => $email), $customFields)); | ||||
|  | ||||
| 		$data = array( | ||||
| 			"authtoken" => $this->key, | ||||
| 			"scope" => "CampaignsAPI", | ||||
| 			"version" => "1", | ||||
| 			"resfmt" => "JSON", | ||||
| 			"listkey" => $list, | ||||
| 			"contactinfo" => $contactinfo | ||||
| 		); | ||||
|  | ||||
| 		$this->get('json/listsubscribe', $data); | ||||
|  | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Returns all available ZoHo lists | ||||
| 	 * | ||||
| 	 *  https://www.zoho.com/campaigns/help/api/get-mailing-lists.html | ||||
| 	 * | ||||
| 	 *  @return  array | ||||
| 	 */ | ||||
| 	public function getLists() | ||||
| 	{ | ||||
| 		if (!$this->key) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		$data = array( | ||||
| 			'authtoken' => $this->key, | ||||
| 			'scope'     => 'CampaignsAPI', | ||||
| 			'sort'      => 'asc', | ||||
| 			'resfmt'    => 'JSON', | ||||
| 			'range'     => '1000' //ambiguously large range of total results to overwrite the default range which is 20 | ||||
| 		); | ||||
|  | ||||
| 		$data = $this->get("getmailinglists", $data); | ||||
|  | ||||
| 		if (!$this->success()) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		$lists = array(); | ||||
|  | ||||
| 		if (!isset($data["list_of_details"]) || !is_array($data["list_of_details"])) | ||||
| 		{ | ||||
| 			return $lists; | ||||
| 		} | ||||
|  | ||||
| 		foreach ($data["list_of_details"] as $key => $list) | ||||
| 		{ | ||||
| 			$lists[] = array( | ||||
| 				"id"   => $list["listkey"], | ||||
| 				"name" => $list["listname"] | ||||
| 			); | ||||
| 		} | ||||
|  | ||||
| 		return $lists; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Get the last error returned by either the network transport, or by the API. | ||||
| 	 * | ||||
| 	 *  @return  string | ||||
| 	 */ | ||||
| 	public function getLastError() | ||||
| 	{ | ||||
| 		$body = $this->last_response->body; | ||||
|  | ||||
| 		if (isset($body['message'])) | ||||
| 		{ | ||||
| 			return $body['message']; | ||||
| 		} | ||||
|  | ||||
| 		return 'An unspecified error occured'; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Check if the response was successful or a failure. If it failed, store the error. | ||||
| 	 *  | ||||
| 	 * @return bool     If the request was successful | ||||
| 	 */ | ||||
| 	protected function determineSuccess() | ||||
| 	{ | ||||
| 		$status = $this->findHTTPStatus(); | ||||
|  | ||||
| 		// check if the status is equal to the arbitrary success codes of ZoHo | ||||
| 		if (in_array($status, array(0, 200, 6101, 6201))) | ||||
| 		{ | ||||
| 			return ($this->request_successful = true); | ||||
| 		} | ||||
|  | ||||
| 		return false; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Find the HTTP status code from the headers or API response body | ||||
| 	 *  | ||||
| 	 * @return int  HTTP status code | ||||
| 	 */ | ||||
| 	protected function findHTTPStatus() | ||||
| 	{ | ||||
| 		$status  = $this->last_response->code; | ||||
| 		$success = ($status >= 200 && $status <= 299) ? true : false; | ||||
|  | ||||
| 		if (!$success) | ||||
| 		{ | ||||
| 			return 418; | ||||
| 		} | ||||
|  | ||||
| 		// ZoHo sometimes uses "Code" instead of "code" | ||||
| 		// also they don't use HTTP status codes | ||||
| 		// instead they store their own status code inside the response body | ||||
| 		$data = array_change_key_case($this->last_response->body); | ||||
| 		 | ||||
| 		if (isset($data['code'])) | ||||
| 		{ | ||||
| 			return (int) $data['code']; | ||||
| 		} | ||||
|  | ||||
| 		return 418; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user