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