• File: OmuApi.php
  • Full Path: /home/matthif/www/wp-content/plugins/optinmonster/OMAPI/OmuApi.php
  • Date Modified: 01/24/2025 1:58 PM
  • File size: 4.03 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?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' md5serialize$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_argarray_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_responsewp_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 
Exceptionsprintf'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;
    }
}