*/ 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 '
' . 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 '