Files
2025-02-24 22:33:42 +01:00

129 lines
3.2 KiB
PHP

<?php
namespace Essential_Addons_Elementor\Pro\Classes\License;
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use Exception;
use Essential_Addons_Elementor\Pro\Classes\License\Contracts\ApiAdapter;
/**
* @property string $textdomain
* @property string $action_prefix
*/
#[\AllowDynamicProperties]
class AJAXApi extends ApiAdapter {
/**
* @throws Exception
*/
public function register() {
if ( ! isset( $this->action_prefix ) ) {
throw new Exception( "action_prefix needs to be set in ajax configuration" );
}
add_action( "wp_ajax_{$this->action_prefix}/license/activate", [ $this, 'activate' ] );
add_action( "wp_ajax_{$this->action_prefix}/license/deactivate", [ $this, 'deactivate' ] );
add_action( "wp_ajax_{$this->action_prefix}/license/submit-otp", [ $this, 'submit_otp' ] );
add_action( "wp_ajax_{$this->action_prefix}/license/resend-otp", [ $this, 'resend_otp' ] );
}
/**
* Get the API Config
* @return array
*/
public function get_api_config() {
return array_merge( parent::get_api_config(), [
'action' => $this->action_prefix,
'api_url' => esc_url( admin_url( 'admin-ajax.php' ) )
] );
}
public function error( $code, $message ) {
wp_send_json_error( [
'code' => $code,
'message' => $message
] );
}
private function nonce_permission_check( ) {
if ( ! isset( $_POST['_nonce'] ) || ! $this->verify_nonce( $_POST['_nonce'] ) ) {
$this->error( 'nonce_error', __( 'Nonce Verifications Failed.', $this->textdomain ) );
}
if ( ! $this->permission_check() ) {
$this->error( 'no_permission', __( 'You don\'t have permission to take this action.', $this->textdomain ) );
}
}
/**
* @param $request array
*
* @return void
*/
public function activate( $request = [] ) {
$this->nonce_permission_check();
$response = $this->license_manager->activate( [
'license_key' => sanitize_text_field( $_POST['license_key'] )
] );
if ( is_wp_error( $response ) ) {
$this->error( $response->get_error_code(), $response->get_error_message() );
}
wp_send_json_success( $response );
}
/**
* @param $request array
*
* @return void
*/
public function deactivate( $request = [] ) {
$response = $this->license_manager->deactivate();
if ( is_wp_error( $response ) ) {
$this->error( $response->get_error_code(), $response->get_error_message() );
}
wp_send_json_success( $response );
}
public function submit_otp( $request = [] ) {
$this->nonce_permission_check();
$args = [
'otp' => sanitize_text_field( $_POST['otp'] ),
'license_key' => sanitize_text_field( $_POST['license'] )
];
$response = $this->license_manager->submit_otp( $args );
if ( is_wp_error( $response ) ) {
$this->error( $response->get_error_code(), $response->get_error_message() );
}
wp_send_json_success( $response );
}
public function resend_otp( $request = [] ) {
$this->nonce_permission_check();
$args = [
'license_key' => sanitize_text_field( $_POST['license'] )
];
$response = $this->license_manager->resend_otp( $args );
if ( is_wp_error( $response ) ) {
$this->error( $response->get_error_code(), $response->get_error_message() );
}
wp_send_json_success( $response );
}
}