PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.2.1
GiveWP – Donation Plugin and Fundraising Platform v2.2.1
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-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 8 years ago class-give-tools-recount-donor-stats.php 8 years ago class-give-tools-recount-form-stats.php 8 years ago class-give-tools-recount-income.php 7 years ago class-give-tools-recount-single-donor-stats.php 8 years ago class-give-tools-reset-stats.php 7 years ago tools-actions.php 8 years ago
class-give-tools-recount-donor-stats.php
246 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( esc_html__( 'You do not have permission to recount stats.', 'give' ), esc_html__( 'Error', 'give' ), array(
205 'response' => 403,
206 ) );
207 }
208
209 $had_data = $this->get_data();
210
211 if ( $had_data ) {
212 $this->done = false;
213
214 return true;
215 } else {
216 $this->done = true;
217 $this->message = esc_html__( 'Donor stats have been successfully recounted.', 'give' );
218
219 return false;
220 }
221 }
222
223 /**
224 * Headers
225 */
226 public function headers() {
227 give_ignore_user_abort();
228 }
229
230 /**
231 * Perform the export
232 *
233 * @access public
234 * @since 1.5
235 * @return void
236 */
237 public function export() {
238
239 // Set headers
240 $this->headers();
241
242 give_die();
243 }
244
245 }
246