automatewoo/includes/Rest_Api.php
fei-source 47d3c9a8b6 Update to v6.2.2
Source: GrootMade/Festinger Vault
2026-03-15 08:31:15 +08:00

114 lines
3.1 KiB
PHP

<?php
namespace AutomateWoo;
use AutomateWoo\Rest_Api\Controllers\ConversionsController;
use AutomateWoo\Rest_Api\Controllers\LogsController;
use AutomateWoo\Rest_Api\Controllers\WorkflowPresets as WorkflowPresetsController;
use AutomateWoo\Rest_Api\Controllers\Workflows as WorkflowsController;
use AutomateWoo\Rest_Api\Controllers\ManualWorkflowRunner as ManualWorkflowRunnerController;
use AutomateWoo\Rest_Api\Utilities\Controller_Namespace;
use AutomateWoo\Admin\Analytics\Rest_API as Analytics_Rest_API;
use WP_REST_Controller;
use WP_REST_Request;
use WP_REST_Response;
/**
* Class Rest_Api
*
* @since 4.9.0
*/
final class Rest_Api {
use Controller_Namespace;
/**
* Init AutomateWoo's Rest API.
*/
public function init() {
add_action( 'rest_api_init', [ $this, 'register_routes' ], 15 );
add_filter( 'rest_namespace_index', [ $this, 'filter_namespace_index' ], 10, 2 );
add_filter( 'woocommerce_rest_is_request_to_rest_api', [ $this, 'allow_wc_rest_api_authentication' ] );
Analytics_Rest_API::init();
}
/**
* Register REST API routes.
*/
public function register_routes() {
foreach ( $this->get_controllers() as $controller ) {
$controller->register_routes();
}
}
/**
* Get REST API controller objects.
*
* @return WP_REST_Controller[]
* @throws Exception When a class doesn't implement the correct interface.
*/
private function get_controllers() {
$classes = [
LogsController::class,
WorkflowsController::class,
ManualWorkflowRunnerController::class,
WorkflowPresetsController::class,
ConversionsController::class,
];
$controllers = [];
foreach ( $classes as $class ) {
$object = new $class();
if ( ! $object instanceof WP_REST_Controller ) {
throw new Exception(
esc_html( sprintf( '%s must implement %s', get_class( $object ), WP_REST_Controller::class ) )
);
}
$controllers[] = $object;
}
return $controllers;
}
/**
* Filter the index response for our namespace.
*
* @param WP_REST_Response $response The response object for the given request.
* @param WP_REST_Request $request The current REST Request object.
*
* @return WP_REST_Response The filtered response object.
*/
public function filter_namespace_index( $response, $request ) {
if ( $this->namespace === $request['namespace'] ) {
$response->data['info'] = __( 'AutomateWoo API endpoints are still under development and subject to change.', 'automatewoo' );
}
return $response;
}
/**
* Allow the AutomateWoo namespace to use WC REST API authentication.
*
* @since 6.0.10
*
* @param boolean $allow Allow the request to use WC REST API authentication.
*
* @return boolean
*/
public function allow_wc_rest_api_authentication( bool $allow ): bool {
if ( $allow || empty( $_SERVER['REQUEST_URI'] ) ) {
return $allow;
}
$rest_prefix = trailingslashit( rest_get_url_prefix() );
$request_uri = esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) );
// Check if the request is to the AutomateWoo namespace.
if ( false !== strpos( $request_uri, "{$rest_prefix}{$this->namespace}/" ) ) {
return true;
}
return $allow;
}
}