View file File name : class-astra-sites-zipwp-api.php Content :<?php class Astra_Sites_ZipWP_Api { /** * Member Variable * * @var mixed */ private static $instance = null; /** * Initiator * * @since 4.0.0 * * @return mixed */ public static function get_instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * Constructor * * @since 4.0.0 */ public function __construct() { add_action( 'rest_api_init', array( $this, 'register_route' ) ); } /** * Get api domain * * @since 4.0.0 * @return string */ public function get_api_domain() { return (defined('ZIPWP_API') ? ZIPWP_API : 'https://api.zipwp.com/api/'); } /** * Get api namespace * * @since 4.0.0 * @return string */ public function get_api_namespace() { return 'zipwp/v1'; } /** * Get API headers * * @since 4.0.0 * @return array<string, string> */ public function get_api_headers() { return array( 'Content-Type' => 'application/json', 'Accept' => 'application/json', 'Authorization' => 'Bearer ' . Astra_Sites_ZipWP_Helper::get_token(), ); } /** * Check whether a given request has permission to read notes. * * @param object $request WP_REST_Request Full details about the request. * @return object|boolean */ public function get_item_permissions_check( $request ) { if ( ! current_user_can( 'manage_options' ) ) { return new \WP_Error( 'gt_rest_cannot_access', __( 'Sorry, you are not allowed to do that.', 'astra-sites' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Register route * * @since 4.0.0 * @return void */ public function register_route() { $namespace = $this->get_api_namespace(); register_rest_route( $namespace, '/get-credits/', array( array( 'methods' => \WP_REST_Server::READABLE, 'callback' => array( $this, 'get_user_credits' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), ), ) ); register_rest_route( $namespace, '/zip-plan/', array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'get_zip_plan_details' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array(), ) ); register_rest_route( $namespace, '/revoke-access/', array( array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'revoke_access' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), ), ) ); } /** * Get the zip plan details * @since 4.0.0 * * @return \WP_REST_Response */ public function get_zip_plan_details() { $zip_plan = Astra_Sites_ZipWP_Integration::get_instance()->get_zip_plans(); $response = new \WP_REST_Response( array( 'success' => $zip_plan['status'], 'data' => $zip_plan['data'], ) ); $response->set_status( 200 ); return $response; } /** * Get User Credits. * * @param \WP_REST_Request $request Full details about the request. * @return mixed */ public function get_user_credits( $request ) { $nonce = (string)$request->get_header( 'X-WP-Nonce' ); // Verify the nonce. if ( ! wp_verify_nonce( sanitize_text_field( $nonce ), 'wp_rest' ) ) { wp_send_json_error( array( 'data' => __( 'Nonce verification failed.', 'astra-sites' ), 'status' => false, ) ); } $api_endpoint = $this->get_api_domain() . '/scs-usage/'; $request_args = array( 'headers' => $this->get_api_headers(), 'timeout' => 100, ); $response = wp_safe_remote_post( $api_endpoint, $request_args ); if ( is_wp_error( $response ) ) { // There was an error in the request. wp_send_json_error( array( 'data' => 'Failed ' . $response->get_error_message(), 'status' => false, ) ); } $response_code = wp_remote_retrieve_response_code( $response ); $response_body = wp_remote_retrieve_body( $response ); if ( 200 === $response_code ) { $response_data = json_decode( $response_body, true ); if ( $response_data ) { $credit_details = array(); $credit_details['used'] = ! empty( $response_data['total_used_credits'] ) ? $response_data['total_used_credits'] : 0; $credit_details['total'] = $response_data['total_credits']; $credit_details['percentage'] = intval( ( $credit_details['used'] / $credit_details['total'] ) * 100 ); $credit_details['free_user'] = $response_data['free_user']; wp_send_json_success( array( 'data' => $credit_details, 'status' => true, ) ); } wp_send_json_error( array( 'data' => $response_data, 'status' => false, ) ); } wp_send_json_error( array( 'data' => 'Failed ' . $response_body, 'status' => false, ) ); } /** * Revoke access. * * @param \WP_REST_Request $request Full details about the request. * @return WP_REST_Response */ public function revoke_access( $request ): WP_REST_Response { $nonce = $request->get_header( 'X-WP-Nonce' ); $nonce = isset( $nonce ) ? sanitize_text_field( $nonce ) : ''; // Verify the nonce. if ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) { wp_send_json_error( array( 'data' => __( 'Nonce verification failed.', 'astra-sites' ), 'status' => false, ) ); } $business_details = get_option( 'ast-templates-business-details', false ); delete_option( 'ast-block-templates-show-onboarding' ); if ( ! $business_details ) { $business_details = array(); } $business_details['token'] = ''; $updated = update_option( 'ast-templates-business-details', $business_details ); delete_option( 'zip_ai_settings' ); $response = new WP_REST_Response( array( 'success' => $updated, ) ); $response->set_status( 200 ); return $response; } } Astra_Sites_ZipWP_Api::get_instance();