PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.4.6
GiveWP – Donation Plugin and Fundraising Platform v2.4.6
4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 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 / admin / tools / data / class-give-tools-recount-income.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 7 years ago class-give-tools-recount-donor-stats.php 8 years ago class-give-tools-recount-form-stats.php 7 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-recount-income.php
304 lines
1 <?php
2 /**
3 * Recount earnings
4 *
5 * This class handles batch processing of recounting earnings
6 *
7 * @subpackage Admin/Tools/Give_Tools_Recount_Income
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_Recount_Income Class
20 *
21 * @since 1.5
22 */
23 class Give_Tools_Recount_Income extends Give_Batch_Export {
24
25 /**
26 * Our export type. Used for export-type specific filters/actions
27 * @var string
28 * @since 1.5
29 */
30 public $export_type = '';
31
32 /**
33 * Allows for a non-form batch processing to be run.
34 * @since 1.5
35 * @var boolean
36 */
37 public $is_void = true;
38
39 /**
40 * Sets the number of items to pull on each step
41 * @since 1.5
42 * @var integer
43 */
44 public $per_step = 100;
45
46 /**
47 * Constructor.
48 */
49 public function __construct( $_step = 1 ) {
50 parent::__construct( $_step );
51
52 $this->is_writable = true;
53 }
54 /**
55 * Get the Export Data
56 *
57 * @access public
58 * @since 1.5
59 *
60 * @return bool
61 */
62 public function get_data() {
63
64 if ( $this->step == 1 ) {
65 $this->delete_data( 'give_temp_recount_earnings' );
66 }
67
68 $total = get_option( 'give_temp_recount_earnings', false );
69
70 if ( false === $total ) {
71 $total = (float) 0;
72 $this->store_data( 'give_temp_recount_earnings', $total );
73 }
74
75 $accepted_statuses = apply_filters( 'give_recount_accepted_statuses', array( 'publish' ) );
76
77 $args = apply_filters( 'give_recount_earnings_args', array(
78 'number' => $this->per_step,
79 'page' => $this->step,
80 'status' => $accepted_statuses,
81 ) );
82
83 $payments = give_get_payments( $args );
84
85 if ( ! empty( $payments ) ) {
86
87 foreach ( $payments as $payment ) {
88 // Get the payment amount.
89 $payment_amount = give_get_meta( $payment->ID, '_give_payment_total', true );
90
91 /**
92 * Filter the payment amount.
93 *
94 * @since 2.1
95 */
96 $donation_amount = apply_filters(
97 'give_donation_amount',
98 give_format_amount( $payment_amount, array( 'donation_id' => $payment->ID ) ),
99 $payment->total,
100 $payment->ID,
101 array( 'type' => 'stats', 'currency' => false, 'amount' => false )
102 );
103
104 $total += (float) give_maybe_sanitize_amount( $donation_amount );
105 }
106
107 if ( $total < 0 ) {
108 $totals = 0;
109 }
110
111 $total = round( $total, give_get_price_decimals() );
112
113 $this->store_data( 'give_temp_recount_earnings', $total );
114
115 return true;
116
117 }
118
119 update_option( 'give_earnings_total', $total, false );
120
121 return false;
122
123 }
124
125 /**
126 * Return the calculated completion percentage
127 *
128 * @since 1.5
129 * @return int
130 */
131 public function get_percentage_complete() {
132
133 $total = $this->get_stored_data( 'give_recount_earnings_total' );
134
135 if ( false === $total ) {
136 $args = apply_filters( 'give_recount_earnings_total_args', array() );
137
138 $counts = give_count_payments( $args );
139 $total = absint( $counts->publish );
140 $total = apply_filters( 'give_recount_store_earnings_total', $total );
141
142 $this->store_data( 'give_recount_earnings_total', $total );
143 }
144
145 $percentage = 100;
146
147 if ( $total > 0 ) {
148 $percentage = ( ( $this->per_step * $this->step ) / $total ) * 100;
149 }
150
151 if ( $percentage > 100 ) {
152 $percentage = 100;
153 }
154
155 return $percentage;
156 }
157
158 /**
159 * Set the properties specific to the payments export
160 *
161 * @since 1.5
162 *
163 * @param array $request The Form Data passed into the batch processing
164 */
165 public function set_properties( $request ) {
166 }
167
168 /**
169 * Process a step
170 *
171 * @since 1.5
172 * @return bool
173 */
174 public function process_step() {
175
176 if ( ! $this->can_export() ) {
177 wp_die( esc_html__( 'You do not have permission to recount stats.', 'give' ), esc_html__( 'Error', 'give' ), array( 'response' => 403 ) );
178 }
179
180 $had_data = $this->get_data();
181
182 if ( $had_data ) {
183 $this->done = false;
184
185 return true;
186 } else {
187 $this->delete_data( 'give_recount_earnings_total' );
188 $this->delete_data( 'give_temp_recount_earnings' );
189 $this->done = true;
190 $this->message = esc_html__( 'Income stats have been successfully recounted.', 'give' );
191
192 return false;
193 }
194 }
195
196 /**
197 * Headers.
198 */
199 public function headers() {
200 give_ignore_user_abort();
201 }
202
203 /**
204 * Perform the export
205 *
206 * @access public
207 * @since 1.5
208 * @return void
209 */
210 public function export() {
211
212 // Set headers
213 $this->headers();
214
215 give_die();
216 }
217
218 /**
219 * Given a key, get the information from the Database Directly
220 *
221 * @since 1.5
222 *
223 * @param string $key The option_name
224 *
225 * @return mixed Returns the data from the database
226 */
227 private function get_stored_data( $key ) {
228 global $wpdb;
229 $value = $wpdb->get_var( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = '%s'", $key ) );
230
231 if ( empty( $value ) ) {
232 return false;
233 }
234
235 $maybe_json = json_decode( $value );
236 if ( ! is_null( $maybe_json ) ) {
237 $value = json_decode( $value, true );
238 }
239
240 return $value;
241 }
242
243 /**
244 * Give a key, store the value
245 *
246 * @since 1.5
247 *
248 * @param string $key The option_name
249 * @param mixed $value The value to store
250 *
251 * @return void
252 */
253 private function store_data( $key, $value ) {
254 global $wpdb;
255
256 $value = is_array( $value ) ? wp_json_encode( $value ) : esc_attr( $value );
257
258 $data = array(
259 'option_name' => $key,
260 'option_value' => $value,
261 'autoload' => 'no',
262 );
263
264 $formats = array(
265 '%s',
266 '%s',
267 '%s',
268 );
269
270 $wpdb->replace( $wpdb->options, $data, $formats );
271 }
272
273 /**
274 * Delete an option
275 *
276 * @since 1.5
277 *
278 * @param string $key The option_name to delete
279 *
280 * @return void
281 */
282 private function delete_data( $key ) {
283 global $wpdb;
284 $wpdb->delete( $wpdb->options, array( 'option_name' => $key ) );
285 }
286
287 /**
288 * Unset the properties specific to the donors export.
289 *
290 * @since 2.3.0
291 *
292 * @param array $request
293 * @param Give_Batch_Export $export
294 */
295 public function unset_properties( $request, $export ) {
296 if ( $export->done ) {
297 // Delete all the donation ids.
298 $this->delete_data( 'give_temp_recount_earnings' );
299 $this->delete_data( 'give_recount_earnings_total' );
300 }
301 }
302
303 }
304