Current File : /home/pacjaorg/public_html/2024/wp-content/plugins/optinmonster/OMAPI/OmuApi.php |
<?php
/**
* OMU API class.
*
* @since 2.6.6
*
* @package OMAPI
* @author Justin Sternberg
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* OMU API class.
*
* @since 2.6.6
*/
class OMAPI_OmuApi extends OMAPI_Api {
/**
* Holds the last instantiated instance of this class.
*
* @var OMAPI_Api
*/
protected static $instance = null;
/**
* Base API route.
*
* @since 2.6.6
*
* @var string
*/
public $base = OPTINMONSTER_URL;
/**
* The OMU routes map.
*
* @since 2.6.6
*
* @var string
*/
protected static $routes = array(
'courses' => 'wp-json/ldlms/v1/courses?per_page=8&orderby=menu_order&order=desc&_embed=1',
'guides' => 'wp-json/wp/v2/omu-guides?per_page=8&orderby=menu_order&order=desc&_embed=1',
);
/**
* The cached-request TTL.
*/
public $cache_ttl = DAY_IN_SECONDS;
/**
* Primary class constructor.
*
* @since 2.6.6
*
* @param string $route The API route to target.
* @param string $method The API method.
*/
public function __construct( $route, $method = 'GET' ) {
// Set class properties.
$this->route = $route;
$this->method = $method;
self::$instance = $this;
}
/**
* Processes the OMU REST API request.
*
* @since 2.6.6
*
* @param string $route The API route to target.
* @param string $method The API method.
* @param array $args Request args.
* @param bool $refresh Whether to refresh the cache.
*
* @return mixed $value The response to the API call.
*/
public static function cached_request( $route, $method = 'GET', $args = array(), $refresh = false ) {
$key_args = $args;
$key_args[] = $method;
$key_args[] = $route;
$cache_key = 'omapp_omu_cached' . md5( serialize( $key_args ) );
$result = get_transient( $cache_key );
if ( empty( $result ) || $refresh ) {
$api = new self( $route, $method );
$result = $api->request( $args );
if ( ! is_wp_error( $result ) ) {
$headers = wp_remote_retrieve_headers( $api->response );
$result = array(
'data' => $result,
'total' => isset( $headers['x-wp-total'] )
? (int) $headers['x-wp-total']
: 0,
'totalpages' => isset( $headers['x-wp-totalpages'] )
? (int) $headers['x-wp-totalpages']
: 0,
);
set_transient( $cache_key, $result, $api->cache_ttl );
}
}
return $result;
}
/**
* Processes the OMU REST API request.
*
* @since 2.6.6
*
* @param array $args Request args.
*
* @return mixed $value The response to the API call.
*/
public function request( $args = array() ) {
$url = in_array( $this->method, array( 'GET', 'DELETE' ), true )
? add_query_arg( array_map( 'urlencode', $args ), $this->get_url() )
: $this->get_url();
$url = esc_url_raw( $url );
// Build the headers of the request.
$headers = array(
'Content-Type' => 'application/json',
);
// Setup data to be sent to the API.
$data = array(
'headers' => $headers,
'timeout' => 3000,
'sslverify' => false,
'method' => $this->method,
);
// Perform the query and retrieve the response.
$this->handle_response( wp_remote_request( $url, $data ) );
// Bail out early if there are any errors.
if ( is_wp_error( $this->response ) ) {
return $this->response;
}
$error = $this->check_response_error();
// Bail out early if there are any errors.
if ( is_wp_error( $error ) ) {
return $error;
}
// Return the json decoded content.
return $this->response_body;
}
/**
* The gets the URL based on our base, endpoint and version
*
* @since 2.6.6
*
* @return string The API url.
*/
public function get_url() {
if ( empty( self::$routes[ $this->route ] ) ) {
throw new Exception( sprintf( 'Missing route information for %s', $this->route ), 400 );
}
return trailingslashit( $this->base ) . self::$routes[ $this->route ];
}
/**
* Returns the last instantiated instance of this class.
*
* @since 2.6.6
*
* @return A single instance of this class.
*/
public static function instance() {
return self::$instance;
}
}