PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.1.2
GiveWP – Donation Plugin and Fundraising Platform v3.1.2
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-donor-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 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 5 years ago tools-actions.php 7 years ago
class-give-tools-recount-donor-stats.php
250 lines
1 <?php
2 /**
3 * Recount all donor stats.
4 *
5 * This class handles batch processing of recounting all donor stats.
6 *
7 * @subpackage Admin/Tools/Give_Tools_Recount_Donor_Stats
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 1.5
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Give_Tools_Recount_Donor_Stats Class
19 *
20 * @since 1.5
21 */
22 class Give_Tools_Recount_Donor_Stats extends Give_Batch_Export {
23
24 /**
25 * Our export type. Used for export-type specific filters/actions.
26 *
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 *
35 * @since 1.5
36 * @var boolean
37 */
38 public $is_void = true;
39
40 /**
41 * Sets the number of items to pull on each step
42 *
43 * @since 1.5
44 * @var integer
45 */
46 public $per_step = 5;
47
48 /**
49 * Constructor.
50 */
51 public function __construct( $_step = 1 ) {
52 parent::__construct( $_step );
53
54 $this->is_writable = true;
55 }
56
57 /**
58 * Get the Export Data
59 *
60 * @access public
61 * @since 1.5
62 *
63 * @return array|bool $data The data for the CSV file
64 */
65 public function get_data() {
66
67 $args = array(
68 'number' => $this->per_step,
69 'offset' => $this->per_step * ( $this->step - 1 ),
70 'orderby' => 'id',
71 'order' => 'DESC',
72 );
73
74 $donors = Give()->donors->get_donors( $args );
75
76 if ( $donors ) {
77
78 $allowed_payment_status = apply_filters( 'give_recount_donors_donation_statuses', give_get_payment_status_keys() );
79
80 foreach ( $donors as $donor ) {
81
82 $attached_payment_ids = explode( ',', $donor->payment_ids );
83
84 $attached_args = array(
85 'post__in' => $attached_payment_ids,
86 'number' => - 1,
87 'status' => $allowed_payment_status,
88 );
89
90 $attached_payments = (array) give_get_payments( $attached_args );
91
92 $unattached_args = array(
93 'post__not_in' => $attached_payment_ids,
94 'number' => - 1,
95 'status' => $allowed_payment_status,
96 'meta_query' => array(
97 array(
98 'key' => '_give_payment_donor_email',
99 'value' => $donor->email,
100 'compare' => '=',
101 ),
102 ),
103 );
104
105 $unattached_payments = give_get_payments( $unattached_args );
106
107 $payments = array_merge( $attached_payments, $unattached_payments );
108
109 $purchase_value = 0.00;
110 $purchase_count = 0;
111 $payment_ids = array();
112
113 if ( $payments ) {
114
115 foreach ( $payments as $payment ) {
116
117 $should_process_payment = 'publish' == $payment->post_status ? true : false;
118 $should_process_payment = apply_filters( 'give_donor_recount_should_process_donation', $should_process_payment, $payment );
119
120 if ( true === $should_process_payment ) {
121
122 if ( apply_filters( 'give_donor_recount_should_increase_value', true, $payment ) ) {
123 $purchase_value += (float) give_donation_amount( $payment->ID, array( 'type' => 'stats' ) );
124 }
125
126 if ( apply_filters( 'give_donor_recount_should_increase_count', true, $payment ) ) {
127 $purchase_count ++;
128 }
129 }
130
131 $payment_ids[] = $payment->ID;
132 }
133 }
134
135 $payment_ids = implode( ',', $payment_ids );
136
137 $donor_update_data = array(
138 'purchase_count' => $purchase_count,
139 'purchase_value' => $purchase_value,
140 'payment_ids' => $payment_ids,
141 );
142
143 $donor_instance = new Give_Donor( $donor->id );
144 $donor_instance->update( $donor_update_data );
145
146 }// End foreach().
147
148 return true;
149 }// End if().
150
151 return false;
152
153 }
154
155 /**
156 * Return the calculated completion percentage
157 *
158 * @since 1.5
159 * @return int
160 */
161 public function get_percentage_complete() {
162
163 $args = array(
164 'number' => - 1,
165 'orderby' => 'id',
166 'order' => 'DESC',
167 );
168
169 $donors = Give()->donors->get_donors( $args );
170 $total = count( $donors );
171
172 $percentage = 100;
173
174 if ( $total > 0 ) {
175 $percentage = ( ( $this->per_step * $this->step ) / $total ) * 100;
176 }
177
178 if ( $percentage > 100 ) {
179 $percentage = 100;
180 }
181
182 return $percentage;
183 }
184
185 /**
186 * Set the properties specific to the payments export
187 *
188 * @since 1.5
189 *
190 * @param array $request The Form Data passed into the batch processing
191 */
192 public function set_properties( $request ) {
193 }
194
195 /**
196 * Process a step
197 *
198 * @since 1.5
199 * @return bool
200 */
201 public function process_step() {
202
203 if ( ! $this->can_export() ) {
204 wp_die(
205 esc_html__( 'You do not have permission to recount stats.', 'give' ),
206 esc_html__( 'Error', 'give' ),
207 array(
208 'response' => 403,
209 )
210 );
211 }
212
213 $had_data = $this->get_data();
214
215 if ( $had_data ) {
216 $this->done = false;
217
218 return true;
219 } else {
220 $this->done = true;
221 $this->message = esc_html__( 'Donor stats have been successfully recounted.', 'give' );
222
223 return false;
224 }
225 }
226
227 /**
228 * Headers
229 */
230 public function headers() {
231 give_ignore_user_abort();
232 }
233
234 /**
235 * Perform the export
236 *
237 * @access public
238 * @since 1.5
239 * @return void
240 */
241 public function export() {
242
243 // Set headers
244 $this->headers();
245
246 give_die();
247 }
248
249 }
250