Test Failed
Push — release/2.0.1 ( af25db )
by Ravinder
08:54
created

ajax-functions.php ➔ give_test_ajax_works()   F

Complexity

Conditions 17
Paths 406

Size

Total Lines 77
Code Lines 37

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 17
eloc 37
nc 406
nop 0
dl 0
loc 77
rs 3.8996
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * AJAX Functions
4
 *
5
 * Process the front-end AJAX actions.
6
 *
7
 * @package     Give
8
 * @subpackage  Functions/AJAX
9
 * @copyright   Copyright (c) 2016, WordImpress
10
 * @license     https://opensource.org/licenses/gpl-license GNU Public License
11
 * @since       1.0
12
 */
13
14
// Exit if accessed directly.
15
if ( ! defined( 'ABSPATH' ) ) {
16
	exit;
17
}
18
19
/**
20
 * Check if AJAX works as expected
21
 * Note: Do not use this function before init hook.
22
 *
23
 * @since  1.0
24
 *
25
 * @return bool True if AJAX works, false otherwise
26
 */
27
function give_test_ajax_works() {
28
	// Handle ajax.
29
	if( doing_action( 'wp_ajax_nopriv_give_test_ajax' ) ) {
0 ignored issues
show
introduced by
Space after opening control structure is required
Loading history...
introduced by
No space before opening parenthesis is prohibited
Loading history...
30
		wp_die( 0, 200 );
31
	}
32
33
	// Check if the Airplane Mode plugin is installed.
34
	if ( class_exists( 'Airplane_Mode_Core' ) ) {
35
36
		$airplane = Airplane_Mode_Core::getInstance();
37
38
		if ( method_exists( $airplane, 'enabled' ) ) {
39
40
			if ( $airplane->enabled() ) {
41
				return true;
42
			}
43
		} else {
44
45
			if ( 'on' === $airplane->check_status() ) {
46
				return true;
47
			}
48
		}
49
	}
50
51
	add_filter( 'block_local_requests', '__return_false' );
52
53
	if ( Give_Cache::get( '_give_ajax_works', true ) ) {
54
		return true;
55
	}
56
57
	$params = array(
58
		'sslverify' => false,
59
		'timeout'   => 30,
60
		'body'      => array(
61
			'action' => 'give_test_ajax',
62
		),
63
	);
64
65
	$ajax = wp_remote_post( give_get_ajax_url(), $params );
66
67
	$works = true;
68
69
	if ( is_wp_error( $ajax ) ) {
70
71
		$works = false;
72
73
	} else {
74
75
		if ( empty( $ajax['response'] ) ) {
76
			$works = false;
77
		}
78
79
		if ( empty( $ajax['response']['code'] ) || 200 !== (int) $ajax['response']['code'] ) {
80
			$works = false;
81
		}
82
83
		if ( empty( $ajax['response']['message'] ) || 'OK' !== $ajax['response']['message'] ) {
84
			$works = false;
85
		}
86
87
		if ( ! isset( $ajax['body'] ) || 0 !== (int) $ajax['body'] ) {
88
			$works = false;
89
		}
90
91
		// Keep admin-ajax.php working under proxy/privacy mode.
92
		// @todo Create a notice to show whether user is in proxy mode or not via notice or system info.
93
		if ( 401 === (int) $ajax['response']['code'] ) {
94
			$works = true;
95
		}
96
	}
97
98
	if ( $works ) {
99
		Give_Cache::set( '_give_ajax_works', '1', DAY_IN_SECONDS, true );
100
	}
101
102
	return $works;
103
}
104
105
add_action( 'wp_ajax_nopriv_give_test_ajax', 'give_test_ajax_works' );
106
107
/**
108
 * Get AJAX URL
109
 *
110
 * @since  1.0
111
 *
112
 * @param array $query
113
 *
114
 * @return string
115
 */
116
function give_get_ajax_url( $query = array() ) {
117
	$scheme = defined( 'FORCE_SSL_ADMIN' ) && FORCE_SSL_ADMIN ? 'https' : 'admin';
118
119
	$current_url = give_get_current_page_url();
120
	$ajax_url    = admin_url( 'admin-ajax.php', $scheme );
121
122
	if ( preg_match( '/^https/', $current_url ) && ! preg_match( '/^https/', $ajax_url ) ) {
123
		$ajax_url = preg_replace( '/^http/', 'https', $ajax_url );
124
	}
125
126
	if( ! empty( $query ) ) {
0 ignored issues
show
introduced by
Space after opening control structure is required
Loading history...
introduced by
No space before opening parenthesis is prohibited
Loading history...
127
		$ajax_url = add_query_arg( $query, $ajax_url );
128
	}
129
130
	return apply_filters( 'give_ajax_url', $ajax_url );
131
}
132
133
/**
134
 * Loads Checkout Login Fields via AJAX
135
 *
136
 * @since  1.0
137
 *
138
 * @return void
139
 */
140
function give_load_checkout_login_fields() {
141
	/**
142
	 * Fire when render login fields via ajax.
143
	 *
144
	 * @since 1.7
145
	 */
146
	do_action( 'give_donation_form_login_fields' );
147
148
	give_die();
149
}
150
151
add_action( 'wp_ajax_nopriv_give_checkout_login', 'give_load_checkout_login_fields' );
152
153
/**
154
 * Load Checkout Fields
155
 *
156
 * @since  1.3.6
157
 *
158
 * @return void
159
 */
160
function give_load_checkout_fields() {
161
	$form_id = isset( $_POST['form_id'] ) ? $_POST['form_id'] : '';
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_POST
Loading history...
162
163
	ob_start();
164
165
	/**
166
	 * Fire to render registration/login form.
167
	 *
168
	 * @since 1.7
169
	 */
170
	do_action( 'give_donation_form_register_login_fields', $form_id );
171
172
	$fields = ob_get_clean();
173
174
	wp_send_json( array(
175
		'fields' => wp_json_encode( $fields ),
176
		'submit' => wp_json_encode( give_get_donation_form_submit_button( $form_id ) ),
177
	) );
178
}
179
180
add_action( 'wp_ajax_nopriv_give_cancel_login', 'give_load_checkout_fields' );
181
add_action( 'wp_ajax_nopriv_give_checkout_register', 'give_load_checkout_fields' );
182
183
/**
184
 * Get Form Title via AJAX (used only in WordPress Admin)
185
 *
186
 * @since  1.0
187
 *
188
 * @return void
189
 */
190
function give_ajax_get_form_title() {
191
	if ( isset( $_POST['form_id'] ) ) {
192
		$title = get_the_title( $_POST['form_id'] );
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
193
		if ( $title ) {
194
			echo $title;
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$title'
Loading history...
195
		} else {
196
			echo 'fail';
197
		}
198
	}
199
	give_die();
200
}
201
202
add_action( 'wp_ajax_give_get_form_title', 'give_ajax_get_form_title' );
203
add_action( 'wp_ajax_nopriv_give_get_form_title', 'give_ajax_get_form_title' );
204
205
/**
206
 * Retrieve a states drop down
207
 *
208
 * @since  1.0
209
 *
210
 * @return void
211
 */
212
function give_ajax_get_states_field() {
213
	$states_found   = false;
214
	$show_field     = true;
215
	$states_require = true;
216
	// Get the Country code from the $_POST.
217
	$country = sanitize_text_field( $_POST['country'] );
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_POST
Loading history...
218
219
	// Get the field name from the $_POST.
220
	$field_name = sanitize_text_field( $_POST['field_name'] );
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_POST
Loading history...
221
222
	$label        = __( 'State', 'give' );
223
	$states_label = give_get_states_label();
224
225
	$default_state = '';
226
	if ( $country === give_get_country() ) {
227
		$default_state = give_get_state();
228
	}
229
230
	// Check if $country code exists in the array key for states label.
231
	if ( array_key_exists( $country, $states_label ) ) {
232
		$label = $states_label[ $country ];
233
	}
234
235
	if ( empty( $country ) ) {
236
		$country = give_get_country();
237
	}
238
239
	$states = give_get_states( $country );
240
	if ( ! empty( $states ) ) {
241
		$args         = array(
242
			'name'             => $field_name,
243
			'id'               => $field_name,
244
			'class'            => $field_name . '  give-select',
245
			'options'          => $states,
246
			'show_option_all'  => false,
247
			'show_option_none' => false,
248
			'placeholder'      => $label,
249
			'selected'         => $default_state,
250
		);
251
		$data         = Give()->html->select( $args );
252
		$states_found = true;
253
	} else {
254
		$data = 'nostates';
255
256
		// Get the country list that does not have any states init.
257
		$no_states_country = give_no_states_country_list();
258
259
		// Check if $country code exists in the array key.
260
		if ( array_key_exists( $country, $no_states_country ) ) {
261
			$show_field = false;
262
		}
263
264
		// Get the country list that does not require states.
265
		$states_not_required_country_list = give_states_not_required_country_list();
266
267
		// Check if $country code exists in the array key.
268
		if ( array_key_exists( $country, $states_not_required_country_list ) ) {
269
			$states_require = false;
270
		}
271
	}
272
	$response = array(
273
		'success'        => true,
274
		'states_found'   => $states_found,
275
		'states_label'   => $label,
276
		'show_field'     => $show_field,
277
		'states_require' => $states_require,
278
		'data'           => $data,
279
		'default_state'  => $default_state,
280
	);
281
	wp_send_json( $response );
282
}
283
284
add_action( 'wp_ajax_give_get_states', 'give_ajax_get_states_field' );
285
add_action( 'wp_ajax_nopriv_give_get_states', 'give_ajax_get_states_field' );
286
287
/**
288
 * Retrieve donation forms via AJAX for chosen dropdown search field.
289
 *
290
 * @since  1.0
291
 *
292
 * @return void
293
 */
294
function give_ajax_form_search() {
295
	global $wpdb;
296
297
	$search   = esc_sql( sanitize_text_field( $_GET['s'] ) );
0 ignored issues
show
introduced by
Detected access of super global var $_GET, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_GET
Loading history...
298
	$excludes = ( isset( $_GET['current_id'] ) ? (array) $_GET['current_id'] : array() );
0 ignored issues
show
Unused Code introduced by
$excludes is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
introduced by
Detected access of super global var $_GET, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_GET
Loading history...
299
300
	$results = array();
301
	if ( current_user_can( 'edit_give_forms' ) ) {
302
		$items = $wpdb->get_results( "SELECT ID,post_title FROM $wpdb->posts WHERE `post_type` = 'give_forms' AND `post_title` LIKE '%$search%' LIMIT 50" );
0 ignored issues
show
introduced by
Usage of a direct database call is discouraged.
Loading history...
introduced by
Usage of a direct database call without caching is prohibited. Use wp_cache_get / wp_cache_set.
Loading history...
303
	} else {
304
		$items = $wpdb->get_results( "SELECT ID,post_title FROM $wpdb->posts WHERE `post_type` = 'give_forms' AND `post_status` = 'publish' AND `post_title` LIKE '%$search%' LIMIT 50" );
0 ignored issues
show
introduced by
Usage of a direct database call is discouraged.
Loading history...
introduced by
Usage of a direct database call without caching is prohibited. Use wp_cache_get / wp_cache_set.
Loading history...
305
	}
306
307
	if ( $items ) {
308
309
		foreach ( $items as $item ) {
310
311
			$results[] = array(
312
				'id'   => $item->ID,
313
				'name' => $item->post_title,
314
			);
315
		}
316
	} else {
317
318
		$items[] = array(
319
			'id'   => 0,
320
			'name' => __( 'No forms found.', 'give' ),
321
		);
322
323
	}
324
325
	echo json_encode( $results );
326
327
	give_die();
328
}
329
330
add_action( 'wp_ajax_give_form_search', 'give_ajax_form_search' );
331
add_action( 'wp_ajax_nopriv_give_form_search', 'give_ajax_form_search' );
332
333
/**
334
 * Search the donors database via Ajax
335
 *
336
 * @since  1.0
337
 *
338
 * @return void
339
 */
340
function give_ajax_donor_search() {
341
	global $wpdb;
342
343
	$search  = esc_sql( sanitize_text_field( $_GET['s'] ) );
0 ignored issues
show
introduced by
Detected access of super global var $_GET, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_GET
Loading history...
344
	$results = array();
345
	if ( ! current_user_can( 'view_give_reports' ) ) {
346
		$donors = array();
347
	} else {
348
		$donors = $wpdb->get_results( "SELECT id,name,email FROM $wpdb->donors WHERE `name` LIKE '%$search%' OR `email` LIKE '%$search%' LIMIT 50" );
0 ignored issues
show
introduced by
Usage of a direct database call is discouraged.
Loading history...
introduced by
Usage of a direct database call without caching is prohibited. Use wp_cache_get / wp_cache_set.
Loading history...
349
	}
350
351
	if ( $donors ) {
352
353
		foreach ( $donors as $donor ) {
354
355
			$results[] = array(
356
				'id'   => $donor->id,
357
				'name' => $donor->name . ' (' . $donor->email . ')',
358
			);
359
		}
360
	} else {
361
362
		$donors[] = array(
363
			'id'   => 0,
364
			'name' => __( 'No donors found.', 'give' ),
365
		);
366
367
	}
368
369
	echo json_encode( $results );
370
371
	give_die();
372
}
373
374
add_action( 'wp_ajax_give_donor_search', 'give_ajax_donor_search' );
375
376
377
/**
378
 * Searches for users via ajax and returns a list of results
379
 *
380
 * @since  1.0
381
 *
382
 * @return void
383
 */
384
function give_ajax_search_users() {
385
386
	if ( current_user_can( 'manage_give_settings' ) ) {
387
388
		$search = esc_sql( sanitize_text_field( $_GET['s'] ) );
0 ignored issues
show
introduced by
Detected access of super global var $_GET, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_GET
Loading history...
389
390
		$get_users_args = array(
391
			'number' => 9999,
392
			'search' => $search . '*',
393
		);
394
395
		$get_users_args = apply_filters( 'give_search_users_args', $get_users_args );
396
397
		$found_users = apply_filters( 'give_ajax_found_users', get_users( $get_users_args ), $search );
398
		$results     = array();
399
400
		if ( $found_users ) {
401
402
			foreach ( $found_users as $user ) {
403
404
				$results[] = array(
405
					'id'   => $user->ID,
406
					'name' => esc_html( $user->user_login . ' (' . $user->user_email . ')' ),
407
				);
408
			}
409
		} else {
410
411
			$results[] = array(
412
				'id'   => 0,
413
				'name' => __( 'No users found.', 'give' ),
414
			);
415
416
		}
417
418
		echo json_encode( $results );
419
420
	}// End if().
421
422
	give_die();
423
424
}
425
426
add_action( 'wp_ajax_give_user_search', 'give_ajax_search_users' );
427
428
429
/**
430
 * Check for Price Variations (Multi-level donation forms)
431
 *
432
 * @since  1.5
433
 *
434
 * @return void
435
 */
436
function give_check_for_form_price_variations() {
437
438
	if ( ! current_user_can( 'edit_give_forms', get_current_user_id() ) ) {
439
		die( '-1' );
440
	}
441
442
	$form_id = intval( $_POST['form_id'] );
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_POST
Loading history...
443
	$form    = get_post( $form_id );
444
445
	if ( 'give_forms' != $form->post_type ) {
446
		die( '-2' );
447
	}
448
449
	if ( give_has_variable_prices( $form_id ) ) {
450
		$variable_prices = give_get_variable_prices( $form_id );
451
452
		if ( $variable_prices ) {
453
			$ajax_response = '<select class="give_price_options_select give-select give-select" name="give_price_option">';
454
455
			if ( isset( $_POST['all_prices'] ) ) {
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
456
				$ajax_response .= '<option value="all">' . esc_html__( 'All Levels', 'give' ) . '</option>';
457
			}
458
459
			foreach ( $variable_prices as $key => $price ) {
460
461
				$level_text = ! empty( $price['_give_text'] ) ? esc_html( $price['_give_text'] ) : give_currency_filter( give_format_amount( $price['_give_amount'], array( 'sanitize' => false ) ) );
462
463
				$ajax_response .= '<option value="' . esc_attr( $price['_give_id']['level_id'] ) . '">' . $level_text . '</option>';
464
			}
465
			$ajax_response .= '</select>';
466
			echo $ajax_response;
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$ajax_response'
Loading history...
467
		}
468
	}
469
470
	give_die();
471
}
472
473
add_action( 'wp_ajax_give_check_for_form_price_variations', 'give_check_for_form_price_variations' );
474
475
476
/**
477
 * Check for Variation Prices HTML  (Multi-level donation forms)
478
 *
479
 * @since  1.6
480
 *
481
 * @return void
482
 */
483
function give_check_for_form_price_variations_html() {
484
	if ( ! current_user_can( 'edit_give_payments', get_current_user_id() ) ) {
485
		wp_die();
486
	}
487
488
	$form_id    = ! empty( $_POST['form_id'] ) ? intval( $_POST['form_id'] ) : false;
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
489
	$payment_id = ! empty( $_POST['payment_id'] ) ? intval( $_POST['payment_id'] ) : false;
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
490
	if ( empty( $form_id ) || empty( $payment_id ) ) {
491
		wp_die();
492
	}
493
494
	$form = get_post( $form_id );
495
	if ( ! empty( $form->post_type ) && 'give_forms' != $form->post_type ) {
496
		wp_die();
497
	}
498
499
	if ( ! give_has_variable_prices( $form_id ) || ! $form_id ) {
0 ignored issues
show
Security Bug introduced by
It seems like $form_id defined by !empty($_POST['form_id']...OST['form_id']) : false on line 488 can also be of type false; however, give_has_variable_prices() does only seem to accept integer, did you maybe forget to handle an error condition?

This check looks for type mismatches where the missing type is false. This is usually indicative of an error condtion.

Consider the follow example

<?php

function getDate($date)
{
    if ($date !== null) {
        return new DateTime($date);
    }

    return false;
}

This function either returns a new DateTime object or false, if there was an error. This is a typical pattern in PHP programming to show that an error has occurred without raising an exception. The calling code should check for this returned false before passing on the value to another function or method that may not be able to handle a false.

Loading history...
Bug Best Practice introduced by
The expression $form_id of type integer|false is loosely compared to false; this is ambiguous if the integer can be zero. You might want to explicitly use === null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For integer values, zero is a special case, in particular the following results might be unexpected:

0   == false // true
0   == null  // true
123 == false // false
123 == null  // false

// It is often better to use strict comparison
0 === false // false
0 === null  // false
Loading history...
500
		esc_html_e( 'n/a', 'give' );
501
	} else {
502
		$prices_atts = array();
503 View Code Duplication
		if ( $variable_prices = give_get_variable_prices( $form_id ) ) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
504
			foreach ( $variable_prices as $variable_price ) {
505
				$prices_atts[ $variable_price['_give_id']['level_id'] ] = give_format_amount( $variable_price['_give_amount'], array( 'sanitize' => false ) );
506
			}
507
		}
508
509
		// Variable price dropdown options.
510
		$variable_price_dropdown_option = array(
511
			'id'               => $form_id,
512
			'name'             => 'give-variable-price',
513
			'chosen'           => true,
514
			'show_option_all'  => '',
515
			'show_option_none' => '',
516
			'select_atts'      => 'data-prices=' . esc_attr( json_encode( $prices_atts ) ),
517
		);
518
519
		if ( $payment_id ) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $payment_id of type integer|false is loosely compared to true; this is ambiguous if the integer can be zero. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For integer values, zero is a special case, in particular the following results might be unexpected:

0   == false // true
0   == null  // true
123 == false // false
123 == null  // false

// It is often better to use strict comparison
0 === false // false
0 === null  // false
Loading history...
520
			// Payment object.
521
			$payment = new Give_Payment( $payment_id );
522
523
			// Payment meta.
524
			$payment_meta                               = $payment->get_meta();
525
			$variable_price_dropdown_option['selected'] = $payment_meta['price_id'];
526
		}
527
528
		// Render variable prices select tag html.
529
		give_get_form_variable_price_dropdown( $variable_price_dropdown_option, true );
530
	}
531
532
	give_die();
533
}
534
535
add_action( 'wp_ajax_give_check_for_form_price_variations_html', 'give_check_for_form_price_variations_html' );
536
537
/**
538
 * Send Confirmation Email For Complete Donation History Access.
539
 *
540
 * @since 1.8.17
541
 *
542
 * @return bool
543
 */
544
function give_confirm_email_for_donation_access() {
545
546
	// Verify Security using Nonce.
547
	if ( ! check_ajax_referer( 'give_ajax_nonce', 'nonce' ) ) {
548
		return false;
549
	}
550
551
	// Bail Out, if email is empty.
552
	if ( empty( $_POST['email'] ) ) {
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
553
		return false;
554
	}
555
556
	$donor = Give()->donors->get_donor_by( 'email', give_clean( $_POST['email'] ) );
0 ignored issues
show
Documentation introduced by
give_clean($_POST['email']) is of type string|array, but the function expects a integer.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_POST
Loading history...
557
	if ( Give()->email_access->can_send_email( $donor->id ) ) {
558
		$return     = array();
559
		$email_sent = Give()->email_access->send_email( $donor->id, $donor->email );
560
561
		if ( ! $email_sent ) {
562
			$return['status']  = 'error';
563
			$return['message'] = Give()->notices->print_frontend_notice(
564
				__( 'Unable to send email. Please try again.', 'give' ),
565
				false,
566
				'error'
567
			);
568
		}
569
570
		$return['status']  = 'success';
571
		$return['message'] = Give()->notices->print_frontend_notice(
572
			__( 'Please check your email and click on the link to access your complete donation history.', 'give' ),
573
			false,
574
			'success'
575
		);
576
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
577
578
	} else {
579
		$value             = Give()->email_access->verify_throttle / 60;
580
		$return['status']  = 'error';
581
		$return['message'] = Give()->notices->print_frontend_notice(
582
			sprintf(
583
				__( 'Too many access email requests detected. Please wait %s before requesting a new donation history access link.', 'give' ),
584
				sprintf( _n( '%s minute', '%s minutes', $value, 'give' ), $value )
585
			),
586
			false,
587
			'error'
588
		);
589
	}
590
591
	echo json_encode( $return );
592
	give_die();
593
}
594
595
add_action( 'wp_ajax_nopriv_give_confirm_email_for_donations_access', 'give_confirm_email_for_donation_access' );