Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

jsarnowski / jsarnowski/jet-theme-core   php

Repository URL to install this package:

/ api.php

<?php

// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
	die;
}

if ( ! class_exists( 'Jet_Theme_Core_API' ) ) {

	/**
	 * Define Jet_Theme_Core_API class
	 */
	class Jet_Theme_Core_API {

		private $config        = array();
		private $enabled       = null;
		private $error_message = '';

		/**
		 * Constructor for the class
		 */
		function __construct() {
			$this->config  = jet_theme_core()->config->get( 'api' );
		}

		/**
		 * Check if remote API is enabled
		 *
		 * @return boolean [description]
		 */
		public function is_enabled() {

			if ( null !== $this->enabled ) {
				return $this->enabled;
			}

			if ( empty( $this->config['enabled'] ) || true !== $this->config['enabled'] ) {
				$this->enabled = false;
				return $this->enabled;
			}

			if ( empty( $this->config['base'] ) || empty( $this->config['path'] ) || empty( $this->config['endpoints'] ) ) {
				$this->enabled = false;
				return $this->enabled;
			}

			$this->enabled = true;

			return $this->enabled;
		}

		/**
		 * Retrieve URL to spescific endpoint.
		 *
		 * @param  [type] $for [description]
		 * @return [type]      [description]
		 */
		public function api_url( $for ) {

			if ( ! $this->is_enabled() ) {
				return false;
			}

			if ( empty( $this->config['endpoints'][ $for ] ) ) {
				return false;
			}

			return $this->config['base'] . $this->config['path'] . $this->config['endpoints'][ $for ];
		}

		/**
		 * Returns API base URL
		 *
		 * @return string
		 */
		public function api_base() {

			if ( ! $this->is_enabled() ) {
				return apply_filters( 'jet-theme-core/api/base-url', false );
			}

			$base_url = $this->config['base'];

			return apply_filters( 'jet-theme-core/api/base-url', $base_url );
		}

		/**
		 * Retrieve request arguments for API request
		 *
		 * @return array
		 */
		public function request_args() {
			return array(
				'timeout'   => 60,
				'sslverify' => false
			);
		}

		/**
		 * Get remote system info by key.
		 *
		 * @param  string|array $key [description]
		 * @return [type]      [description]
		 */
		public function get_info( $key = '' ) {

			$api_url = $this->api_url( 'info' );

			if ( ! $api_url ) {
				return false;
			}

			$response = wp_remote_get( $api_url, $this->request_args() );

			$body = wp_remote_retrieve_body( $response );
			$body = json_decode( $body, true );

			if ( ! $body || ! isset( $body['success'] ) || true !== $body['success'] ) {
				return false;
			}

			if ( ! $key ) {
				unset( $body['success'] );
				return $body;
			}

			if ( is_string( $key ) ) {
				return isset( $body[ $key ] ) ? $body[ $key ] : false;
			}

			if ( is_array( $key ) ) {

				$result = array();

				foreach ( $key as $_key ) {
					$result[ $_key ] = isset( $body[ $_key ] ) ? $body[ $_key ] : false;
				}

				return $result;

			}

		}

		/**
		 * Try to activate passed license key for current server
		 *
		 * @param  string $license [description]
		 * @return [type]          [description]
		 */
		public function acitvate_license( $license = '' ) {

			if ( ! $this->is_enabled() ) {
				return $this->set_error( esc_html__( 'Remote API is disabled.', 'jet-theme-core' ) );
			}

			if ( empty( $license ) ) {
				return $this->set_error( esc_html__( 'Empty license key.', 'jet-theme-core' ) );
			}

			$response = $this->license_request( 'activate_license', $license );
			$result   = wp_remote_retrieve_body( $response );
			$result   = json_decode( $result, true );

			if ( ! isset( $result['success'] ) ) {
				return $this->set_error( esc_html__( 'Internal error, please try again later.', 'jet-theme-core' ) );
			}

			if ( true === $result['success'] ) {

				if ( 'valid' === $result['license'] ) {
					return true;
				} else {
					return $this->set_error( null, 'default' );
				}

			} else {

				if ( ! empty( $result['error'] ) ) {
					return $this->set_error( null, $result['error'] );
				} else {
					return $this->set_error( null, 'default' );
				}

			}

		}

		/**
		 * Try to deactivate passed license key for current server
		 *
		 * @param  string $license [description]
		 * @return [type]          [description]
		 */
		public function deacitvate_license( $license = '' ) {

			if ( ! $this->is_enabled() ) {
				return $this->set_error( esc_html__( 'Remote API is disabled.', 'jet-theme-core' ) );
			}

			if ( empty( $license ) ) {
				return $this->set_error( esc_html__( 'Empty license key.', 'jet-theme-core' ) );
			}

			$response = $this->license_request( 'deactivate_license', $license );
			$result   = wp_remote_retrieve_body( $response );
			$result   = json_decode( $result, true );

			if ( ! isset( $result['success'] ) ) {
				return $this->set_error( esc_html__( 'Internal error, please try again later.', 'jet-theme-core' ) );
			}

			if ( true === $result['success'] ) {

				return true;

			} else {

				if ( ! empty( $result['error'] ) ) {
					return $this->set_error( null, $result['error'] );
				} else {
					return $this->set_error( null, 'default' );
				}

			}

		}


		/**
		 * Retrirve error message by error code
		 *
		 * @return string
		 */
		public function get_error_by_code( $code ) {

			$messages = array(
				'missing' => __( 'Your license is missing. Please check your key again.', 'jet-theme-core' ),
				'no_activations_left' => sprintf( __( '<strong>You have no more activations left.</strong> <a href="%s" target="_blank">Please upgrade to a more advanced license</a> (you\'ll only need to cover the difference).', 'jet-theme-core' ), $this->upgrade_url() ),
				'expired' => sprintf( __( '<strong>Your License Has Expired.</strong> <a href="%s" target="_blank">Renew your license today</a> to keep getting feature updates, premium support and unlimited access to the template library.', 'jet-theme-core' ), $this->renew_url() ),
				'revoked' => __( '<strong>Your license key has been cancelled</strong> (most likely due to a refund request). Please consider acquiring a new license.', 'jet-theme-core' ),
				'disabled' => __( '<strong>Your license key has been cancelled</strong> (most likely due to a refund request). Please consider acquiring a new license.', 'jet-theme-core' ),
				'invalid' => __( '<strong>Your license key doesn\'t match your current domain</strong>. This is most likely due to a change in the domain URL of your site (including HTTPS/SSL migration). Please deactivate the license and then reactivate it again.', 'jet-theme-core' ),
				'site_inactive' => __( '<strong>Your license key doesn\'t match your current domain</strong>. This is most likely due to a change in the domain URL. Please deactivate the license and then reactivate it again.', 'jet-theme-core' ),
				'inactive' => __( '<strong>Your license key doesn\'t match your current domain</strong>. This is most likely due to a change in the domain URL of your site (including HTTPS/SSL migration). Please deactivate the license and then reactivate it again.', 'jet-theme-core' ),
			);

			$default = __( 'An error occurred. Please check your internet connection and try again. If the problem persists, contact our support.', 'jet-theme-core' );

			return isset( $messages[ $code ] ) ? $messages[ $code ] : $default;

		}

		/**
		 * Returns upgrade URL
		 *
		 * @return string
		 */
		public function upgrade_url() {
			return $this->config['base'];
		}

		/**
		 * Returns upgrade URL
		 *
		 * @return string
		 */
		public function renew_url() {
			return $this->config['base'];
		}

		/**
		 * Set error message and return false.
		 *
		 * @param [type] $message [description]
		 */
		public function set_error( $message, $code = null ) {

			if ( ! $code ) {
				$this->error_message = $message;
			} else {
				$this->error_message = $this->get_error_by_code( $code );
			}

			return false;
		}

		/**
		 * Returns error message
		 *
		 * @return [type] [description]
		 */
		public function get_activation_error() {
			return $this->error_message;
		}

		/**
		 * Perform a remote request with passed action for passed license key
		 *
		 * @param  string $action  EDD action to perform (activate_license, check_license etc)
		 * @param  string $license License key
		 * @return WP_Error|array
		 */
		public function license_request( $action, $license ) {

			$url = add_query_arg(
				array(
					'edd_action' => $action,
					'item_id'    => ( ! empty( $this->config['id'] ) ? $this->config['id'] : false ),
					'license'    => $license,
					'url'        => urlencode( home_url( '/' ) ),
				),
				$this->config['base']
			);

			$args = apply_filters( 'jet-theme-core/license-request/args', $this->request_args() );

			return wp_remote_get( $url, $args );
		}

		/**
		 * Check status for passed license key
		 *
		 * @param  string $license License key to check.
		 * @return string
		 */
		public function license_status( $license ) {

			if ( ! $this->is_enabled() ) {
				return array(
					'success' => false,
					'message' => esc_html__( 'Remote API is disabled', 'jet-theme-core' ),
				);
			}

			if ( empty( $license ) ) {

				return array(
					'success' => false,
					'message' => esc_html__( 'Empty license key', 'jet-theme-core' ),
				);

			}

			$response = $this->license_request( 'check_license', $license );
Loading ...