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 / data / class-give-tools-reset-stats.php
give / includes / admin / tools / data Last commit date
class-give-tools-delete-donations.php 7 years ago class-give-tools-delete-import-donors.php 7 years ago class-give-tools-delete-test-donors.php 7 years ago class-give-tools-delete-test-transactions.php 7 years ago class-give-tools-recount-all-stats.php 6 years ago class-give-tools-recount-donor-stats.php 8 years ago class-give-tools-recount-form-stats.php 6 years ago class-give-tools-recount-income.php 7 years ago class-give-tools-recount-single-donor-stats.php 7 years ago class-give-tools-reset-stats.php 7 years ago tools-actions.php 7 years ago
class-give-tools-reset-stats.php
425 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
117 // Delete all the Give related donor and its meta.
118 $sql[] = "DELETE FROM {$wpdb->donors}";
119 $sql[] = "DELETE FROM {$wpdb->donormeta}";
120 break;
121 case 'forms':
122 $sql[] = "UPDATE {$meta_table['name']} SET meta_value = 0 WHERE meta_key = '_give_form_sales' AND {$meta_table['column']['id']} IN ($ids)";
123 $sql[] = "UPDATE {$meta_table['name']} SET meta_value = 0.00 WHERE meta_key = '_give_form_earnings' AND {$meta_table['column']['id']} IN ($ids)";
124 break;
125 case 'other':
126
127 // Delete main entries of forms and donations exists in posts table.
128 $sql[] = "DELETE FROM {$wpdb->posts} WHERE id IN ($ids)";
129
130 // Delete all the meta rows of form exists in form meta table.
131 $sql[] = "DELETE FROM {$wpdb->formmeta}";
132
133 // Delete all the meta rows of donation exists in donation meta table.
134 $sql[] = "DELETE FROM {$wpdb->prefix}give_donationmeta";
135
136 // Delete all the Give related sequential ordering entries for donations.
137 $sql[] = "DELETE FROM {$wpdb->prefix}give_sequential_ordering WHERE payment_id IN ($ids)";
138
139 // Delete all the Give related comments and its meta.
140 $sql[] = "DELETE FROM {$wpdb->give_comments}";
141 $sql[] = "DELETE FROM {$wpdb->give_commentmeta}";
142
143 // Delete all the Give related logs and its meta.
144 $sql[] = "DELETE FROM {$wpdb->prefix}give_logs";
145 $sql[] = "DELETE FROM {$wpdb->logmeta}";
146
147 // Delete all the Give sessions data.
148 $sql[] = "DELETE FROM {$wpdb->prefix}give_sessions";
149
150 // Delete Give related categories and tags data from taxonomy tables.
151 $sql[] = $wpdb->prepare(
152 "
153 DELETE FROM $wpdb->terms
154 WHERE $wpdb->terms.term_id IN
155 (
156 SELECT $wpdb->term_taxonomy.term_id
157 FROM $wpdb->term_taxonomy
158 WHERE $wpdb->term_taxonomy.taxonomy = %s
159 OR $wpdb->term_taxonomy.taxonomy = %s
160 )
161 ",
162 array( 'give_forms_category', 'give_forms_tag' )
163 );
164
165 $sql[] = $wpdb->prepare(
166 "
167 DELETE FROM $wpdb->term_taxonomy
168 WHERE $wpdb->term_taxonomy.taxonomy = %s
169 OR $wpdb->term_taxonomy.taxonomy = %s
170 ",
171 array( 'give_forms_category', 'give_forms_tag' )
172 );
173
174 break;
175 }
176
177 if ( ! in_array( $type, array( 'customers', 'forms', 'other' ) ) ) {
178 // Allows other types of custom post types to filter on their own post_type
179 // and add items to the query list, for the IDs found in their post type.
180 $sql = apply_filters( "give_reset_add_queries_{$type}", $sql, $ids );
181 }
182 }
183
184 if ( is_array( $sql ) && count( $sql ) > 0 ) {
185 foreach ( $sql as $query ) {
186 $wpdb->query( $query );
187 }
188 }
189
190 return true;
191
192 }// End if().
193
194 return false;
195
196 }
197
198 /**
199 * Return the calculated completion percentage.
200 *
201 * @since 1.5
202 * @return int
203 */
204 public function get_percentage_complete() {
205
206 $items = $this->get_stored_data( 'give_temp_reset_ids' );
207 $total = count( $items );
208
209 $percentage = 100;
210
211 if ( $total > 0 ) {
212 $percentage = ( ( $this->per_step * $this->step ) / $total ) * 100;
213 }
214
215 if ( $percentage > 100 ) {
216 $percentage = 100;
217 }
218
219 return $percentage;
220 }
221
222 /**
223 * Set the properties specific to the payments export.
224 *
225 * @since 1.5
226 *
227 * @param array $request The Form Data passed into the batch processing.
228 */
229 public function set_properties( $request ) {
230 }
231
232 /**
233 * Process a step
234 *
235 * @since 1.5
236 * @return bool
237 */
238 public function process_step() {
239
240 if ( ! $this->can_export() ) {
241 wp_die( esc_html__( 'You do not have permission to reset data.', 'give' ), esc_html__( 'Error', 'give' ), array(
242 'response' => 403,
243 ) );
244 }
245
246 $had_data = $this->get_data();
247
248 if ( $had_data ) {
249 $this->done = false;
250
251 return true;
252 } else {
253 update_option( 'give_earnings_total', 0, false );
254 Give_Cache::delete( Give_Cache::get_key( 'give_estimated_monthly_stats' ) );
255
256 $this->delete_data( 'give_temp_reset_ids' );
257
258 $this->done = true;
259 $this->message = esc_html__( 'Donation forms, income, donations counts, and logs successfully reset.', 'give' );
260
261 return false;
262 }
263 }
264
265 /**
266 * Headers
267 */
268 public function headers() {
269 give_ignore_user_abort();
270 }
271
272 /**
273 * Perform the export
274 *
275 * @access public
276 * @since 1.5
277 * @return void
278 */
279 public function export() {
280
281 // Set headers
282 $this->headers();
283
284 give_die();
285 }
286
287 /**
288 * Pre Fetch
289 */
290 public function pre_fetch() {
291
292 if ( $this->step == 1 ) {
293 $this->delete_data( 'give_temp_reset_ids' );
294 }
295
296 $items = get_option( 'give_temp_reset_ids', false );
297
298 if ( false === $items ) {
299 $items = array();
300
301 $give_types_for_reset = array( 'give_forms', 'give_payment' );
302 $give_types_for_reset = apply_filters( 'give_reset_store_post_types', $give_types_for_reset );
303
304 $args = apply_filters( 'give_tools_reset_stats_total_args', array(
305 'post_type' => $give_types_for_reset,
306 'post_status' => 'any',
307 'posts_per_page' => - 1,
308 ) );
309
310 $posts = get_posts( $args );
311 foreach ( $posts as $post ) {
312 $items[] = array(
313 'id' => (int) $post->ID,
314 'type' => $post->post_type,
315 );
316 }
317
318 $donor_args = array(
319 'number' => - 1,
320 );
321 $donors = Give()->donors->get_donors( $donor_args );
322 foreach ( $donors as $donor ) {
323 $items[] = array(
324 'id' => (int) $donor->id,
325 'type' => 'customer',
326 );
327 }
328
329 // Allow filtering of items to remove with an unassociative array for each item
330 // The array contains the unique ID of the item, and a 'type' for you to use in the execution of the get_data method
331 $items = apply_filters( 'give_reset_items', $items );
332
333 $this->store_data( 'give_temp_reset_ids', $items );
334 }// End if().
335
336 }
337
338 /**
339 * Given a key, get the information from the Database Directly.
340 *
341 * @since 1.5
342 *
343 * @param string $key The option_name
344 *
345 * @return mixed Returns the data from the database.
346 */
347 private function get_stored_data( $key ) {
348 global $wpdb;
349 $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s", $key ) );
350
351 if ( empty( $value ) ) {
352 return false;
353 }
354
355 $maybe_json = json_decode( $value );
356 if ( ! is_null( $maybe_json ) ) {
357 $value = json_decode( $value, true );
358 }
359
360 return (array) $value;
361 }
362
363 /**
364 * Give a key, store the value.
365 *
366 * @since 1.5
367 *
368 * @param string $key The option_name.
369 * @param mixed $value The value to store.
370 *
371 * @return void
372 */
373 private function store_data( $key, $value ) {
374 global $wpdb;
375
376 $value = is_array( $value ) ? wp_json_encode( $value ) : esc_attr( $value );
377
378 $data = array(
379 'option_name' => $key,
380 'option_value' => $value,
381 'autoload' => 'no',
382 );
383
384 $formats = array(
385 '%s',
386 '%s',
387 '%s',
388 );
389
390 $wpdb->replace( $wpdb->options, $data, $formats );
391 }
392
393 /**
394 * Delete an option
395 *
396 * @since 1.5
397 *
398 * @param string $key The option_name to delete
399 *
400 * @return void
401 */
402 private function delete_data( $key ) {
403 global $wpdb;
404 $wpdb->delete( $wpdb->options, array(
405 'option_name' => $key,
406 ) );
407 }
408
409 /**
410 * Unset the properties specific to the donors export.
411 *
412 * @since 2.3.0
413 *
414 * @param array $request
415 * @param Give_Batch_Export $export
416 */
417 public function unset_properties( $request, $export ) {
418 if ( $export->done ) {
419 // Delete all the donation ids.
420 $this->delete_data( 'give_temp_reset_ids' );
421 }
422 }
423
424 }
425