prefix . 'wpaic_conversations'; // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery, PluginCheck.Security.DirectDB.UnescapedDBParameter $wpdb->query("TRUNCATE TABLE $table_name"); add_settings_error('wpaic_messages', 'wpaic_message', __('All conversations deleted.', 'aiy-sales-chat'), 'updated'); } if (isset($_POST['wpaic_delete_id']) && check_admin_referer('wpaic_delete_nonce')) { global $wpdb; $table_name = $wpdb->prefix . 'wpaic_conversations'; $id = intval($_POST['wpaic_delete_id']); // phpcs:ignore WordPress.DB.DirectDatabaseQuery $wpdb->delete($table_name, array('id' => $id)); add_settings_error('wpaic_messages', 'wpaic_message', __('Conversation deleted.', 'aiy-sales-chat'), 'updated'); } } public function render_logs_page() { global $wpdb; $table_name = $wpdb->prefix . 'wpaic_conversations'; // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery, PluginCheck.Security.DirectDB.UnescapedDBParameter $logs = $wpdb->get_results("SELECT * FROM $table_name ORDER BY created_at DESC LIMIT 100"); ?>

render_dashboard_tab(); } else { $this->render_logs_tab($logs); } ?>
prefix . 'wpaic_conversations'; // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery, PluginCheck.Security.DirectDB.UnescapedDBParameter $total_convos = $wpdb->get_var("SELECT COUNT(*) FROM $table_name"); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery, PluginCheck.Security.DirectDB.UnescapedDBParameter $today_convos = $wpdb->get_var("SELECT COUNT(*) FROM $table_name WHERE DATE(created_at) = CURDATE()"); // Assuming we log triggers in context sometime // $triggers = $wpdb->get_var("SELECT COUNT(*) FROM $table_name WHERE context LIKE '%trigger%'"); ?>

Total Conversations

Conversations Today

Pro Triggers Active

get_var($wpdb->prepare("SHOW TABLES LIKE %s", $wpdb->esc_like($table_name))) === $table_name ? 'OK' : 'MISSING'; $db_color = $db_status === 'OK' ? '#27ae60' : '#d63638'; ?>

Database Status

Example chart placeholder - In a real App we would use Chart.js here.

created_at); ?> message); ?> reply); ?>
context, true);
                                        // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
                                        echo $ctx ? esc_html(print_r($ctx, true)) : esc_html__('No context', 'aiy-sales-chat');
                                        ?>