'businessbot_chat_assist_sanitize_business_data', ]); register_setting('businessbot_api_options', 'businessbot_api_key', [ 'sanitize_callback' => 'businessbot_chat_assist_sanitize_api_key', ]); register_setting('businessbot_api_options', 'businessbot_debug_mode', [ 'sanitize_callback' => 'businessbot_chat_assist_sanitize_yes_no_option', ]); } function businessbot_chat_assist_sanitize_api_key($input) { $new_key = sanitize_text_field($input); $new_key = trim($new_key); $current_key = (string) get_option('businessbot_api_key', ''); if ($new_key !== $current_key) { delete_option('businessbot_api_last_test'); delete_option('businessbot_api_last_test_message'); delete_option('businessbot_api_last_test_model'); delete_option('businessbot_api_last_test_http_code'); delete_option('businessbot_api_last_test_error'); delete_option('businessbot_api_last_test_time'); } return $new_key; } function businessbot_chat_assist_sanitize_business_data($input) { // Sanitize each field $output = []; $fields = [ 'business_name', 'description', 'products_services', 'customers', 'tone', 'address', 'contact_number', 'businessEmails', 'hours', 'common_questions', 'promotions', 'avoid', 'faq_link', 'initial_greeting', ]; foreach ($fields as $field) { if (isset($input[$field])) { $output[$field] = is_array($input[$field]) ? array_map('sanitize_text_field', $input[$field]) : sanitize_text_field($input[$field]); } } // Special case: URL if (!empty($input['faq_link'])) { $output['faq_link'] = esc_url_raw($input['faq_link']); } return $output; } function businessbot_chat_assist_sanitize_yes_no_option($input) { return ('yes' === sanitize_text_field((string) $input)) ? 'yes' : 'no'; } function businessbot_chat_assist_enqueue_admin_details_assets($hook) { $allowed_pages = ['businessbot', 'businessbot-details']; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only admin page routing parameter. $current_page = isset($_GET['page']) ? sanitize_key(wp_unslash($_GET['page'])) : ''; if (!in_array($current_page, $allowed_pages, true)) { return; } $css_file = BUSSINESSBOT_DIR . 'assets/css/admin-details.css'; $js_file = BUSSINESSBOT_DIR . 'assets/js/admin-details.js'; $css_version = file_exists($css_file) ? (string) filemtime($css_file) : BUSSINESSBOT_VERSION; $js_version = file_exists($js_file) ? (string) filemtime($js_file) : BUSSINESSBOT_VERSION; wp_enqueue_style( 'businessbot-admin-details', BUSSINESSBOT_URL . 'assets/css/admin-details.css', [], $css_version ); wp_enqueue_script( 'businessbot-admin-details', BUSSINESSBOT_URL . 'assets/js/admin-details.js', [], $js_version, true ); } function businessbot_chat_assist_settings_page() { $options = get_option('businessbot_data'); $tone_descriptions = [ 'Friendly' => __('Friendly tone responds in a warm, welcoming, and conversational style.', 'ai-chat-assistant-for-business'), 'Professional' => __('Professional tone responds with clarity, respect, and business-focused language.', 'ai-chat-assistant-for-business'), 'Casual' => __('Casual tone responds in a relaxed and easy-to-understand style.', 'ai-chat-assistant-for-business'), 'Witty' => __('Witty tone responds with light humor while staying helpful and relevant.', 'ai-chat-assistant-for-business'), 'Empathetic' => __('Empathetic tone responds with understanding and supportive language.', 'ai-chat-assistant-for-business'), 'Direct' => __('Direct tone responds in a concise, no-nonsense, action-oriented way.', 'ai-chat-assistant-for-business'), ]; $current_tone = $options['tone'] ?? 'Friendly'; $current_greeting = $options['initial_greeting'] ?? __('Hi there! How can I help you today?', 'ai-chat-assistant-for-business'); ?>