PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.0.2
GiveWP – Donation Plugin and Fundraising Platform v2.0.2
4.16.3 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 / class-give-db-logs.php
give / includes Last commit date
admin 8 years ago api 8 years ago deprecated 8 years ago donors 8 years ago emails 8 years ago forms 8 years ago gateways 8 years ago libraries 8 years ago payments 8 years ago actions.php 8 years ago ajax-functions.php 8 years ago class-give-async-process.php 8 years ago class-give-background-updater.php 8 years ago class-give-cache.php 8 years ago class-give-cli-commands.php 8 years ago class-give-cron.php 8 years ago class-give-db-donor-meta.php 8 years ago class-give-db-donors.php 8 years ago class-give-db-form-meta.php 8 years ago class-give-db-logs-meta.php 8 years ago class-give-db-logs.php 8 years ago class-give-db-meta.php 8 years ago class-give-db-payment-meta.php 8 years ago class-give-db.php 8 years ago class-give-donate-form.php 8 years ago class-give-donor.php 8 years ago class-give-email-access.php 8 years ago class-give-gravatars.php 8 years ago class-give-html-elements.php 8 years ago class-give-license-handler.php 8 years ago class-give-logging.php 8 years ago class-give-roles.php 8 years ago class-give-session.php 8 years ago class-give-stats.php 8 years ago class-give-template-loader.php 9 years ago class-give-tooltips.php 8 years ago class-give-translation.php 8 years ago class-notices.php 8 years ago country-functions.php 8 years ago currency-functions.php 8 years ago error-tracking.php 8 years ago filters.php 8 years ago formatting.php 8 years ago import-functions.php 8 years ago install.php 8 years ago login-register.php 8 years ago misc-functions.php 8 years ago plugin-compatibility.php 8 years ago post-types.php 8 years ago price-functions.php 8 years ago process-donation.php 8 years ago scripts.php 8 years ago shortcodes.php 8 years ago template-functions.php 8 years ago user-functions.php 8 years ago
class-give-db-logs.php
395 lines
1 <?php
2 /**
3 * Donors DB
4 *
5 * @package Give
6 * @subpackage Classes/Give_DB_Logs
7 * @copyright Copyright (c) 2016, WordImpress
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 2.0
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Give_DB_Logs Class
19 *
20 * This class is for interacting with the log database table.
21 *
22 * @since 2.0
23 */
24 class Give_DB_Logs extends Give_DB {
25
26 /**
27 * Give_DB_Logs constructor.
28 *
29 * Set up the Give DB Donor class.
30 *
31 * @since 2.0
32 * @access public
33 */
34 public function __construct() {
35 /* @var WPDB $wpdb */
36 global $wpdb;
37
38 $this->table_name = $wpdb->prefix . 'give_logs';
39 $this->primary_key = 'ID';
40 $this->version = '1.0';
41
42 // Install table.
43 $this->register_table();
44
45 }
46
47 /**
48 * Get columns and formats
49 *
50 * @since 2.0
51 * @access public
52 *
53 * @return array Columns and formats.
54 */
55 public function get_columns() {
56 return array(
57 'ID' => '%d',
58 'log_title' => '%s',
59 'log_content' => '%s',
60 'log_parent' => '%d',
61 'log_type' => '%s',
62 'log_date' => '%s',
63 'log_date_gmt' => '%s',
64 );
65 }
66
67 /**
68 * Get default column values
69 *
70 * @since 2.0
71 * @access public
72 *
73 * @return array Default column values.
74 */
75 public function get_column_defaults() {
76 $log_create_date = current_time( 'mysql', 0 );
77 $log_create_date_gmt = get_gmt_from_date( $log_create_date );
78
79 return array(
80 'ID' => 0,
81 'log_title' => '',
82 'log_content' => '',
83 'log_parent' => 0,
84 'log_type' => '',
85 'log_date' => $log_create_date,
86 'log_date_gmt' => $log_create_date_gmt,
87 );
88 }
89
90 /**
91 * Add a log
92 *
93 * @since 2.0
94 * @access public
95 *
96 * @param array $data
97 *
98 * @return bool|int
99 */
100 public function add( $data = array() ) {
101 // Valid table columns.
102 $table_columns = array_keys( $this->get_columns() );
103
104 // Filter data.
105 foreach ( $data as $table_column => $column_data ) {
106 if ( ! in_array( $table_column, $table_columns ) ) {
107 unset( $data[ $table_column ] );
108 }
109 }
110
111 // Set default values.
112 $current_log_data = wp_parse_args( $data, $this->get_column_defaults() );
113
114 // Log parent should be an int.
115 $current_log_data['log_parent'] = absint( $current_log_data['log_parent'] );
116
117 // Get log.
118 $existing_log = $this->get_log_by( $current_log_data['ID'] );
119
120 // Update an existing log.
121 if ( $existing_log ) {
122
123 // Create new log data from existing and new log data.
124 $current_log_data = array_merge( $current_log_data, $existing_log );
125
126 // Update log data.
127 $this->update( $current_log_data['ID'], $current_log_data );
128
129 $log_id = $current_log_data['ID'];
130
131 } else {
132 $log_id = $this->insert( $current_log_data, 'log' );
133 }
134
135 return $log_id;
136 }
137
138
139 /**
140 * Retrieves a single log from the database
141 *
142 * @since 2.0
143 * @access public
144 *
145 * @param int $log_id
146 * @param string $by
147 *
148 * @return bool|null|array
149 */
150 public function get_log_by( $log_id = 0, $by = 'id' ) {
151 /* @var WPDB $wpdb */
152 global $wpdb;
153 $log = null;
154
155 // Make sure $log_id is int.
156 $log_id = absint( $log_id );
157
158 // Bailout.
159 if ( empty( $log_id ) ) {
160 return null;
161 }
162
163 switch ( $by ) {
164 case 'id':
165 $log = $wpdb->get_row(
166 $wpdb->prepare(
167 "SELECT * FROM $this->table_name WHERE ID = %s LIMIT 1",
168 $log_id
169 ),
170 ARRAY_A
171 );
172 break;
173
174 default:
175 $log = apply_filters( "give_get_log_by_{$by}", $log, $log_id );
176 }
177
178 return $log;
179 }
180
181 /**
182 * Retrieve logs from the database.
183 *
184 * @since 2.0
185 * @access public
186 *
187 * @param array $args
188 *
189 * @return mixed
190 */
191 public function get_logs( $args = array() ) {
192 global $wpdb;
193 $sql_query = $this->get_sql( $args );
194
195 // Get log.
196 if ( ! ( $logs = Give_Cache::get( 'give_logs', true, $sql_query ) ) ) {
197 $logs = $wpdb->get_results( $sql_query );
198 Give_Cache::set( 'give_logs', $logs, 3600, true, $sql_query );
199 }
200
201 return $logs;
202 }
203
204
205 /**
206 * Count the total number of logs in the database
207 *
208 * @since 2.0
209 * @access public
210 *
211 * @param array $args
212 *
213 * @return int
214 */
215 public function count( $args = array() ) {
216 /* @var WPDB $wpdb */
217 global $wpdb;
218 $args['number'] = - 1;
219 $args['fields'] = 'ID';
220 $args['count'] = true;
221
222 $sql_query = $this->get_sql( $args );
223
224 if ( ! ( $count = Give_Cache::get( 'give_logs_count', true, $sql_query ) ) ) {
225 $count = $wpdb->get_var( $sql_query );
226 Give_Cache::set( 'give_logs_count', $count, 3600, true, $args );
227 }
228
229 return absint( $count );
230 }
231
232 /**
233 * Create the table
234 *
235 * @since 2.0
236 * @access public
237 *
238 * @return void
239 */
240 public function create_table() {
241 global $wpdb;
242 $charset_collate = $wpdb->get_charset_collate();
243
244 $sql = "CREATE TABLE {$this->table_name} (
245 ID bigint(20) NOT NULL AUTO_INCREMENT,
246 log_title longtext NOT NULL,
247 log_content longtext NOT NULL,
248 log_parent bigint(20) NOT NULL,
249 log_type mediumtext NOT NULL,
250 log_date datetime NOT NULL,
251 log_date_gmt datetime NOT NULL,
252 PRIMARY KEY (ID)
253 ) {$charset_collate};";
254
255 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
256 dbDelta( $sql );
257
258 update_option( $this->table_name . '_db_version', $this->version );
259 }
260
261
262 /**
263 * Get sql query from quaried array.
264 *
265 * @since 2.0
266 * @access public
267 *
268 * @param array $args
269 *
270 * @return string
271 */
272 public function get_sql( $args = array() ) {
273 /* @var WPDB $wpdb */
274 global $wpdb;
275
276 $defaults = array(
277 'number' => 20,
278 'offset' => 0,
279 'paged' => 0,
280 'orderby' => 'date',
281 'order' => 'DESC',
282 'fields' => 'all',
283 'count' => false,
284 );
285
286 $args = wp_parse_args( $args, $defaults );
287
288 // validate params.
289 $this->validate_params( $args );
290
291 if ( $args['number'] < 1 ) {
292 $args['number'] = 99999999999;
293 }
294
295 // Where clause for primary table.
296 $where = '';
297
298 // Get sql query for meta.
299 if ( ! empty( $args['meta_query'] ) ) {
300 $meta_query_object = new WP_Meta_Query( $args['meta_query'] );
301 $meta_query = $meta_query_object->get_sql( 'log', $this->table_name, 'id' );
302 $where = implode( '', $meta_query );
303 }
304
305 $where .= ' WHERE 1=1 ';
306
307 // Set offset.
308 if ( empty( $args['offset'] ) && ( 0 < $args['paged'] ) ) {
309 $args['offset'] = $args['number'] * ( $args['paged'] - 1 );
310 }
311
312 // Set fields.
313 $fields = "{$this->table_name}.*";
314 if ( is_string( $args['fields'] ) && ( 'all' !== $args['fields'] ) ) {
315 $fields = "{$this->table_name}.{$args['fields']}";
316 }
317
318 // Set count.
319 if ( $args['count'] ) {
320 $fields = "COUNT({$fields})";
321 }
322
323 // Specific logs.
324 if ( ! empty( $args['ID'] ) ) {
325
326 if ( ! is_array( $args['ID'] ) ) {
327 $args['ID'] = explode( ',', $args['ID'] );
328 }
329 $log_ids = implode( ',', array_map( 'intval', $args['ID'] ) );
330
331 $where .= " AND {$this->table_name}.ID IN( {$log_ids} ) ";
332 }
333
334 // Logs created for a specific date or in a date range
335 if ( ! empty( $args['date_query'] ) ) {
336 $date_query_object = new WP_Date_Query( $args['date_query'], "{$this->table_name}.log_date" );
337 $where .= $date_query_object->get_sql();
338 }
339
340 // Logs create for specific parent.
341 if ( ! empty( $args['log_parent'] ) ) {
342 if ( ! is_array( $args['log_parent'] ) ) {
343 $args['log_parent'] = explode( ',', $args['log_parent'] );
344 }
345 $parent_ids = implode( ',', array_map( 'intval', $args['log_parent'] ) );
346
347 $where .= " AND {$this->table_name}.log_parent IN( {$parent_ids} ) ";
348 }
349
350 // Logs create for specific type.
351 // is_array check is for backward compatibility.
352 if ( ! empty( $args['log_type'] ) && ! is_array( $args['log_type'] ) ) {
353 if ( ! is_array( $args['log_type'] ) ) {
354 $args['log_type'] = explode( ',', $args['log_type'] );
355 }
356
357 $log_types = implode( '\',\'', array_map( 'trim', $args['log_type'] ) );
358
359 $where .= " AND {$this->table_name}.log_type IN( '{$log_types}' ) ";
360 }
361
362 $args['orderby'] = ! array_key_exists( $args['orderby'], $this->get_columns() ) ? 'log_date' : $args['orderby'];
363
364 $args['orderby'] = esc_sql( $args['orderby'] );
365 $args['order'] = esc_sql( $args['order'] );
366
367 return $wpdb->prepare(
368 "SELECT {$fields} FROM {$this->table_name} {$where} ORDER BY {$this->table_name}.{$args['orderby']} {$args['order']} LIMIT %d,%d;",
369 absint( $args['offset'] ),
370 absint( $args['number'] )
371 );
372 }
373
374
375 /**
376 * Validate query params.
377 *
378 * @since 2.0
379 * @access private
380 *
381 * @param $args
382 *
383 * @return mixed
384 */
385 private function validate_params( &$args ) {
386 // fields params
387 $args['fields'] = 'ids' === $args['fields'] ?
388 'ID' :
389 $args['fields'];
390 $args['fields'] = array_key_exists( $args['fields'], $this->get_columns() ) ?
391 $args['fields'] :
392 'all';
393 }
394 }
395