PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.7.2
GiveWP – Donation Plugin and Fundraising Platform v2.7.2
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 / data / class-give-tools-reset-stats.php
give / includes / admin / tools / data Last commit date
class-give-tools-delete-donations.php 6 years ago class-give-tools-delete-import-donors.php 6 years ago class-give-tools-delete-test-donors.php 6 years ago class-give-tools-delete-test-transactions.php 6 years ago class-give-tools-recount-all-stats.php 6 years ago class-give-tools-recount-donor-stats.php 6 years ago class-give-tools-recount-form-stats.php 6 years ago class-give-tools-recount-income.php 6 years ago class-give-tools-recount-single-donor-stats.php 6 years ago class-give-tools-reset-stats.php 6 years ago tools-actions.php 7 years ago
class-give-tools-reset-stats.php
433 lines
1 <?php
2 /**
3 * Recount income and stats
4 *
5 * This class handles batch processing of resetting donations and income stats.
6 *
7 * @subpackage Admin/Tools/Give_Tools_Reset_Stats
8 * @copyright Copyright (c) 2016, GiveWP
9 * @license https://opensource.org/licenses/gpl-license GNU Public License
10 * @since 1.5
11 */
12
13 // Exit if accessed directly.
14 if ( ! defined( 'ABSPATH' ) ) {
15 exit;
16 }
17
18 /**
19 * Give_Tools_Reset_Stats Class
20 *
21 * @since 1.5
22 */
23 class Give_Tools_Reset_Stats extends Give_Batch_Export {
24
25 /**
26 * Our export type. Used for export-type specific filters/actions
27 *
28 * @var string
29 * @since 1.5
30 */
31 public $export_type = '';
32
33 /**
34 * Allows for a non-form batch processing to be run.
35 *
36 * @since 1.5
37 * @var boolean
38 */
39 public $is_void = true;
40
41 /**
42 * Sets the number of items to pull on each step
43 *
44 * @since 1.5
45 * @var integer
46 */
47 public $per_step = 30;
48
49 /**
50 * Constructor.
51 */
52 public function __construct( $_step = 1 ) {
53 parent::__construct( $_step );
54
55 $this->is_writable = true;
56 }
57
58 /**
59 * Get the Export Data
60 *
61 * @access public
62 * @since 1.5
63 * @global object $wpdb Used to query the database using the WordPress
64 * Database API
65 * @return bool $data The data for the CSV file
66 */
67 public function get_data() {
68 global $wpdb;
69
70 $items = $this->get_stored_data( 'give_temp_reset_ids' );
71
72 if ( ! is_array( $items ) ) {
73 return false;
74 }
75
76 $offset = ( $this->step - 1 ) * $this->per_step;
77 $step_items = array_slice( $items, $offset, $this->per_step );
78
79 if ( $step_items ) {
80
81 $step_ids = array(
82 'customers' => array(),
83 'forms' => array(),
84 'other' => array(),
85 );
86
87 foreach ( $step_items as $item ) {
88
89 switch ( $item['type'] ) {
90 case 'customer':
91 $step_ids['customers'][] = $item['id'];
92 break;
93 case 'forms':
94 $step_ids['give_forms'][] = $item['id'];
95 break;
96 default:
97 $item_type = apply_filters( 'give_reset_item_type', 'other', $item );
98 $step_ids[ $item_type ][] = $item['id'];
99 break;
100 }
101 }
102
103 $sql = array();
104 $meta_table = __give_v20_bc_table_details( 'form' );
105
106 foreach ( $step_ids as $type => $ids ) {
107
108 if ( empty( $ids ) ) {
109 continue;
110 }
111
112 $ids = implode( ',', $ids );
113
114 switch ( $type ) {
115 case 'customers':
116 // Delete all the Give related donor and its meta.
117 $sql[] = "DELETE FROM {$wpdb->donors}";
118 $sql[] = "DELETE FROM {$wpdb->donormeta}";
119 break;
120 case 'forms':
121 $sql[] = "UPDATE {$meta_table['name']} SET meta_value = 0 WHERE meta_key = '_give_form_sales' AND {$meta_table['column']['id']} IN ($ids)";
122 $sql[] = "UPDATE {$meta_table['name']} SET meta_value = 0.00 WHERE meta_key = '_give_form_earnings' AND {$meta_table['column']['id']} IN ($ids)";
123 break;
124 case 'other':
125 // Delete main entries of forms and donations exists in posts table.
126 $sql[] = "DELETE FROM {$wpdb->posts} WHERE id IN ($ids)";
127
128 // Delete all the meta rows of form exists in form meta table.
129 $sql[] = "DELETE FROM {$wpdb->formmeta}";
130
131 // Delete all the meta rows of donation exists in donation meta table.
132 $sql[] = "DELETE FROM {$wpdb->prefix}give_donationmeta";
133
134 // Delete all the Give related sequential ordering entries for donations.
135 $sql[] = "DELETE FROM {$wpdb->prefix}give_sequential_ordering WHERE payment_id IN ($ids)";
136
137 // Delete all the Give related comments and its meta.
138 $sql[] = "DELETE FROM {$wpdb->give_comments}";
139 $sql[] = "DELETE FROM {$wpdb->give_commentmeta}";
140
141 // Delete all the Give related logs and its meta.
142 $sql[] = "DELETE FROM {$wpdb->prefix}give_logs";
143 $sql[] = "DELETE FROM {$wpdb->logmeta}";
144
145 // Delete all the Give sessions data.
146 $sql[] = "DELETE FROM {$wpdb->prefix}give_sessions";
147
148 // Delete Give related categories and tags data from taxonomy tables.
149 $sql[] = $wpdb->prepare(
150 "
151 DELETE FROM $wpdb->terms
152 WHERE $wpdb->terms.term_id IN
153 (
154 SELECT $wpdb->term_taxonomy.term_id
155 FROM $wpdb->term_taxonomy
156 WHERE $wpdb->term_taxonomy.taxonomy = %s
157 OR $wpdb->term_taxonomy.taxonomy = %s
158 )
159 ",
160 array( 'give_forms_category', 'give_forms_tag' )
161 );
162
163 $sql[] = $wpdb->prepare(
164 "
165 DELETE FROM $wpdb->term_taxonomy
166 WHERE $wpdb->term_taxonomy.taxonomy = %s
167 OR $wpdb->term_taxonomy.taxonomy = %s
168 ",
169 array( 'give_forms_category', 'give_forms_tag' )
170 );
171
172 break;
173 }
174
175 if ( ! in_array( $type, array( 'customers', 'forms', 'other' ) ) ) {
176 // Allows other types of custom post types to filter on their own post_type
177 // and add items to the query list, for the IDs found in their post type.
178 $sql = apply_filters( "give_reset_add_queries_{$type}", $sql, $ids );
179 }
180 }
181
182 if ( is_array( $sql ) && count( $sql ) > 0 ) {
183 foreach ( $sql as $query ) {
184 $wpdb->query( $query );
185 }
186 }
187
188 return true;
189
190 }// End if().
191
192 return false;
193
194 }
195
196 /**
197 * Return the calculated completion percentage.
198 *
199 * @since 1.5
200 * @return int
201 */
202 public function get_percentage_complete() {
203
204 $items = $this->get_stored_data( 'give_temp_reset_ids' );
205 $total = count( $items );
206
207 $percentage = 100;
208
209 if ( $total > 0 ) {
210 $percentage = ( ( $this->per_step * $this->step ) / $total ) * 100;
211 }
212
213 if ( $percentage > 100 ) {
214 $percentage = 100;
215 }
216
217 return $percentage;
218 }
219
220 /**
221 * Set the properties specific to the payments export.
222 *
223 * @since 1.5
224 *
225 * @param array $request The Form Data passed into the batch processing.
226 */
227 public function set_properties( $request ) {
228 }
229
230 /**
231 * Process a step
232 *
233 * @since 1.5
234 * @return bool
235 */
236 public function process_step() {
237
238 if ( ! $this->can_export() ) {
239 wp_die(
240 esc_html__( 'You do not have permission to reset data.', 'give' ),
241 esc_html__( 'Error', 'give' ),
242 array(
243 'response' => 403,
244 )
245 );
246 }
247
248 $had_data = $this->get_data();
249
250 if ( $had_data ) {
251 $this->done = false;
252
253 return true;
254 } else {
255 update_option( 'give_earnings_total', 0, false );
256 Give_Cache::delete( Give_Cache::get_key( 'give_estimated_monthly_stats' ) );
257
258 $this->delete_data( 'give_temp_reset_ids' );
259
260 $this->done = true;
261 $this->message = esc_html__( 'Donation forms, income, donations counts, and logs successfully reset.', 'give' );
262
263 return false;
264 }
265 }
266
267 /**
268 * Headers
269 */
270 public function headers() {
271 give_ignore_user_abort();
272 }
273
274 /**
275 * Perform the export
276 *
277 * @access public
278 * @since 1.5
279 * @return void
280 */
281 public function export() {
282
283 // Set headers
284 $this->headers();
285
286 give_die();
287 }
288
289 /**
290 * Pre Fetch
291 */
292 public function pre_fetch() {
293
294 if ( $this->step == 1 ) {
295 $this->delete_data( 'give_temp_reset_ids' );
296 }
297
298 $items = get_option( 'give_temp_reset_ids', false );
299
300 if ( false === $items ) {
301 $items = array();
302
303 $give_types_for_reset = array( 'give_forms', 'give_payment' );
304 $give_types_for_reset = apply_filters( 'give_reset_store_post_types', $give_types_for_reset );
305
306 $args = apply_filters(
307 'give_tools_reset_stats_total_args',
308 array(
309 'post_type' => $give_types_for_reset,
310 'post_status' => 'any',
311 'posts_per_page' => - 1,
312 )
313 );
314
315 $posts = get_posts( $args );
316 foreach ( $posts as $post ) {
317 $items[] = array(
318 'id' => (int) $post->ID,
319 'type' => $post->post_type,
320 );
321 }
322
323 $donor_args = array(
324 'number' => - 1,
325 );
326 $donors = Give()->donors->get_donors( $donor_args );
327 foreach ( $donors as $donor ) {
328 $items[] = array(
329 'id' => (int) $donor->id,
330 'type' => 'customer',
331 );
332 }
333
334 // Allow filtering of items to remove with an unassociative array for each item
335 // The array contains the unique ID of the item, and a 'type' for you to use in the execution of the get_data method
336 $items = apply_filters( 'give_reset_items', $items );
337
338 $this->store_data( 'give_temp_reset_ids', $items );
339 }// End if().
340
341 }
342
343 /**
344 * Given a key, get the information from the Database Directly.
345 *
346 * @since 1.5
347 *
348 * @param string $key The option_name
349 *
350 * @return mixed Returns the data from the database.
351 */
352 private function get_stored_data( $key ) {
353 global $wpdb;
354 $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s", $key ) );
355
356 if ( empty( $value ) ) {
357 return false;
358 }
359
360 $maybe_json = json_decode( $value );
361 if ( ! is_null( $maybe_json ) ) {
362 $value = json_decode( $value, true );
363 }
364
365 return (array) $value;
366 }
367
368 /**
369 * Give a key, store the value.
370 *
371 * @since 1.5
372 *
373 * @param string $key The option_name.
374 * @param mixed $value The value to store.
375 *
376 * @return void
377 */
378 private function store_data( $key, $value ) {
379 global $wpdb;
380
381 $value = is_array( $value ) ? wp_json_encode( $value ) : esc_attr( $value );
382
383 $data = array(
384 'option_name' => $key,
385 'option_value' => $value,
386 'autoload' => 'no',
387 );
388
389 $formats = array(
390 '%s',
391 '%s',
392 '%s',
393 );
394
395 $wpdb->replace( $wpdb->options, $data, $formats );
396 }
397
398 /**
399 * Delete an option
400 *
401 * @since 1.5
402 *
403 * @param string $key The option_name to delete
404 *
405 * @return void
406 */
407 private function delete_data( $key ) {
408 global $wpdb;
409 $wpdb->delete(
410 $wpdb->options,
411 array(
412 'option_name' => $key,
413 )
414 );
415 }
416
417 /**
418 * Unset the properties specific to the donors export.
419 *
420 * @since 2.3.0
421 *
422 * @param array $request
423 * @param Give_Batch_Export $export
424 */
425 public function unset_properties( $request, $export ) {
426 if ( $export->done ) {
427 // Delete all the donation ids.
428 $this->delete_data( 'give_temp_reset_ids' );
429 }
430 }
431
432 }
433