'array', 'sanitize_callback' => array( 'Aivexa_Settings', 'sanitize' ), 'default' => Aivexa_Settings::get_defaults(), ) ); } /** * Enqueue admin assets. * * @param string $hook_suffix Hook suffix. */ public function enqueue_assets( string $hook_suffix ): void { if ( false === strpos( $hook_suffix, 'aivexa' ) ) { return; } wp_enqueue_style( 'aivexa-admin', AIVEXA_PLUGIN_URL . 'admin/css/admin.css', array(), AIVEXA_VERSION ); wp_enqueue_script( 'aivexa-admin', AIVEXA_PLUGIN_URL . 'admin/js/admin.js', array(), AIVEXA_VERSION, true ); wp_localize_script( 'aivexa-admin', 'aivexaAdmin', array( 'ajaxUrl' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'aivexa_admin_nonce' ), 'i18n' => array( 'testing' => __( 'Testing…', 'aivexa' ), 'success' => __( 'Connection successful.', 'aivexa' ), 'failed' => __( 'Connection failed.', 'aivexa' ), 'sending' => __( 'Sending…', 'aivexa' ), ), ) ); } /** * AJAX: test WordPress AI Client / Connectors. */ public function ajax_test_connection(): void { check_ajax_referer( 'aivexa_admin_nonce', 'nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( array( 'message' => __( 'Permission denied.', 'aivexa' ) ), 403 ); } $result = Aivexa_Client::test_connection(); if ( is_wp_error( $result ) ) { wp_send_json_error( array( 'message' => $result->get_error_message() ) ); } wp_send_json_success( array( 'message' => __( 'AI connection successful via the WordPress AI Client.', 'aivexa' ) ) ); } /** * AJAX: test agent with trace. */ public function ajax_test_agent(): void { check_ajax_referer( 'aivexa_admin_nonce', 'nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( array( 'message' => __( 'Permission denied.', 'aivexa' ) ), 403 ); } $message = isset( $_POST['message'] ) ? sanitize_text_field( wp_unslash( (string) $_POST['message'] ) ) : ''; $message = Aivexa_Security::validate_message( $message ); if ( is_wp_error( $message ) ) { wp_send_json_error( array( 'message' => $message->get_error_message() ) ); } $agent = new Aivexa_Agent(); $result = $agent->chat( $message, '', true ); if ( is_wp_error( $result ) ) { wp_send_json_error( array( 'message' => $result->get_error_message() ) ); } wp_send_json_success( $result ); } /** * Render dashboard. */ public function render_dashboard_page(): void { if ( ! current_user_can( 'manage_options' ) ) { return; } $settings = Aivexa_Settings::get_all(); $stats = get_option( 'aivexa_stats', array() ); $agent = new Aivexa_Agent(); $tools = $agent->get_tools(); include AIVEXA_PLUGIN_DIR . 'admin/views/dashboard-page.php'; } /** * Render settings page. */ public function render_settings_page(): void { if ( ! current_user_can( 'manage_options' ) ) { return; } $settings = Aivexa_Settings::get_all(); include AIVEXA_PLUGIN_DIR . 'admin/views/settings-page.php'; } /** * Render test page. */ public function render_test_page(): void { if ( ! current_user_can( 'manage_options' ) ) { return; } include AIVEXA_PLUGIN_DIR . 'admin/views/test-agent-page.php'; } /** * Render tools page. */ public function render_tools_page(): void { if ( ! current_user_can( 'manage_options' ) ) { return; } $agent = new Aivexa_Agent(); $tools = $agent->get_tools(); include AIVEXA_PLUGIN_DIR . 'admin/views/tools-page.php'; } /** * Render usage page. */ public function render_usage_page(): void { if ( ! current_user_can( 'manage_options' ) ) { return; } $stats = get_option( 'aivexa_stats', array() ); $logs = Aivexa_Logger::get_logs(); include AIVEXA_PLUGIN_DIR . 'admin/views/usage-page.php'; } }