PluginProbe
WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services / 3.2.9
WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services v3.2.9
8.7.7 8.7.6 8.7.5 8.7.4 8.7.3 8.7.2 8.7.1 8.7.0 8.6.9 8.6.8 8.6.7 8.6.6 8.6.5 8.6.4 8.6.2 8.6.1 8.6.0 8.5.9 8.5.8 8.5.7 8.5.6 8.5.5 8.5.4 8.5.3 8.5.2 All 533 releases
← All changes | includes/class-response-list.php +44 -98 8.5.33.2.9 View file →
@@ -1,6 +1,5 @@
1 1 <?php
2 -if (!defined('ABSPATH')) exit; // Exit if accessed directly
3 2 if ( ! class_exists( 'WP_List_Table' ) ) {
4 3 require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
5 4 }
6 5
@@ -11,10 +10,10 @@
11 10 /** Class constructor */
12 11 public function __construct() {
13 12
14 13 parent::__construct( [
15 - 'singular' => __( 'Response', 'chatbot' ), //singular name of the listed records
16 - 'plural' => __( 'Responses', 'chatbot' ), //plural name of the listed records
14 + 'singular' => __( 'Response', 'wpchatbot' ), //singular name of the listed records
15 + 'plural' => __( 'Responses', 'wpchatbot' ), //plural name of the listed records
17 16 'ajax' => false //does this table support ajax?
18 17 ] );
19 18
20 19 $this->chatbot_admin_page = admin_url('admin.php?page=simple-text-response');
@@ -30,41 +29,26 @@
30 29 *
31 30 * @return mixed
32 31 */
33 32 public static function get_responses( $per_page = 5, $page_number = 1 ) {
33 +
34 34 global $wpdb;
35 35
36 - // Default order by and order
37 - $orderby = 'id';
38 - $order = 'DESC';
36 + $sql = "SELECT * FROM {$wpdb->prefix}wpbot_response";
39 37
40 - // Allow sorting by column and order if provided and valid
41 38 if ( ! empty( $_REQUEST['orderby'] ) ) {
42 - // Whitelist allowed columns to prevent SQL injection
43 - $allowed = array( 'id', 'intent', 'response', 'type' );
44 - $orderby_request = esc_sql( wp_unslash($_REQUEST['orderby']) );
45 - if ( in_array( $orderby_request, $allowed ) ) {
46 - $orderby = $orderby_request;
47 - }
39 + $sql .= ' ORDER BY ' . esc_sql( $_REQUEST['orderby'] );
40 + $sql .= ! empty( $_REQUEST['order'] ) ? ' ' . esc_sql( $_REQUEST['order'] ) : ' ASC';
48 41 }
49 - if ( ! empty( $_REQUEST['order'] ) ) {
50 - $order_request = strtoupper( esc_sql( wp_unslash($_REQUEST['order']) ) );
51 - if ( in_array( $order_request, array( 'ASC', 'DESC' ) ) ) {
52 - $order = $order_request;
53 - }
54 - }
55 42
56 - $offset = ( $page_number - 1 ) * $per_page;
43 + $sql .= " LIMIT $per_page";
44 + $sql .= ' OFFSET ' . ( $page_number - 1 ) * $per_page;
57 45
58 - // Build the SQL query with validated orderby and order
59 - $sql = $wpdb->prepare(
60 - "SELECT * FROM {$wpdb->prefix}wpbot_response ORDER BY $orderby $order LIMIT %d OFFSET %d",
61 - $per_page,
62 - $offset
63 - );
64 46
65 - $result = $wpdb->get_results( $sql, 'ARRAY_A' ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter
47 + $result = $wpdb->get_results( $sql, 'ARRAY_A' );
66 48
49 +
50 +
67 51 return $result;
68 52 }
69 53
70 54
@@ -75,14 +59,13 @@
75 59 */
76 60 public static function delete_response( $id ) {
77 61 global $wpdb;
78 62
79 - $wpdb->delete( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
63 + $wpdb->delete(
80 64 "{$wpdb->prefix}wpbot_response",
81 65 [ 'id' => $id ],
82 66 [ '%d' ]
83 67 );
84 -
85 68 }
86 69
87 70
88 71 /**
@@ -94,15 +77,15 @@
94 77 global $wpdb;
95 78
96 79 $sql = "SELECT COUNT(*) FROM {$wpdb->prefix}wpbot_response";
97 80
98 - return $wpdb->get_var( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared
81 + return $wpdb->get_var( $sql );
99 82 }
100 83
101 84
102 85 /** Text displayed when no customer data is available */
103 86 public function no_items() {
104 - esc_html_e( 'No responses avaliable.', 'chatbot' );
87 + _e( 'No responses avaliable.', 'wpchatbot' );
105 88 }
106 89
107 90
108 91 /**
@@ -115,37 +98,18 @@
115 98 */
116 99 public function column_default( $item, $column_name ) {
117 100
118 101
119 -
120 -
121 - if(class_exists('Qcld_str_pro')){
122 - switch ( $column_name ) {
123 - case 'query':
124 - case 'keyword':
125 - case 'intent':
126 - case 'category':
127 - return $item[ $column_name ];
128 -
129 - case 'responses':
130 - return $item[ 'response' ];
131 - default:
132 - return print_r( $item, true ); //Show the whole array for troubleshooting purposes
133 - }
134 - }else{
135 - switch ( $column_name ) {
136 - case 'query':
137 - case 'keyword':
138 - case 'intent':
139 - return $item[ $column_name ];
140 -
141 - case 'responses':
142 - return $item[ 'response' ];
143 - default:
144 - return print_r( $item, true ); //Show the whole array for troubleshooting purposes
145 - }
102 + switch ( $column_name ) {
103 + case 'query':
104 + case 'keyword':
105 + return $item[ $column_name ];
106 +
107 + case 'responses':
108 + return $item[ 'response' ];
109 + default:
110 + return print_r( $item, true ); //Show the whole array for troubleshooting purposes
146 111 }
147 -
148 112 }
149 113
150 114 /**
151 115 * Render the bulk edit checkbox
@@ -173,12 +137,12 @@
173 137 $delete_nonce = wp_create_nonce( 'wp_delete_query' );
174 138 $edit_nonce = wp_create_nonce( 'wp_edit_query' );
175 139
176 140 $title = '<strong>' . $item['query'] . '</strong>';
177 -// var_dump($title);
141 +
178 142 $actions = [
179 - 'edit' => sprintf( '<a href="?page=%s&action=%s&query=%s&_wpnonce=%s">Edit</a>', esc_attr(wp_unslash($_REQUEST['page'])), 'edit', absint( $item['id'] ), $edit_nonce ),
180 - 'delete' => sprintf( '<a href="?page=%s&action=%s&query=%s&_wpnonce=%s">Delete</a>', esc_attr(wp_unslash($_REQUEST['page'])), 'delete', absint( $item['id'] ), $delete_nonce )
143 + 'edit' => sprintf( '<a href="?page=%s&action=%s&query=%s&_wpnonce=%s">Edit</a>', esc_attr( $_REQUEST['page'] ), 'edit', absint( $item['id'] ), $edit_nonce ),
144 + 'delete' => sprintf( '<a href="?page=%s&action=%s&query=%s&_wpnonce=%s">Delete</a>', esc_attr( $_REQUEST['page'] ), 'delete', absint( $item['id'] ), $delete_nonce )
181 145 ];
182 146
183 147 return $title . $this->row_actions( $actions );
184 148 }
@@ -189,30 +153,16 @@
189 153 *
190 154 * @return array
191 155 */
192 156 function get_columns() {
193 -
194 -
195 - if(class_exists('Qcld_str_pro')){
196 - $columns = [
197 - 'cb' => '<input type="checkbox" />',
198 - 'query' => __( 'Query', 'chatbot' ),
199 - 'keyword' => __( 'Keyword', 'chatbot' ),
200 - 'responses' => __( 'Response', 'chatbot' ),
201 - 'intent'=> __( 'Intent', 'chatbot' ),
202 - 'category'=> __( 'Category', 'chatbot' ),
203 -
204 - ];
205 - }else{
206 - $columns = [
207 - 'cb' => '<input type="checkbox" />',
208 - 'query' => __( 'Query', 'chatbot' ),
209 - 'keyword' => __( 'Keyword', 'chatbot' ),
210 - 'responses' => __( 'Response', 'chatbot' ),
211 - 'intent'=> __( 'Intent', 'chatbot' ),
212 -
213 - ];
214 - }
157 + $columns = [
158 + 'cb' => '<input type="checkbox" />',
159 + 'query' => __( 'Query', 'wpchatbot' ),
160 + 'keyword' => __( 'Keyword', 'wpchatbot' ),
161 + 'responses' => __( 'Response', 'wpchatbot' ),
162 +
163 +
164 + ];
215 165
216 166 return $columns;
217 167 }
218 168
@@ -252,14 +202,10 @@
252 202 $this->_column_headers = $this->get_column_info();
253 203
254 204 /** Process bulk action */
255 205 $this->process_bulk_action();
256 - if( !empty($_POST['wp_screen_options'] )){
257 - $per_page = (int)$_POST['wp_screen_options']["value"];
258 - }else{
259 - $per_page = $this->get_items_per_page( 'responses_per_page' );
260 -
261 - }
206 +
207 + $per_page = $this->get_items_per_page( 'responses_per_page', 5 );
262 208 $current_page = $this->get_pagenum();
263 209 $total_items = self::record_count();
264 210
265 211 $this->set_pagination_args( [
@@ -277,30 +223,30 @@
277 223 //Detect when a bulk action is being triggered...
278 224 if ( 'delete' === $this->current_action() ) {
279 225
280 226 // In our file that handles the request, verify the nonce.
281 - $nonce = esc_attr(wp_unslash($_REQUEST['_wpnonce']));
227 + $nonce = esc_attr( $_REQUEST['_wpnonce'] );
282 228
283 229 if ( ! wp_verify_nonce( $nonce, 'wp_delete_query' ) ) {
284 230 die( 'Go get a life script kiddies' );
285 231 }
286 232 else {
287 - self::delete_response( absint( wp_unslash($_GET['query']) ) );
233 + self::delete_response( absint( $_GET['query'] ) );
288 234
289 235 // esc_url_raw() is used to prevent converting ampersand in url to "#038;"
290 236 // add_query_arg() return the current url
291 - //wp_redirect( esc_url_raw($this->chatbot_admin_page) );
292 - //exit;
237 + wp_redirect( esc_url_raw($this->chatbot_admin_page) );
238 + exit;
293 239 }
294 240
295 241 }
296 242
297 243 // If the delete bulk action is triggered
298 - if ( ( isset($_POST['action']) && wp_unslash($_POST['action']) == 'bulk-delete' )
299 - || ( isset($_POST['action2']) && wp_unslash($_POST['action2']) == 'bulk-delete' )
244 + if ( ( isset( $_POST['action'] ) && $_POST['action'] == 'bulk-delete' )
245 + || ( isset( $_POST['action2'] ) && $_POST['action2'] == 'bulk-delete' )
300 246 ) {
301 247
302 - $delete_ids = esc_sql( wp_unslash($_POST['bulk-delete']) );
248 + $delete_ids = esc_sql( $_POST['bulk-delete'] );
303 249
304 250
305 251 // loop over the array of record IDs and delete them
306 252 foreach ( $delete_ids as $id ) {
@@ -309,10 +255,10 @@
309 255 }
310 256
311 257 // esc_url_raw() is used to prevent converting ampersand in url to "#038;"
312 258 // add_query_arg() return the current url
313 - wp_safe_redirect( esc_url_raw($this->chatbot_admin_page) );
259 + wp_redirect( esc_url_raw($this->chatbot_admin_page) );
314 260 exit;
315 261 }
316 262 }
317 263
318 264 }