From e74fc79765e66878fd54a8b339773befe974b271 Mon Sep 17 00:00:00 2001 From: kodinkat Date: Thu, 16 Oct 2025 17:12:35 +0100 Subject: [PATCH 1/3] Enhance AI settings in DT_Multisite_Tab_AI - Added support for selecting LLM providers and their respective chat and transcript paths in the settings form. - Updated JavaScript to dynamically populate chat and transcript paths based on the selected provider. - Improved form structure for better clarity between chat and transcription model configurations. --- includes/tab-ai.php | 189 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 185 insertions(+), 4 deletions(-) diff --git a/includes/tab-ai.php b/includes/tab-ai.php index 5a77c31..965193b 100644 --- a/includes/tab-ai.php +++ b/includes/tab-ai.php @@ -39,9 +39,13 @@ public function process_post() { && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['ai_nonce'] ) ), 'ai' ) ) { $settings = [ + 'llm_provider' => sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_providers'] ?? 'predictionguard' ) ), + 'llm_provider_chat_path' => sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_provider_chat_paths'] ?? 'chat_complete' ) ), 'llm_endpoint' => sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_endpoint'] ?? '' ) ), 'llm_api_key' => sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_api_key'] ?? '' ) ), 'llm_model' => sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_model'] ?? '' ) ), + 'transcript_llm_provider' => sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_providers'] ?? 'predictionguard' ) ), + 'transcript_llm_provider_transcript_path' => sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_provider_transcript_paths'] ?? 'audio_transcript' ) ), 'transcript_llm_endpoint' => sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_endpoint'] ?? '' ) ), 'transcript_llm_api_key' => sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_api_key'] ?? '' ) ), 'transcript_llm_model' => sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_model'] ?? '' ) ) @@ -63,14 +67,26 @@ public function process_post() { public function list_keys( $processed ){ $network_settings = get_site_option( 'DT_AI_connection_settings', [ + 'llm_provider' => 'predictionguard', + 'llm_provider_chat_path' => 'chat_complete', 'llm_endpoint' => '', 'llm_api_key' => '', 'llm_model' => '', + 'transcript_llm_provider' => 'predictionguard', + 'transcript_llm_provider_transcript_path' => 'audio_transcript', 'transcript_llm_endpoint' => '', 'transcript_llm_api_key' => '', 'transcript_llm_model' => '' ] ); + $ai_providers = apply_filters( 'dt_ai_providers', [] ); + + $selected_ai_provider = $network_settings['llm_provider'] ?? 'predictionguard'; + $selected_ai_provider_chat_path = $network_settings['llm_provider_chat_path'] ?? 'chat_complete'; + + $selected_ai_transcript_provider = $network_settings['transcript_llm_provider'] ?? 'predictionguard'; + $selected_ai_transcript_provider_chat_path = $network_settings['transcript_llm_provider_transcript_path'] ?? 'audio_transcript'; + if ( isset( $processed['is_update'], $processed['updated'] ) && $processed['is_update'] ) { ?>
@@ -91,12 +107,44 @@ public function list_keys( $processed ){ + + + Provider + + + + + Endpoint - + + + @@ -112,7 +160,7 @@ public function list_keys( $processed ){ Model - + @@ -132,12 +180,44 @@ public function list_keys( $processed ){ + + + Provider + + + + + Endpoint - + + + @@ -153,7 +233,7 @@ public function list_keys( $processed ){ Model - + @@ -167,6 +247,107 @@ public function list_keys( $processed ){
+ Date: Fri, 17 Oct 2025 11:07:49 +0100 Subject: [PATCH 2/3] Refactor selection logic in DT_Multisite_Tab_AI - Standardized spacing in conditional statements for better readability. - Ensured consistent formatting for selected options in chat and transcript provider dropdowns. --- includes/tab-ai.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/includes/tab-ai.php b/includes/tab-ai.php index 965193b..c087d6b 100644 --- a/includes/tab-ai.php +++ b/includes/tab-ai.php @@ -118,7 +118,7 @@ public function list_keys( $processed ){ // Exclude providers with no valid paths. if ( !empty( $provider['paths']['chat'] ) ) { - $selected = ($selected_ai_provider == $provider_key) ? 'selected="selected"' : ''; + $selected = ( $selected_ai_provider == $provider_key ) ? 'selected="selected"' : ''; ?> $path ) { - $selected = ($selected_ai_provider_chat_path == $path_key) ? 'selected="selected"' : ''; + $selected = ( $selected_ai_provider_chat_path == $path_key ) ? 'selected="selected"' : ''; ?> $path ) { - $selected = ($selected_ai_transcript_provider_chat_path == $path_key) ? 'selected="selected"' : ''; + $selected = ( $selected_ai_transcript_provider_chat_path == $path_key ) ? 'selected="selected"' : ''; ?> Date: Thu, 13 Nov 2025 14:51:26 +0100 Subject: [PATCH 3/3] Placeholder and required field --- includes/tab-ai.php | 192 ++++++++++++++++++++++++++++++++------------ 1 file changed, 142 insertions(+), 50 deletions(-) diff --git a/includes/tab-ai.php b/includes/tab-ai.php index c087d6b..d73c922 100644 --- a/includes/tab-ai.php +++ b/includes/tab-ai.php @@ -34,24 +34,62 @@ public function content(){ } public function process_post() { - // update - if ( isset( $_POST['ai_nonce'] ) - && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['ai_nonce'] ) ), 'ai' ) ) { - - $settings = [ - 'llm_provider' => sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_providers'] ?? 'predictionguard' ) ), - 'llm_provider_chat_path' => sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_provider_chat_paths'] ?? 'chat_complete' ) ), - 'llm_endpoint' => sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_endpoint'] ?? '' ) ), - 'llm_api_key' => sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_api_key'] ?? '' ) ), - 'llm_model' => sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_model'] ?? '' ) ), - 'transcript_llm_provider' => sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_providers'] ?? 'predictionguard' ) ), - 'transcript_llm_provider_transcript_path' => sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_provider_transcript_paths'] ?? 'audio_transcript' ) ), - 'transcript_llm_endpoint' => sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_endpoint'] ?? '' ) ), - 'transcript_llm_api_key' => sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_api_key'] ?? '' ) ), - 'transcript_llm_model' => sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_model'] ?? '' ) ) + // Process Chat Model Form + $ai_chat_nonce_verified = isset( $_POST['ai_chat_nonce'] ) + && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['ai_chat_nonce'] ) ), 'ai_chat' ); + + $ai_transcript_nonce_verified = isset( $_POST['ai_transcript_nonce'] ) + && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['ai_transcript_nonce'] ) ), 'ai_transcript' ); + + if ( !$ai_chat_nonce_verified && !$ai_transcript_nonce_verified ) { + return [ + 'is_update' => false, + 'updated' => false ]; + } + // Get current settings fresh from database + $current_settings = get_site_option( 'DT_AI_connection_settings', [ + 'llm_provider' => '', + 'llm_provider_chat_path' => '', + 'llm_endpoint' => '', + 'llm_api_key' => '', + 'llm_model' => '', + 'transcript_llm_provider' => '', + 'transcript_llm_provider_transcript_path' => '', + 'transcript_llm_endpoint' => '', + 'transcript_llm_api_key' => '', + 'transcript_llm_model' => '' + ] ); + + if ( $ai_chat_nonce_verified ) { + + + $updated_settings = $current_settings; + $updated_settings['llm_provider'] = sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_providers'] ?? '' ) ); + $updated_settings['llm_provider_chat_path'] = sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_provider_chat_paths'] ?? '' ) ); + $updated_settings['llm_endpoint'] = sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_endpoint'] ?? '' ) ); + $updated_settings['llm_api_key'] = sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_api_key'] ?? '' ) ); + $updated_settings['llm_model'] = sanitize_text_field( wp_unslash( $_POST['dt_ai_llm_model'] ?? '' ) ); + + update_site_option( 'DT_AI_connection_settings', $updated_settings ); + + return [ + 'is_update' => true, + 'updated' => true + ]; + } + + // Process Transcription Model Form + if ( $ai_transcript_nonce_verified ) { + + $updated_settings = $current_settings; + $updated_settings['transcript_llm_provider'] = sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_providers'] ?? '' ) ); + $updated_settings['transcript_llm_provider_transcript_path'] = sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_provider_transcript_paths'] ?? '' ) ); + $updated_settings['transcript_llm_endpoint'] = sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_endpoint'] ?? '' ) ); + $updated_settings['transcript_llm_api_key'] = sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_api_key'] ?? '' ) ); + $updated_settings['transcript_llm_model'] = sanitize_text_field( wp_unslash( $_POST['dt_ai_transcript_llm_model'] ?? '' ) ); - update_site_option( 'DT_AI_connection_settings', $settings ); + update_site_option( 'DT_AI_connection_settings', $updated_settings ); return [ 'is_update' => true, @@ -59,21 +97,18 @@ public function process_post() { ]; } - return [ - 'is_update' => false, - 'updated' => false - ]; + return false; } public function list_keys( $processed ){ $network_settings = get_site_option( 'DT_AI_connection_settings', [ - 'llm_provider' => 'predictionguard', - 'llm_provider_chat_path' => 'chat_complete', + 'llm_provider' => '', + 'llm_provider_chat_path' => '', 'llm_endpoint' => '', 'llm_api_key' => '', 'llm_model' => '', - 'transcript_llm_provider' => 'predictionguard', - 'transcript_llm_provider_transcript_path' => 'audio_transcript', + 'transcript_llm_provider' => '', + 'transcript_llm_provider_transcript_path' => '', 'transcript_llm_endpoint' => '', 'transcript_llm_api_key' => '', 'transcript_llm_model' => '' @@ -81,11 +116,11 @@ public function list_keys( $processed ){ $ai_providers = apply_filters( 'dt_ai_providers', [] ); - $selected_ai_provider = $network_settings['llm_provider'] ?? 'predictionguard'; - $selected_ai_provider_chat_path = $network_settings['llm_provider_chat_path'] ?? 'chat_complete'; + $selected_ai_provider = $network_settings['llm_provider'] ?? ''; + $selected_ai_provider_chat_path = $network_settings['llm_provider_chat_path'] ?? ''; - $selected_ai_transcript_provider = $network_settings['transcript_llm_provider'] ?? 'predictionguard'; - $selected_ai_transcript_provider_chat_path = $network_settings['transcript_llm_provider_transcript_path'] ?? 'audio_transcript'; + $selected_ai_transcript_provider = $network_settings['transcript_llm_provider'] ?? ''; + $selected_ai_transcript_provider_chat_path = $network_settings['transcript_llm_provider_transcript_path'] ?? ''; if ( isset( $processed['is_update'], $processed['updated'] ) && $processed['is_update'] ) { ?> @@ -97,9 +132,9 @@ public function list_keys( $processed ){ - -
- + + + @@ -112,13 +147,16 @@ public function list_keys( $processed ){ Provider
- + + + $provider ) { // Exclude providers with no valid paths. if ( !empty( $provider['paths']['chat'] ) ) { - $selected = ( $selected_ai_provider == $provider_key ) ? 'selected="selected"' : ''; + $selected = ( !empty( $selected_ai_provider ) && $selected_ai_provider == $provider_key ) ? 'selected="selected"' : ''; ?> - + + + $path ) { - $selected = ( $selected_ai_provider_chat_path == $path_key ) ? 'selected="selected"' : ''; - ?> - - $path ) { + $selected = ( !empty( $selected_ai_provider_chat_path ) && $selected_ai_provider_chat_path == $path_key ) ? 'selected="selected"' : ''; + ?> + + @@ -166,13 +209,18 @@ public function list_keys( $processed ){
- +
-
+
+
+ + +
+ @@ -185,13 +233,16 @@ public function list_keys( $processed ){ Provider @@ -291,6 +347,24 @@ function updateChatElements(selectedProvider) { if ( aiProvider?.models?.chat && aiProvider.models.chat.length > 0 ) { chatModel.val( aiProvider.models.chat[0] ); } + + } else if ( !selectedProvider ) { + + // Clear existing options + chatPathsSelect.empty(); + + // Add placeholder option + chatPathsSelect.append( + jQuery('') + .attr('value', '') + .attr('disabled', 'disabled') + .attr('selected', 'selected') + .text('--- Please Select Option ---') + ); + + // Clear remaining fields + chatEndpoint.val(''); + chatModel.val(''); } } @@ -339,6 +413,24 @@ function updateTranscriptElements(selectedProvider) { if ( aiProvider?.models?.transcript && aiProvider.models.transcript.length > 0 ) { transcriptModel.val( aiProvider.models.transcript[0] ); } + + } else if ( !selectedProvider ) { + + // Clear existing options + transcriptPathsSelect.empty(); + + // Add placeholder option + transcriptPathsSelect.append( + jQuery('') + .attr('value', '') + .attr('disabled', 'disabled') + .attr('selected', 'selected') + .text('--- Please Select Option ---') + ); + + // Clear remaining fields + transcriptEndpoint.val(''); + transcriptModel.val(''); } }
- + + + $provider ) { // Exclude providers with no valid paths. if ( !empty( $provider['paths']['transcript'] ) ) { - $selected = ( $selected_ai_transcript_provider == $provider_key ) ? 'selected="selected"' : ''; + $selected = ( !empty( $selected_ai_transcript_provider ) && $selected_ai_transcript_provider == $provider_key ) ? 'selected="selected"' : ''; ?> - + + + $path ) { - $selected = ( $selected_ai_transcript_provider_chat_path == $path_key ) ? 'selected="selected"' : ''; - ?> - - $path ) { + $selected = ( !empty( $selected_ai_transcript_provider_chat_path ) && $selected_ai_transcript_provider_chat_path == $path_key ) ? 'selected="selected"' : ''; + ?> + + @@ -239,7 +295,7 @@ public function list_keys( $processed ){
- +