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