*/ protected $tabs; public function __construct(Aizen_Abilities $abilities, Aizen_Logger $logger, Aizen_Connection $connection) { $this->abilities = $abilities; $this->logger = $logger; $this->connection = $connection; $this->tabs = array( 'connection' => 'AI Connection', 'abilities' => 'Abilities', 'logging' => 'Logging', ); add_action('admin_menu', array($this, 'register_menu')); add_action('admin_enqueue_scripts', array($this, 'enqueue_assets')); add_action('wp_ajax_aizen_generate_client_snippet', array($this, 'aizen_generate_client_snippet')); } /** * Registers the top-level "AbiliZen" admin page. */ public function register_menu() { add_menu_page( __('AbiliZen', 'abilizen-ai-abilities'), __('AbiliZen', 'abilizen-ai-abilities'), 'manage_options', 'ai-zen', array($this, 'render_page'), 'dashicons-superhero-alt', 80 ); } /** * @param string $hook Current admin page hook. */ public function enqueue_assets($hook) { if ('toplevel_page_ai-zen' !== $hook) { return; } wp_enqueue_style('aizen-admin', AIZEN_URL . 'admin/css/admin.css', array(), AIZEN_VERSION); wp_enqueue_script('aizen-admin', AIZEN_URL . 'admin/js/admin.js', array(), AIZEN_VERSION, true); wp_localize_script( 'aizen-admin', 'AizenAdmin', array( 'copiedText' => __('Copied!', 'abilizen-ai-abilities'), 'copyText' => __('Copy', 'abilizen-ai-abilities'), 'token' => wp_create_nonce('aizen_nonce'), 'ajaxurl' => admin_url('admin-ajax.php'), ) ); } /** * Renders the page chrome (title + tab nav) and the active tab's view. */ public function render_page() { if (! current_user_can('manage_options')) { wp_die(esc_html__('You do not have permission to access this page.', 'abilizen-ai-abilities')); } $active_tab = isset($_GET['tab']) ? sanitize_key(wp_unslash($_GET['tab'])) : 'connection'; if (! isset($this->tabs[$active_tab])) { $active_tab = 'connection'; } // Expose collaborators to the view files under a short, consistent name. $abilities = $this->abilities; $logger = $this->logger; $connection = $this->connection; $tabs = $this->tabs; echo '
'; echo '
'; echo '

' . esc_html__('AbiliZen', 'abilizen-ai-abilities') . '

'; echo '

' . esc_html__('Control what AI assistants can do on this site, connected via the WordPress Abilities API and the MCP Adapter.', 'abilizen-ai-abilities') . '

'; echo '
'; echo ''; echo '
'; $view_file = AIZEN_PATH . 'admin/views/tab-' . $active_tab . '.php'; if (file_exists($view_file)) { include $view_file; } echo '
'; // .aizen-tab-content echo '
'; // .aizen-wrap } function aizen_generate_client_snippet() { if (current_user_can('manage_options')) { if (wp_verify_nonce(sanitize_text_field($_POST['nonce']), 'aizen_nonce')) { //get current username $username = wp_get_current_user()->user_login; $app_password = sanitize_text_field($_POST['app_password']); $authcode = base64_encode(sprintf('%s:%s', $username, $app_password)); $client_json = $this->connection->get_client_config_json('mywordpress', $authcode); wp_send_json_success(array('snippet' => $client_json)); } else { wp_send_json_error(array('message' => __('Invalid nonce.', 'abilizen-ai-abilities'))); } } else { wp_send_json_error(array('message' => __('You do not have permission to perform this action.', 'abilizen-ai-abilities'))); } exit(); } }