settings = $settings; // Get the post ID from the URL $post_id = isset( $_GET[ 'post' ] ) ? intval( $_GET[ 'post' ] ) : 0; // phpcs:ignore if ( ! empty( $_GET[ 'post_type' ] ) ) { // phpcs:ignore $post_type = $_GET[ 'post_type' ]; // phpcs:ignore } elseif ( $post_id > 0 ) { $post_type = get_post_type( $post_id ); } else { $post_type = ''; } if ( ! empty( $this->isEnabledWriteWithAI() ) && 'docs' == $post_type ) { add_action( 'admin_footer', array( $this, 'ai_autowrite_button' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_ai_edit_assets' ) ); } add_action( 'wp_ajax_generate_openai_content', array( $this, 'generate_openai_content_callback' ) ); } public function enqueue_ai_edit_assets( $hook ) { if ( 'post.php' !== $hook && 'post-new.php' !== $hook ) { return; } global $post_type; if ( 'docs' !== $post_type ) { return; } if ( empty( $this->get_api_key() ) ) { return; } betterdocs()->assets->enqueue( 'betterdocs-ai-edit', 'blocks/ai-edit.js' ); betterdocs()->assets->enqueue( 'betterdocs-ai-edit-style', 'blocks/ai-edit-style.css' ); wp_localize_script( 'betterdocs-ai-edit', 'betterdocsAIEdit', array( 'rest_url' => esc_url_raw( rest_url( 'betterdocs/v1/ai-edit' ) ), 'rest_nonce' => wp_create_nonce( 'wp_rest' ), 'post_id' => get_the_ID() ) ); } public function isEnabledWriteWithAI() { $isEnableAutoWrite = $this->settings->get( 'enable_write_with_ai', true ); return $isEnableAutoWrite; } public function isValidAPIKey( $apiKey ) { if ( empty( $apiKey ) ) { $api_response[ 'valid' ] = false; $api_response[ 'message' ] = 'Please Insert your OpenAI API Key to use this Write with AI feature.'; return $api_response; } $ch = curl_init( 'https://api.openai.com/v1/engines' ); //phpcs:ignore WordPress.WP.AlternativeFunctions.curl_curl_init curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); //phpcs:ignore WordPress.WP.AlternativeFunctions.curl_curl_setopt curl_setopt( $ch, CURLOPT_HTTPHEADER, array( //phpcs:ignore WordPress.WP.AlternativeFunctions.curl_curl_setopt 'Content-Type: application/json', 'Authorization: Bearer ' . $apiKey ) ); $api_response = array(); $response = curl_exec( $ch ); //phpcs:ignore WordPress.WP.AlternativeFunctions.curl_curl_exec $httpCode = curl_getinfo( $ch, CURLINFO_HTTP_CODE ); //phpcs:ignore WordPress.WP.AlternativeFunctions.curl_curl_getinfo curl_close( $ch ); //phpcs:ignore WordPress.WP.AlternativeFunctions.curl_curl_close if ( 200 == $httpCode ) { $api_response[ 'valid' ] = true; $api_response[ 'message' ] = 'Valid API Key'; } else { $responseData = json_decode( $response, true ); // Access the message data (replace 'data' with the actual key used in the response) $messageData = $responseData[ 'error' ] ? $responseData[ 'error' ] : ''; $api_response[ 'valid' ] = false; $api_response[ 'message' ] = $messageData[ 'message' ] ? $messageData[ 'message' ] : 'Invalid API Key'; } // print_r($response); return $api_response; } public function get_api_key() { $api_key = $this->settings->get( 'ai_autowrite_api_key', '' ); return $api_key; } public function get_system_prompt() { $prompt = <<<'PROMPT' You are a Senior Technical Writer specializing in comprehensive, high-quality documentation. Your goal is to produce documentation that scores 100/100 on clarity, completeness, and structure. ## Output format Return only HTML body content. Never wrap output in ``, ``, ``, ``, or markdown code fences (no ```html ... ```). Use semantic, Gutenberg-friendly tags only: - Headings: `

`, `

`, `

` (do not emit `

` — it is reserved for the document title) - Paragraphs: `

` for prose - Lists: `