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 / donors / donor-actions.php
give / includes / admin / donors Last commit date
class-donor-table.php 7 years ago donor-actions.php 7 years ago donor-functions.php 7 years ago donors.php 7 years ago
donor-actions.php
620 lines
1 <?php
2 /**
3 * Donors
4 *
5 * @package Give
6 * @subpackage Admin/Donors
7 * @copyright Copyright (c) 2016, WordImpress
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 1.0
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Processes a donor edit.
19 *
20 * @param array $args The $_POST array being passed.
21 *
22 * @since 1.0
23 *
24 * @return array|bool $output Response messages
25 */
26 function give_edit_donor( $args ) {
27
28 $donor_edit_role = apply_filters( 'give_edit_donors_role', 'edit_give_payments' );
29
30 if ( ! is_admin() || ! current_user_can( $donor_edit_role ) ) {
31 wp_die( esc_html__( 'You do not have permission to edit this donor.', 'give' ), esc_html__( 'Error', 'give' ), array(
32 'response' => 403,
33 ) );
34 }
35
36 if ( empty( $args ) ) {
37 return false;
38 }
39
40 // Sanitize Data.
41 $args = give_clean( $args );
42
43 // Verify Nonce.
44 if ( ! wp_verify_nonce( $args['_wpnonce'], 'edit-donor' ) ) {
45 wp_die( esc_html__( 'Cheatin&#8217; uh?', 'give' ), esc_html__( 'Error', 'give' ), array(
46 'response' => 400,
47 ) );
48 }
49
50 $donor_info = $args['donor_info'];
51 $donor_id = intval( $donor_info['id'] );
52
53 $donor = new Give_Donor( $donor_id );
54
55 // Bailout, if donor id doesn't exists.
56 if ( empty( $donor->id ) ) {
57 return false;
58 }
59
60 $defaults = array(
61 'title' => '',
62 'name' => '',
63 'user_id' => 0,
64 'line1' => '',
65 'line2' => '',
66 'city' => '',
67 'zip' => '',
68 'state' => '',
69 'country' => '',
70 );
71
72 $donor_info = wp_parse_args( $donor_info, $defaults );
73
74 if ( (int) $donor_info['user_id'] !== (int) $donor->user_id ) {
75
76 // Make sure we don't already have this user attached to a donor.
77 if ( ! empty( $donor_info['user_id'] ) && false !== Give()->donors->get_donor_by( 'user_id', $donor_info['user_id'] ) ) {
78 give_set_error(
79 'give-invalid-donor-user_id',
80 sprintf(
81 /* translators: %d User ID */
82 __( 'The User ID #%d is already associated with a different donor.', 'give' ),
83 $donor_info['user_id']
84 )
85 );
86 }
87
88 // Make sure it's actually a user.
89 $user = get_user_by( 'id', $donor_info['user_id'] );
90 if ( ! empty( $donor_info['user_id'] ) && false === $user ) {
91 give_set_error(
92 'give-invalid-user_id',
93 sprintf(
94 /* translators: %d User ID */
95 __( 'The User ID #%d does not exist. Please assign an existing user.', 'give' ),
96 $donor_info['user_id']
97 )
98 );
99 }
100 }
101
102 // Bailout, if errors are present.
103 if ( give_get_errors() ) {
104 return false;
105 }
106
107 $donor->update_meta( '_give_anonymous_donor', absint( $args['give_anonymous_donor'] ) );
108
109 // Save company name in when admin update donor company name from dashboard.
110 $donor->update_meta( '_give_donor_company', sanitize_text_field( $args['give_donor_company'] ) );
111
112 // If First name of donor is empty, then fetch the current first name of donor.
113 if ( empty( $donor_info['first_name'] ) ) {
114 $donor_info['first_name'] = $donor->get_first_name();
115 }
116
117 // Sanitize the inputs.
118 $donor_data = array();
119 $donor_data['name'] = trim( "{$donor_info['first_name']} {$donor_info['last_name']}" );
120 $donor_data['first_name'] = $donor_info['first_name'];
121 $donor_data['last_name'] = $donor_info['last_name'];
122 $donor_data['title'] = $donor_info['title'];
123 $donor_data['user_id'] = $donor_info['user_id'];
124
125 $donor_data = apply_filters( 'give_edit_donor_info', $donor_data, $donor_id );
126
127 /**
128 * Filter the address
129 *
130 * @todo unnecessary filter because we are not storing donor address to user.
131 *
132 * @since 1.0
133 */
134 $address = apply_filters( 'give_edit_donor_address', array(), $donor_id );
135
136 $donor_data = give_clean( $donor_data );
137 $address = give_clean( $address );
138
139 $output = give_connect_user_donor_profile( $donor, $donor_data, $address );
140
141 if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
142 header( 'Content-Type: application/json' );
143 echo wp_json_encode( $output );
144 wp_die();
145 }
146
147 if ( $output['success'] ) {
148 wp_safe_redirect( add_query_arg(
149 array(
150 'post_type' => 'give_forms',
151 'page' => 'give-donors',
152 'view' => 'overview',
153 'id' => $donor_id,
154 'give-messages[]' => 'profile-updated'
155 ),
156 esc_url( admin_url( 'edit.php' ) )
157 ) );
158 }
159
160 exit;
161
162 }
163
164 add_action( 'give_edit-donor', 'give_edit_donor', 10, 1 );
165
166 /**
167 * Save a donor note.
168 *
169 * @param array $args The $_POST array being passed.
170 *
171 * @since 1.0
172 *
173 * @return int The Note ID that was saved, or 0 if nothing was saved.
174 */
175 function give_donor_save_note( $args ) {
176
177 $donor_view_role = apply_filters( 'give_view_donors_role', 'view_give_reports' );
178
179 if ( ! is_admin() || ! current_user_can( $donor_view_role ) ) {
180 wp_die( __( 'You do not have permission to edit this donor.', 'give' ), __( 'Error', 'give' ), array(
181 'response' => 403,
182 ) );
183 }
184
185 if ( empty( $args ) ) {
186 return false;
187 }
188
189 $donor_note = trim( give_clean( $args['donor_note'] ) );
190 $donor_id = (int) $args['customer_id'];
191 $nonce = $args['add_donor_note_nonce'];
192
193 if ( ! wp_verify_nonce( $nonce, 'add-donor-note' ) ) {
194 wp_die( __( 'Cheatin&#8217; uh?', 'give' ), __( 'Error', 'give' ), array(
195 'response' => 400,
196 ) );
197 }
198
199 if ( empty( $donor_note ) ) {
200 give_set_error( 'empty-donor-note', __( 'A note is required.', 'give' ) );
201 }
202
203 if ( give_get_errors() ) {
204 return false;
205 }
206
207 $donor = new Give_Donor( $donor_id );
208 $new_note = $donor->add_note( $donor_note );
209
210 /**
211 * Fires before inserting donor note.
212 *
213 * @param int $donor_id The ID of the donor.
214 * @param string $new_note Note content.
215 *
216 * @since 1.0
217 */
218 do_action( 'give_pre_insert_donor_note', $donor_id, $new_note );
219
220 if ( ! empty( $new_note ) && ! empty( $donor->id ) ) {
221
222 ob_start();
223 ?>
224 <div class="donor-note-wrapper dashboard-comment-wrap comment-item">
225 <span class="note-content-wrap">
226 <?php echo stripslashes( $new_note ); ?>
227 </span>
228 </div>
229 <?php
230 $output = ob_get_contents();
231 ob_end_clean();
232
233 if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
234 echo $output;
235 exit;
236 }
237
238 return $new_note;
239
240 }
241
242 return false;
243
244 }
245
246 add_action( 'give_add-donor-note', 'give_donor_save_note', 10, 1 );
247
248
249 /**
250 * Disconnect a user ID from a donor
251 *
252 * @param array $args Array of arguments.
253 *
254 * @since 1.0
255 *
256 * @return bool|array If the disconnect was successful.
257 */
258 function give_disconnect_donor_user_id( $args ) {
259
260 $donor_edit_role = apply_filters( 'give_edit_donors_role', 'edit_give_payments' );
261
262 if ( ! is_admin() || ! current_user_can( $donor_edit_role ) ) {
263 wp_die( __( 'You do not have permission to edit this donor.', 'give' ), __( 'Error', 'give' ), array(
264 'response' => 403,
265 ) );
266 }
267
268 if ( empty( $args ) ) {
269 return false;
270 }
271
272 $donor_id = (int) $args['customer_id'];
273
274 $nonce = $args['_wpnonce'];
275
276 if ( ! wp_verify_nonce( $nonce, 'edit-donor' ) ) {
277 wp_die( __( 'Cheatin&#8217; uh?', 'give' ), __( 'Error', 'give' ), array(
278 'response' => 400,
279 ) );
280 }
281
282 $donor = new Give_Donor( $donor_id );
283 if ( empty( $donor->id ) ) {
284 return false;
285 }
286
287 $user_id = $donor->user_id;
288
289 /**
290 * Fires before disconnecting user ID from a donor.
291 *
292 * @param int $donor_id The ID of the donor.
293 * @param int $user_id The ID of the user.
294 *
295 * @since 1.0
296 */
297 do_action( 'give_pre_donor_disconnect_user_id', $donor_id, $user_id );
298
299 $output = array();
300 $donor_args = array(
301 'user_id' => 0,
302 );
303
304
305 $output['success'] = true;
306 if ( ! $donor->update( $donor_args ) ) {
307 update_user_meta( $user_id, '_give_is_donor_disconnected', true );
308 update_user_meta( $user_id, '_give_disconnected_donor_id', $donor->id );
309 $donor->update_meta( '_give_disconnected_user_id', $user_id );
310
311 $output['success'] = true;
312
313 } else {
314 $output['success'] = false;
315 give_set_error( 'give-disconnect-user-fail', __( 'Failed to disconnect user from donor.', 'give' ) );
316 }
317
318 $output['redirect'] = admin_url( 'edit.php?post_type=give_forms&page=give-donors&view=overview&id=' ) . $donor_id;
319
320 /**
321 * Fires after disconnecting user ID from a donor.
322 *
323 * @param int $donor_id The ID of the donor.
324 *
325 * @since 1.0
326 */
327 do_action( 'give_post_donor_disconnect_user_id', $donor_id );
328
329 if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
330 header( 'Content-Type: application/json' );
331 echo json_encode( $output );
332 wp_die();
333 }
334
335 return $output;
336
337 }
338
339 add_action( 'give_disconnect-userid', 'give_disconnect_donor_user_id', 10, 1 );
340
341 /**
342 * Add an email address to the donor from within the admin and log a donor note.
343 *
344 * @param array $args Array of arguments: nonce, donor id, and email address.
345 *
346 * @since 1.7
347 *
348 * @return mixed If DOING_AJAX echos out JSON, otherwise returns array of success (bool) and message (string).
349 */
350 function give_add_donor_email( $args ) {
351
352 $donor_id = '';
353 $donor_edit_role = apply_filters( 'give_edit_donors_role', 'edit_give_payments' );
354
355 if ( ! is_admin() || ! current_user_can( $donor_edit_role ) ) {
356 wp_die( __( 'You do not have permission to edit this donor.', 'give' ), __( 'Error', 'give' ), array(
357 'response' => 403,
358 ) );
359 }
360
361 $output = array();
362 if ( empty( $args ) || empty( $args['email'] ) || empty( $args['customer_id'] ) ) {
363 $output['success'] = false;
364 if ( empty( $args['email'] ) ) {
365 $output['message'] = __( 'Email address is required.', 'give' );
366 } elseif ( empty( $args['customer_id'] ) ) {
367 $output['message'] = __( 'Donor ID is required.', 'give' );
368 } else {
369 $output['message'] = __( 'An error has occurred. Please try again.', 'give' );
370 }
371 } elseif ( ! wp_verify_nonce( $args['_wpnonce'], 'give_add_donor_email' ) ) {
372 $output = array(
373 'success' => false,
374 'message' => __( 'Nonce verification failed.', 'give' ),
375 );
376 } elseif ( ! is_email( $args['email'] ) ) {
377 $output = array(
378 'success' => false,
379 'message' => __( 'Invalid email.', 'give' ),
380 );
381 } else {
382 $email = sanitize_email( $args['email'] );
383 $donor_id = (int) $args['customer_id'];
384 $primary = 'true' === $args['primary'] ? true : false;
385 $donor = new Give_Donor( $donor_id );
386 if ( false === $donor->add_email( $email, $primary ) ) {
387 if ( in_array( $email, $donor->emails ) ) {
388 $output = array(
389 'success' => false,
390 'message' => __( 'Email already associated with this donor.', 'give' ),
391 );
392 } else {
393 $output = array(
394 'success' => false,
395 'message' => __( 'Email address is already associated with another donor.', 'give' ),
396 );
397 }
398 } else {
399 $redirect = admin_url( 'edit.php?post_type=give_forms&page=give-donors&view=overview&id=' . $donor_id . '&give-messages[]=email-added' );
400 $output = array(
401 'success' => true,
402 'message' => __( 'Email successfully added to donor.', 'give' ),
403 'redirect' => $redirect,
404 );
405
406 $user = wp_get_current_user();
407 $user_login = ! empty( $user->user_login ) ? $user->user_login : __( 'System', 'give' );
408 $donor_note = sprintf( __( 'Email address %1$s added by %2$s', 'give' ), $email, $user_login );
409 $donor->add_note( $donor_note );
410
411 if ( $primary ) {
412 $donor_note = sprintf( __( 'Email address %1$s set as primary by %2$s', 'give' ), $email, $user_login );
413 $donor->add_note( $donor_note );
414 }
415 }
416 } // End if().
417
418 do_action( 'give_post_add_donor_email', $donor_id, $args );
419
420 if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
421 header( 'Content-Type: application/json' );
422 echo json_encode( $output );
423 wp_die();
424 }
425
426 return $output;
427 }
428
429 add_action( 'give_add_donor_email', 'give_add_donor_email', 10, 1 );
430
431
432 /**
433 * Remove an email address to the donor from within the admin and log a donor note and redirect back to the donor interface for feedback.
434 *
435 * @since 1.7
436 *
437 * @return bool|null
438 */
439 function give_remove_donor_email() {
440 if ( empty( $_GET['id'] ) || ! is_numeric( $_GET['id'] ) ) {
441 return false;
442 }
443 if ( empty( $_GET['email'] ) || ! is_email( $_GET['email'] ) ) {
444 return false;
445 }
446 if ( empty( $_GET['_wpnonce'] ) ) {
447 return false;
448 }
449
450 $nonce = $_GET['_wpnonce'];
451 if ( ! wp_verify_nonce( $nonce, 'give-remove-donor-email' ) ) {
452 wp_die( __( 'Nonce verification failed', 'give' ), __( 'Error', 'give' ), array(
453 'response' => 403,
454 ) );
455 }
456
457 $donor = new Give_Donor( $_GET['id'] );
458 if ( $donor->remove_email( $_GET['email'] ) ) {
459 $url = add_query_arg( 'give-messages[]', 'email-removed', admin_url( 'edit.php?post_type=give_forms&page=give-donors&view=overview&id=' . $donor->id ) );
460 $user = wp_get_current_user();
461 $user_login = ! empty( $user->user_login ) ? $user->user_login : __( 'System', 'give' );
462 $donor_note = sprintf( __( 'Email address %1$s removed by %2$s', 'give' ), $_GET['email'], $user_login );
463 $donor->add_note( $donor_note );
464 } else {
465 $url = add_query_arg( 'give-messages[]', 'email-remove-failed', admin_url( 'edit.php?post_type=give_forms&page=give-donors&view=overview&id=' . $donor->id ) );
466 }
467
468 wp_safe_redirect( $url );
469 exit;
470 }
471
472 add_action( 'give_remove_donor_email', 'give_remove_donor_email', 10 );
473
474
475 /**
476 * Set an email address as the primary for a donor from within the admin and log a donor note
477 * and redirect back to the donor interface for feedback
478 *
479 * @since 1.7
480 *
481 * @return bool|null
482 */
483 function give_set_donor_primary_email() {
484 if ( empty( $_GET['id'] ) || ! is_numeric( $_GET['id'] ) ) {
485 return false;
486 }
487
488 if ( empty( $_GET['email'] ) || ! is_email( $_GET['email'] ) ) {
489 return false;
490 }
491
492 if ( empty( $_GET['_wpnonce'] ) ) {
493 return false;
494 }
495
496 $nonce = $_GET['_wpnonce'];
497
498 if ( ! wp_verify_nonce( $nonce, 'give-set-donor-primary-email' ) ) {
499 wp_die( __( 'Nonce verification failed', 'give' ), __( 'Error', 'give' ), array(
500 'response' => 403,
501 ) );
502 }
503
504 $donor = new Give_Donor( $_GET['id'] );
505
506 if ( $donor->set_primary_email( $_GET['email'] ) ) {
507 $url = add_query_arg( 'give-messages[]', 'primary-email-updated', admin_url( 'edit.php?post_type=give_forms&page=give-donors&view=overview&id=' . $donor->id ) );
508 $user = wp_get_current_user();
509 $user_login = ! empty( $user->user_login ) ? $user->user_login : __( 'System', 'give' );
510 $donor_note = sprintf( __( 'Email address %1$s set as primary by %2$s', 'give' ), $_GET['email'], $user_login );
511
512 $donor->add_note( $donor_note );
513 } else {
514 $url = add_query_arg( 'give-messages[]', 'primary-email-failed', admin_url( 'edit.php?post_type=give_forms&page=give-donors&view=overview&id=' . $donor->id ) );
515 }
516
517 wp_safe_redirect( $url );
518 exit;
519 }
520
521 add_action( 'give_set_donor_primary_email', 'give_set_donor_primary_email', 10 );
522
523
524 /**
525 * This function will process the donor deletion.
526 *
527 * @param array $args Donor Deletion Arguments.
528 *
529 * @since 2.2
530 */
531 function give_process_donor_deletion( $args ) {
532
533 $donor_edit_role = apply_filters( 'give_edit_donors_role', 'edit_give_payments' );
534
535 // Verify user capabilities to proceed for deleting donor.
536 if ( ! is_admin() || ! current_user_can( $donor_edit_role ) ) {
537 wp_die(
538 esc_html__( 'You do not have permission to delete donors.', 'give' ),
539 esc_html__( 'Error', 'give' ),
540 array(
541 'response' => 403,
542 )
543 );
544 }
545
546 $nonce_action = '';
547 if ( 'delete_bulk_donor' === $args['give_action'] ) {
548 $nonce_action = 'bulk-donors';
549 } elseif ( 'delete_donor' === $args['give_action'] ) {
550 $nonce_action = 'give-delete-donor';
551 }
552
553 // Verify Nonce for deleting bulk donors.
554 give_validate_nonce( $args['_wpnonce'], $nonce_action );
555
556 $redirect_args = array();
557 $donor_ids = ( isset( $args['donor'] ) && is_array( $args['donor'] ) ) ? $args['donor'] : array( $args['donor_id'] );
558 $redirect_args['order'] = ! empty( $args['order'] ) ? $args['order'] : 'DESC';
559 $redirect_args['orderby'] = ! empty( $args['orderby'] ) ? $args['orderby'] : 'ID';
560 $redirect_args['s'] = ! empty( $args['s'] ) ? $args['s'] : '';
561 $delete_donor = ! empty( $args['give-donor-delete-confirm'] ) ? give_is_setting_enabled( $args['give-donor-delete-confirm'] ) : false;
562 $delete_donation = ! empty( $args['give-donor-delete-records'] ) ? give_is_setting_enabled( $args['give-donor-delete-records'] ) : false;
563
564 if ( count( $donor_ids ) > 0 ) {
565
566 // Loop through the selected donors to delete.
567 foreach ( $donor_ids as $donor_id ) {
568
569 $donor = new Give_Donor( $donor_id );
570
571 // Proceed only if valid donor id is provided.
572 if ( $donor->id > 0 ) {
573
574 /**
575 * Fires before deleting donor.
576 *
577 * @param int $donor_id The ID of the donor.
578 * @param bool $delete_donor Confirm Donor Deletion.
579 * @param bool $delete_donation Confirm Donor related donations deletion.
580 *
581 * @since 1.0
582 */
583 do_action( 'give_pre_delete_donor', $donor->id, $delete_donor, $delete_donation );
584
585 // Proceed only, if user confirmed whether they need to delete the donor.
586 if ( $delete_donor ) {
587
588 // Delete donor and linked donations.
589 $donor_delete_status = give_delete_donor_and_related_donation( $donor, array(
590 'delete_donation' => $delete_donation,
591 ) );
592
593 if ( 1 === $donor_delete_status ) {
594 $redirect_args['give-messages[]'] = 'donor-deleted';
595 } elseif ( 2 === $donor_delete_status ) {
596 $redirect_args['give-messages[]'] = 'donor-donations-deleted';
597 }
598 } else {
599 $redirect_args['give-messages[]'] = 'confirm-delete-donor';
600 }
601 } else {
602 $redirect_args['give-messages[]'] = 'invalid-donor-id';
603 } // End if().
604 } // End foreach().
605 } else {
606 $redirect_args['give-messages[]'] = 'no-donor-found';
607 } // End if().
608
609 $redirect_url = add_query_arg(
610 $redirect_args,
611 admin_url( 'edit.php?post_type=give_forms&page=give-donors' )
612 );
613
614 wp_safe_redirect( $redirect_url );
615 give_die();
616
617 }
618 add_action( 'give_delete_donor', 'give_process_donor_deletion' );
619 add_action( 'give_delete_bulk_donor', 'give_process_donor_deletion' );
620