File: /var/www/html/ielts-store/wp-content/plugins/automatewoo/includes/Integrations/ActiveCampaign.php
<?php
// phpcs:ignoreFile
namespace AutomateWoo;
if ( ! defined( 'ABSPATH' ) ) exit;
/**
 * @class Integration_ActiveCampaign
 * @since 2.6.1
 */
class Integration_ActiveCampaign extends Integration {
	/** @var string */
	public $integration_id = 'activecampaign';
	/** @var string */
	private $api_key;
	/** @var string */
	private $api_url;
	/** @var \ActiveCampaign */
	private $sdk;
	/** @var int */
	public $request_count = 1;
	/**
	 * Enable API debugging.
	 *
	 * @var bool
	 */
	protected $debug = false;
	/**
	 * Constructor.
	 *
	 * @param string $api_url
	 * @param string $api_key
	 * @param bool   $debug
	 */
	function __construct( $api_url, $api_key, $debug ) {
		$this->api_url = $api_url;
		$this->api_key = $api_key;
		$this->debug   = $debug;
	}
	/**
	 * @return array
	 */
	function get_lists() {
		if ( $cache = Cache::get_transient( 'ac_lists' ) ) {
			return $cache;
		}
		$lists = $this->request( 'list/list', [ 'ids' => 'all' ] );
		$clean_lists = [];
		foreach ( $lists as $list ) {
			if ( is_object($list) ) {
				$clean_lists[$list->id] = $list->name;
			}
		}
		Cache::set_transient( 'ac_lists', $clean_lists, 0.15 );
		return $clean_lists;
	}
	/**
	 * Check is the contact exists in ActiveCampaign.
	 *
	 * Result from API is cached for 5 minutes.
	 *
	 * @param string $email
	 *
	 * @return bool
	 */
	public function is_contact( $email ) {
		$cache_key = 'aw_ac_is_contact_' . md5( $email );
		if ( $cache = get_transient( $cache_key ) ) {
			return $cache === 'yes';
		}
		$contact = $this->request( 'contact/view?email=' . urlencode( $email ) );
		$is_contact = $contact->success;
		set_transient( $cache_key, $is_contact ? 'yes': 'no', MINUTE_IN_SECONDS * 5 );
		return $is_contact;
	}
	/**
	 * @param $email
	 */
	function clear_contact_transients( $email ) {
		delete_transient( 'aw_ac_is_contact_' . md5( $email ) );
	}
	/**
	 * @return array
	 */
	function get_contact_custom_fields() {
		if ( $cache = Cache::get_transient( 'ac_contact_fields' ) ) {
			return $cache;
		}
		$response = $this->request( 'list/field/view?ids=all' );
		$fields = [];
		foreach ( $response as $item ) {
			if ( is_object($item) ) {
				$fields[ $item->id ] = $item;
			}
		}
		Cache::set_transient( 'ac_contact_fields', $fields, 0.15 );
		return $fields;
	}
	/**
	 * @param $path
	 * @param $data
	 * @return \ActiveCampaign|false
	 *
	 * @throws \Exception
	 */
	function request( $path, $data = [] ) {
		$sdk = $this->get_sdk();
		if ( ! $sdk ) {
			return false;
		}
		$this->request_count++;
		// avoid overloading the api
		if ( $this->request_count % 4 == 0 ) {
			sleep(2);
		}
		if ( $this->debug ) {
			// Switch on debugging
			$sdk->debug = true;
			ob_start();
		}
		try {
			$response = $sdk->api( $path, $data );
		} catch ( \Exception $e ) {
			if ( $this->debug ) {
				// Unfortunately, the wrapper outputs the debugging info as HTML
				Logger::error( 'active-campaign', ob_get_clean() );
			}
			// Rethrow for workflow logs
			throw $e;
		} finally {
			$sdk->debug = false;
		}
		if ( $this->debug ) {
			ob_clean();
		}
		return $response;
	}
	/**
	 * @return \ActiveCampaign
	 */
	protected function get_sdk() {
		if ( ! isset( $this->sdk ) ) {
			if ( ! class_exists( '\ActiveCampaign' ) ) {
				require_once AW()->lib_path( '/activecampaign-api-php/includes/ActiveCampaign.class.php' );
			}
			if ( $this->api_url && $this->api_key ) {
				$this->sdk = new \ActiveCampaign( $this->api_url, $this->api_key );
			}
			else {
				$this->sdk = false;
			}
		}
		return $this->sdk;
	}
	function clear_cache_data() {
		Cache::delete_transient( 'ac_lists' );
		Cache::delete_transient( 'ac_contact_fields' );
	}
}