PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.6.0
GiveWP – Donation Plugin and Fundraising Platform v2.6.0
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / includes / admin / tools / logs / class-api-requests-logs-list-table.php
give / includes / admin / tools / logs Last commit date
class-api-requests-logs-list-table.php 7 years ago class-gateway-error-logs-list-table.php 7 years ago class-spam-logs-list-table.php 6 years ago class-update-logs-list-table.php 7 years ago logs.php 6 years ago
class-api-requests-logs-list-table.php
387 lines
1 <?php
2 /**
3 * API Requests Log View Class
4 *
5 * @package Give
6 * @subpackage Admin/Reports
7 * @copyright Copyright (c) 2016, GiveWP
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 1.0
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 // Load WP_List_Table if not loaded
18 if ( ! class_exists( 'WP_List_Table' ) ) {
19 require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
20 }
21
22 /**
23 * Give_API_Request_Log_Table List Table Class
24 *
25 * Renders the gateway errors list table
26 *
27 * @since 1.0
28 */
29 class Give_API_Request_Log_Table extends WP_List_Table {
30 /**
31 * Number of items per page
32 *
33 * @var int
34 * @since 1.0
35 */
36 public $per_page = 30;
37
38 /**
39 * Get things started
40 *
41 * @since 1.0
42 * @see WP_List_Table::__construct()
43 */
44 public function __construct() {
45 global $status, $page;
46
47 // Set parent defaults
48 parent::__construct( array(
49 'singular' => give_get_forms_label_singular(), // Singular name of the listed records
50 'plural' => give_get_forms_label_plural(), // Plural name of the listed records
51 'ajax' => false,// Does this table support ajax?
52 ) );
53 }
54
55 /**
56 * Show the search field
57 *
58 * @since 1.0
59 * @access public
60 *
61 * @param string $text Label for the search box
62 * @param string $input_id ID of the search box
63 *
64 * @return void
65 */
66 public function search_box( $text, $input_id ) {
67 $input_id = $input_id . '-search-input';
68
69 if ( ! empty( $_REQUEST['orderby'] ) ) {
70 echo '<input type="hidden" name="orderby" value="' . esc_attr( $_REQUEST['orderby'] ) . '" />';
71 }
72 if ( ! empty( $_REQUEST['order'] ) ) {
73 echo '<input type="hidden" name="order" value="' . esc_attr( $_REQUEST['order'] ) . '" />';
74 }
75 ?>
76 <p class="search-box" role="search">
77 <label class="screen-reader-text" for="<?php echo $input_id ?>"><?php echo $text; ?>:</label>
78 <input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>"/>
79 <?php submit_button( $text, 'button', false, false, array( 'ID' => 'search-submit' ) ); ?>
80 </p>
81 <?php
82 }
83
84 /**
85 * Retrieve the table columns
86 *
87 * @access public
88 * @since 1.0
89 *
90 * @return array $columns Array of all the list table columns
91 */
92 public function get_columns() {
93 $columns = array(
94 'ID' => __( 'Log ID', 'give' ),
95 'ip' => __( 'Request IP', 'give' ),
96 'date' => __( 'Date', 'give' ),
97 'details' => __( 'Request Details', 'give' ),
98 );
99
100 return $columns;
101 }
102
103 /**
104 * This function renders most of the columns in the list table.
105 *
106 * @access public
107 * @since 1.0
108 *
109 * @param array $item Contains all the data of the discount code
110 * @param string $column_name The name of the column
111 *
112 * @return string Column Name
113 */
114 public function column_default( $item, $column_name ) {
115 switch ( $column_name ) {
116 default:
117 return esc_attr( $item[ $column_name ] );
118 }
119 }
120
121 /**
122 * Output Error Message column
123 *
124 * @access public
125 * @since 1.0
126 *
127 * @param array $item Contains all the data of the log
128 *
129 * @return void
130 */
131 public function column_details( $item ) {
132 echo Give()->tooltips->render_link( array(
133 'label' => __( 'View Request', 'give' ),
134 'tag_content' => '<span class="dashicons dashicons-visibility"></span>',
135 'link' => "#TB_inline?width=640&amp;inlineId=log-details-{$item['ID']}",
136 'attributes' => array(
137 'class' => 'thickbox give-error-log-details-link button button-small',
138 ),
139 ) );
140 ?>
141 <div id="log-details-<?php echo $item['ID']; ?>" style="display:none;">
142 <?php
143 // Print API Request.
144 echo sprintf(
145 '<p><strong>%1$s</strong></p><div>%2$s</div>',
146 __( 'API Request:', 'give' ),
147 Give()->logs->logmeta_db->get_meta( $item['ID'], '_give_log_api_query', true )
148 );
149
150 // Print Log Content, if not empty.
151 if ( ! empty( $item['log_content'] ) ) {
152 echo sprintf(
153 '<p><strong>%1$s</strong></p><div>%2$s</div>',
154 __( 'Error', 'give' ),
155 esc_html( $item['log_content'] )
156 );
157 }
158
159 // Print User who requested data using API.
160 echo sprintf(
161 '<p><strong>%1$s</strong></p><div>%2$s</div>',
162 __( 'API User:', 'give' ),
163 Give()->logs->logmeta_db->get_meta( $item['ID'], '_give_log_user', true )
164 );
165
166 // Print the logged key used by API.
167 echo sprintf(
168 '<p><strong>%1$s</strong></p><div>%2$s</div>',
169 __( 'API Key:', 'give' ),
170 Give()->logs->logmeta_db->get_meta( $item['ID'], '_give_log_key', true )
171 );
172
173 // Print the API Request Date.
174 echo sprintf(
175 '<p><strong>%1$s</strong></p><div>%2$s</div>',
176 __( 'Request Date:', 'give' ),
177 $item['log_date']
178 );
179 ?>
180 </div>
181 <?php
182 }
183
184 /**
185 * Retrieves the search query string
186 *
187 * @access public
188 * @since 1.0
189 *
190 * @return string|bool String if search is present, false otherwise
191 */
192 public function get_search() {
193 return ! empty( $_GET['s'] ) ? urldecode( trim( $_GET['s'] ) ) : false;
194 }
195
196
197 /**
198 * Display Tablenav (extended)
199 *
200 * Display the table navigation above or below the table even when no items in the logs, so nav doesn't disappear
201 *
202 * @see : https://github.com/impress-org/give/issues/564
203 *
204 * @since 1.4.1
205 * @access protected
206 *
207 * @param string $which
208 */
209 protected function display_tablenav( $which ) {
210 if ( 'top' === $which ) {
211 wp_nonce_field( 'bulk-' . $this->_args['plural'] );
212 }
213 ?>
214 <div class="tablenav <?php echo esc_attr( $which ); ?>">
215
216 <div class="alignleft actions bulkactions">
217 <?php $this->bulk_actions( $which ); ?>
218 </div>
219 <?php
220 $this->extra_tablenav( $which );
221 $this->pagination( $which );
222 ?>
223
224 <br class="clear"/>
225 </div>
226 <?php
227 }
228
229 /**
230 * Gets the meta query for the log query
231 *
232 * This is used to return log entries that match our search query
233 *
234 * @access public
235 * @since 1.0
236 *
237 * @return array $meta_query
238 */
239 function get_meta_query() {
240
241 $meta_query = array();
242 $search = $this->get_search();
243
244 if ( $search ) {
245 if ( filter_var( $search, FILTER_VALIDATE_IP ) ) {
246
247 // This is an IP address search.
248 $key = '_give_log_request_ip';
249
250 } elseif ( is_email( $search ) ) {
251
252 // This is an email search.
253 $userdata = get_user_by( 'email', $search );
254
255 if ( $userdata ) {
256 $search = $userdata->ID;
257 }
258
259 $key = '_give_log_user';
260
261 } elseif ( 32 === strlen( $search ) ) {
262
263 // Look for an API key.
264 $key = '_give_log_key';
265
266 } elseif ( stristr( $search, 'token:' ) ) {
267
268 // Look for an API token.
269 $search = str_ireplace( 'token:', '', $search );
270 $key = '_give_log_token';
271
272 } else {
273
274 // This is (probably) a user ID search.
275 $userdata = get_userdata( $search );
276
277 if ( $userdata ) {
278 $search = $userdata->ID;
279 }
280
281 $key = '_give_log_user';
282
283 }
284
285 // Setup the meta query.
286 $meta_query[] = array(
287 'key' => $key,
288 'value' => $search,
289 'compare' => '=',
290 );
291 }
292
293 return $meta_query;
294 }
295
296 /**
297 * Retrieve the current page number
298 *
299 * @access public
300 * @since 1.0
301 *
302 * @return int Current page number
303 */
304 public function get_paged() {
305 return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
306 }
307
308 /**
309 * Outputs the log views
310 *
311 * @param string $which Top or Bottom.
312 *
313 * @access public
314 * @since 1.0
315 *
316 * @return void
317 */
318 function bulk_actions( $which = '' ) {
319 give_log_views();
320 }
321
322 /**
323 * Gets the log entries for the current view
324 *
325 * @access public
326 * @since 1.0
327 *
328 * @return array $logs_data Array of all the Log entires
329 */
330 public function get_logs() {
331 $logs_data = array();
332 $paged = $this->get_paged();
333 $log_query = array(
334 'log_type' => 'api_request',
335 'paged' => $paged,
336 'meta_query' => $this->get_meta_query(),
337 'posts_per_page' => $this->per_page,
338 );
339
340 $logs = Give()->logs->get_connected_logs( $log_query );
341
342 if ( $logs ) {
343 foreach ( $logs as $log ) {
344
345 $logs_data[] = array(
346 'ID' => $log->ID,
347 'ip' => Give()->logs->logmeta_db->get_meta( $log->ID, '_give_log_request_ip', true ),
348 'date' => $log->log_date,
349 'log_content' => $log->log_content,
350 'log_date' => $log->log_date,
351 );
352 }
353 }
354
355 return $logs_data;
356 }
357
358 /**
359 * Setup the final data for the table
360 *
361 * @access public
362 * @since 1.0
363 * @uses Give_API_Request_Log_Table::get_columns()
364 * @uses WP_List_Table::get_sortable_columns()
365 * @uses Give_API_Request_Log_Table::get_pagenum()
366 * @uses Give_API_Request_Log_Table::get_logs()
367 * @uses Give_API_Request_Log_Table::get_log_count()
368 *
369 * @return void
370 */
371 public function prepare_items() {
372 $columns = $this->get_columns();
373 $hidden = array(); // No hidden columns
374 $sortable = $this->get_sortable_columns();
375 $this->_column_headers = array( $columns, $hidden, $sortable );
376 $this->items = $this->get_logs();
377 $total_items = Give()->logs->get_log_count( 0, 'api_request', $this->get_meta_query() );
378
379 $this->set_pagination_args( array(
380 'total_items' => $total_items,
381 'per_page' => $this->per_page,
382 'total_pages' => ceil( $total_items / $this->per_page ),
383 )
384 );
385 }
386 }
387