File: /var/www/html/ielts-store/wp-content/plugins/automatewoo/includes/Rest_Api.php
<?php
namespace AutomateWoo;
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 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 );
	}
	/**
	 * 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 = [
			WorkflowsController::class,
			ManualWorkflowRunnerController::class,
			WorkflowPresetsController::class,
		];
		$controllers = [];
		foreach ( $classes as $class ) {
			$object = new $class();
			if ( ! $object instanceof WP_REST_Controller ) {
				throw new Exception(
					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;
	}
}