$envs, 'active' => $active, ) ); } /** * AJAX: Save (create/update) an environment. */ public static function ajax_save() { check_ajax_referer( 'aradt_nonce', 'nonce' ); Aradt_Utils::verify_ajax_request(); $env_id = isset( $_POST['env_id'] ) ? sanitize_key( wp_unslash( (string) $_POST['env_id'] ) ) : ''; $name = isset( $_POST['name'] ) ? sanitize_text_field( wp_unslash( (string) $_POST['name'] ) ) : ''; $variables = isset( $_POST['variables'] ) ? Aradt_Utils::sanitize_recursive( Aradt_Utils::safe_json_decode( sanitize_textarea_field( wp_unslash( (string) $_POST['variables'] ) ) ) ) : array(); if ( empty( $name ) ) { wp_send_json_error( array( 'message' => esc_html__( 'Environment name is required.', 'advanced-rest-api-devtools' ) ) ); } if ( ! is_array( $variables ) ) { $variables = array(); } $envs = get_option( 'aradt_environments', array() ); if ( ! is_array( $envs ) ) { $envs = array(); } $is_new = true; if ( ! empty( $env_id ) ) { // Update existing. foreach ( $envs as &$env ) { if ( isset( $env['id'] ) && $env['id'] === $env_id ) { $env['name'] = $name; $env['variables'] = $variables; $env['modified'] = current_time( 'mysql' ); $is_new = false; break; } } unset( $env ); } if ( $is_new ) { $env_id = wp_generate_uuid4(); $envs[] = array( 'id' => $env_id, 'name' => $name, 'variables' => $variables, 'created' => current_time( 'mysql' ), 'modified' => current_time( 'mysql' ), ); } update_option( 'aradt_environments', $envs ); wp_send_json_success( array( 'id' => $env_id, 'message' => esc_html__( 'Environment saved.', 'advanced-rest-api-devtools' ), ) ); } /** * AJAX: Delete an environment. */ public static function ajax_delete() { check_ajax_referer( 'aradt_nonce', 'nonce' ); Aradt_Utils::verify_ajax_request(); $env_id = sanitize_key( wp_unslash( $_POST['env_id'] ?? '' ) ); if ( empty( $env_id ) ) { wp_send_json_error( array( 'message' => esc_html__( 'Invalid environment ID.', 'advanced-rest-api-devtools' ) ) ); } $envs = get_option( 'aradt_environments', array() ); if ( ! is_array( $envs ) ) { $envs = array(); } $envs = array_values( array_filter( $envs, function ( $env ) use ( $env_id ) { return ! isset( $env['id'] ) || $env['id'] !== $env_id; } ) ); update_option( 'aradt_environments', $envs ); // If deleted the active one, clear active. $active = get_option( 'aradt_active_environment', '' ); if ( $active === $env_id ) { delete_option( 'aradt_active_environment' ); } wp_send_json_success( array( 'message' => esc_html__( 'Environment deleted.', 'advanced-rest-api-devtools' ) ) ); } /** * AJAX: Set the active environment. */ public static function ajax_set_active() { check_ajax_referer( 'aradt_nonce', 'nonce' ); Aradt_Utils::verify_ajax_request(); $env_id = sanitize_key( wp_unslash( $_POST['env_id'] ?? '' ) ); if ( empty( $env_id ) ) { delete_option( 'aradt_active_environment' ); } else { update_option( 'aradt_active_environment', $env_id ); } wp_send_json_success( array( 'active' => $env_id, 'message' => esc_html__( 'Active environment updated.', 'advanced-rest-api-devtools' ), ) ); } /** * AJAX: Save global variables. */ public static function ajax_save_globals() { check_ajax_referer( 'aradt_nonce', 'nonce' ); Aradt_Utils::verify_ajax_request(); $variables = isset( $_POST['variables'] ) ? Aradt_Utils::sanitize_recursive( Aradt_Utils::safe_json_decode( sanitize_textarea_field( wp_unslash( (string) $_POST['variables'] ) ) ) ) : array(); if ( ! is_array( $variables ) ) { $variables = array(); } update_option( 'aradt_global_variables', $variables ); wp_send_json_success( array( 'message' => esc_html__( 'Global variables saved.', 'advanced-rest-api-devtools' ) ) ); } /** * AJAX: Get global variables. */ public static function ajax_get_globals() { check_ajax_referer( 'aradt_nonce', 'nonce' ); Aradt_Utils::verify_ajax_request(); $variables = get_option( 'aradt_global_variables', array() ); wp_send_json_success( array( 'variables' => is_array( $variables ) ? $variables : array() ) ); } }