Test Failed
Pull Request — master (#2054)
by Devin
05:04
created

admin-actions.php ➔ give_donation_import_callback()   C

Complexity

Conditions 9
Paths 80

Size

Total Lines 92
Code Lines 65

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 65
nc 80
nop 0
dl 0
loc 92
rs 5.1048
c 0
b 0
f 0

How to fix   Long Method   

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
 * Admin Actions
4
 *
5
 * @package     Give
6
 * @subpackage  Admin/Actions
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
 * Load wp editor by ajax.
19
 *
20
 * @since 1.8
21
 */
22
function give_load_wp_editor() {
23
	if ( ! isset( $_POST['wp_editor'] ) ) {
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
24
		die();
25
	}
26
27
	$wp_editor                     = json_decode( base64_decode( $_POST['wp_editor'] ), true );
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...
28
	$wp_editor[2]['textarea_name'] = $_POST['textarea_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-sanitized input variable: $_POST
Loading history...
29
30
	wp_editor( $wp_editor[0], $_POST['wp_editor_id'], $wp_editor[2] );
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...
introduced by
Detected usage of a non-sanitized input variable: $_POST
Loading history...
31
32
	die();
33
}
34
35
add_action( 'wp_ajax_give_load_wp_editor', 'give_load_wp_editor' );
36
37
38
/**
39
 * Redirect admin to clean url give admin pages.
40
 *
41
 * @since 1.8
42
 *
43
 * @return bool
44
 */
45
function give_redirect_to_clean_url_admin_pages() {
46
	// Give admin pages.
47
	$give_pages = array(
48
		'give-payment-history',
49
		'give-donors',
50
		'give-reports',
51
		'give-tools'
0 ignored issues
show
introduced by
Comma required after last value in array declaration
Loading history...
52
	);
53
54
	// Get current page.
55
	$current_page = isset( $_GET['page'] ) ? esc_attr( $_GET['page'] ) : '';
0 ignored issues
show
introduced by
Detected access of super global var $_GET, probably need manual inspection.
Loading history...
56
57
	// Bailout.
58
	if (
59
		empty( $current_page )
60
		|| empty( $_GET['_wp_http_referer'] )
0 ignored issues
show
introduced by
Detected access of super global var $_GET, probably need manual inspection.
Loading history...
61
		|| ! in_array( $current_page, $give_pages )
62
	) {
63
		return false;
64
	}
65
66
	/**
67
	 * Verify current page request.
68
	 *
69
	 * @since 1.8
70
	 */
71
	$redirect = apply_filters( "give_validate_{$current_page}", true );
72
73
	if ( $redirect ) {
74
		// Redirect.
75
		wp_redirect(
76
			remove_query_arg(
77
				array( '_wp_http_referer', '_wpnonce' ),
78
				wp_unslash( $_SERVER['REQUEST_URI'] )
0 ignored issues
show
introduced by
Detected usage of a non-validated input variable: $_SERVER
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_SERVER
Loading history...
79
			)
80
		);
81
		exit;
82
	}
83
}
84
85
add_action( 'admin_init', 'give_redirect_to_clean_url_admin_pages' );
86
87
88
/**
89
 * Hide Outdated PHP Notice Shortly.
90
 *
91
 * This code is used with AJAX call to hide outdated PHP notice for a short period of time
92
 *
93
 * @since 1.8.9
94
 *
95
 * @return void
96
 */
97
function give_hide_outdated_php_notice() {
98
99
	if ( ! isset( $_POST['_give_hide_outdated_php_notices_shortly'] ) ) {
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
100
		give_die();
101
	}
102
103
	// Transient key name.
104
	$transient_key = "_give_hide_outdated_php_notices_shortly";
0 ignored issues
show
Coding Style Comprehensibility introduced by
The string literal _give_hide_outdated_php_notices_shortly does not require double quotes, as per coding-style, please use single quotes.

PHP provides two ways to mark string literals. Either with single quotes 'literal' or with double quotes "literal". The difference between these is that string literals in double quotes may contain variables with are evaluated at run-time as well as escape sequences.

String literals in single quotes on the other hand are evaluated very literally and the only two characters that needs escaping in the literal are the single quote itself (\') and the backslash (\\). Every other character is displayed as is.

Double quoted string literals may contain other variables or more complex escape sequences.

<?php

$singleQuoted = 'Value';
$doubleQuoted = "\tSingle is $singleQuoted";

print $doubleQuoted;

will print an indented: Single is Value

If your string literal does not contain variables or escape sequences, it should be defined using single quotes to make that fact clear.

For more information on PHP string literals and available escape sequences see the PHP core documentation.

Loading history...
105
106
	if ( Give_Cache::get( $transient_key, true ) ) {
107
		return;
108
	}
109
110
	// Hide notice for 24 hours.
111
	Give_Cache::set( $transient_key, true, DAY_IN_SECONDS, true );
112
113
	give_die();
114
115
}
116
117
add_action( 'wp_ajax_give_hide_outdated_php_notice', 'give_hide_outdated_php_notice' );
118
119
/**
120
 * Register admin notices.
121
 *
122
 * @since 1.8.9
123
 */
124
function _give_register_admin_notices() {
125
	// Bailout.
126
	if ( ! is_admin() ) {
127
		return;
128
	}
129
130
	// Add payment bulk notice.
131
	if (
132
		current_user_can( 'edit_give_payments' )
133
		&& isset( $_GET['action'] )
134
		&& ! empty( $_GET['action'] )
135
		&& isset( $_GET['payment'] )
136
		&& ! empty( $_GET['payment'] )
137
	) {
138
		$payment_count = isset( $_GET['payment'] ) ? count( $_GET['payment'] ) : 0;
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-sanitized input variable: $_GET
Loading history...
139
140
		switch ( $_GET['action'] ) {
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-sanitized input variable: $_GET
Loading history...
141 View Code Duplication
			case 'delete':
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...
142
				Give()->notices->register_notice( array(
143
					'id'          => 'bulk_action_delete',
144
					'type'        => 'updated',
145
					'description' => sprintf(
146
						_n(
147
							'Successfully deleted one transaction.',
148
							'Successfully deleted %d transactions.',
149
							$payment_count,
150
							'give'
151
						),
152
						$payment_count ),
0 ignored issues
show
Coding Style introduced by
This line of the multi-line function call does not seem to be indented correctly. Expected 20 spaces, but found 24.
Loading history...
153
					'show'        => true,
154
				) );
155
156
				break;
157
158 View Code Duplication
			case 'resend-receipt':
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...
159
				Give()->notices->register_notice( array(
160
					'id'          => 'bulk_action_resend_receipt',
161
					'type'        => 'updated',
162
					'description' => sprintf(
163
						_n(
164
							'Successfully sent email receipt to one recipient.',
165
							'Successfully sent email receipts to %d recipients.',
166
							$payment_count,
167
							'give'
168
						),
169
						$payment_count
170
					),
171
					'show'        => true,
172
				) );
173
				break;
174
		}
175
	}
176
177
	// Add give message notices.
178
	if ( ! empty( $_GET['give-message'] ) ) {
0 ignored issues
show
introduced by
Detected access of super global var $_GET, probably need manual inspection.
Loading history...
179
		// Donation reports errors.
180
		if ( current_user_can( 'view_give_reports' ) ) {
181
			switch ( $_GET['give-message'] ) {
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-sanitized input variable: $_GET
Loading history...
182 View Code Duplication
				case 'donation_deleted' :
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...
183
					Give()->notices->register_notice( array(
184
						'id'          => 'give-donation-deleted',
185
						'type'        => 'updated',
186
						'description' => __( 'The donation has been deleted.', 'give' ),
187
						'show'        => true,
188
					) );
189
					break;
190 View Code Duplication
				case 'email_sent' :
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...
191
					Give()->notices->register_notice( array(
192
						'id'          => 'give-payment-sent',
193
						'type'        => 'updated',
194
						'description' => __( 'The donation receipt has been resent.', 'give' ),
195
						'show'        => true,
196
					) );
197
					break;
198 View Code Duplication
				case 'refreshed-reports' :
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...
199
					Give()->notices->register_notice( array(
200
						'id'          => 'give-refreshed-reports',
201
						'type'        => 'updated',
202
						'description' => __( 'The reports cache has been cleared.', 'give' ),
203
						'show'        => true,
204
					) );
205
					break;
206 View Code Duplication
				case 'donation-note-deleted' :
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...
207
					Give()->notices->register_notice( array(
208
						'id'          => 'give-donation-note-deleted',
209
						'type'        => 'updated',
210
						'description' => __( 'The donation note has been deleted.', 'give' ),
211
						'show'        => true,
212
					) );
213
					break;
214
			}
215
		}
216
217
		// Give settings notices and errors.
218
		if ( current_user_can( 'manage_give_settings' ) ) {
219
			switch ( $_GET['give-message'] ) {
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-sanitized input variable: $_GET
Loading history...
220 View Code Duplication
				case 'settings-imported' :
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...
221
					Give()->notices->register_notice( array(
222
						'id'          => 'give-settings-imported',
223
						'type'        => 'updated',
224
						'description' => __( 'The settings have been imported.', 'give' ),
225
						'show'        => true,
226
					) );
227
					break;
228 View Code Duplication
				case 'api-key-generated' :
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...
229
					Give()->notices->register_notice( array(
230
						'id'          => 'give-api-key-generated',
231
						'type'        => 'updated',
232
						'description' => __( 'API keys have been generated.', 'give' ),
233
						'show'        => true,
234
					) );
235
					break;
236 View Code Duplication
				case 'api-key-exists' :
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...
237
					Give()->notices->register_notice( array(
238
						'id'          => 'give-api-key-exists',
239
						'type'        => 'updated',
240
						'description' => __( 'The specified user already has API keys.', 'give' ),
241
						'show'        => true,
242
					) );
243
					break;
244 View Code Duplication
				case 'api-key-regenerated' :
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...
245
					Give()->notices->register_notice( array(
246
						'id'          => 'give-api-key-regenerated',
247
						'type'        => 'updated',
248
						'description' => __( 'API keys have been regenerated.', 'give' ),
249
						'show'        => true,
250
					) );
251
					break;
252 View Code Duplication
				case 'api-key-revoked' :
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...
253
					Give()->notices->register_notice( array(
254
						'id'          => 'give-api-key-revoked',
255
						'type'        => 'updated',
256
						'description' => __( 'API keys have been revoked.', 'give' ),
257
						'show'        => true,
258
					) );
259
					break;
260 View Code Duplication
				case 'sent-test-email' :
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...
261
					Give()->notices->register_notice( array(
262
						'id'          => 'give-sent-test-email',
263
						'type'        => 'updated',
264
						'description' => __( 'The test email has been sent.', 'give' ),
265
						'show'        => true,
266
					) );
267
					break;
268 View Code Duplication
				case 'matched-success-failure-page':
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...
269
					Give()->notices->register_notice( array(
270
						'id'          => 'give-matched-success-failure-page',
271
						'type'        => 'updated',
272
						'description' => __( 'You cannot set the success and failed pages to the same page', 'give' ),
273
						'show'        => true,
274
					) );
275
					break;
276
			}
277
		}
278
		// Payments errors.
279
		if ( current_user_can( 'edit_give_payments' ) ) {
280
			switch ( $_GET['give-message'] ) {
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-sanitized input variable: $_GET
Loading history...
281 View Code Duplication
				case 'note-added' :
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...
282
					Give()->notices->register_notice( array(
283
						'id'          => 'give-note-added',
284
						'type'        => 'updated',
285
						'description' => __( 'The donation note has been added.', 'give' ),
286
						'show'        => true,
287
					) );
288
					break;
289 View Code Duplication
				case 'payment-updated' :
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...
290
					Give()->notices->register_notice( array(
291
						'id'          => 'give-payment-updated',
292
						'type'        => 'updated',
293
						'description' => __( 'The donation has been updated.', 'give' ),
294
						'show'        => true,
295
					) );
296
					break;
297
			}
298
		}
299
300
		// Donor Notices.
301
		if ( current_user_can( 'edit_give_payments' ) ) {
302
			switch ( $_GET['give-message'] ) {
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-sanitized input variable: $_GET
Loading history...
303 View Code Duplication
				case 'donor-deleted' :
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...
304
					Give()->notices->register_notice( array(
305
						'id'          => 'give-donor-deleted',
306
						'type'        => 'updated',
307
						'description' => __( 'The donor has been deleted.', 'give' ),
308
						'show'        => true,
309
					) );
310
					break;
311
312 View Code Duplication
				case 'email-added' :
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...
313
					Give()->notices->register_notice( array(
314
						'id'          => 'give-donor-email-added',
315
						'type'        => 'updated',
316
						'description' => __( 'Donor email added.', 'give' ),
317
						'show'        => true,
318
					) );
319
					break;
320
321 View Code Duplication
				case 'email-removed' :
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...
322
					Give()->notices->register_notice( array(
323
						'id'          => 'give-donor-email-removed',
324
						'type'        => 'updated',
325
						'description' => __( 'Donor email removed.', 'give' ),
326
						'show'        => true,
327
					) );
328
					break;
329
330 View Code Duplication
				case 'email-remove-failed' :
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...
331
					Give()->notices->register_notice( array(
332
						'id'          => 'give-donor-email-remove-failed',
333
						'type'        => 'updated',
334
						'description' => __( 'Failed to remove donor email.', 'give' ),
335
						'show'        => true,
336
					) );
337
					break;
338
339 View Code Duplication
				case 'primary-email-updated' :
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...
340
					Give()->notices->register_notice( array(
341
						'id'          => 'give-donor-primary-email-updated',
342
						'type'        => 'updated',
343
						'description' => __( 'Primary email updated for donor.', 'give' ),
344
						'show'        => true,
345
					) );
346
					break;
347
348 View Code Duplication
				case 'primary-email-failed' :
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...
349
					Give()->notices->register_notice( array(
350
						'id'          => 'give-donor-primary-email-failed',
351
						'type'        => 'updated',
352
						'description' => __( 'Failed to set primary email.', 'give' ),
353
						'show'        => true,
354
					) );
355
					break;
356
			}
357
		}
358
	}
359
}
360
361
add_action( 'admin_notices', '_give_register_admin_notices', - 1 );
362
363
364
/**
365
 * Display admin bar when active.
366
 *
367
 * @param WP_Admin_Bar $wp_admin_bar WP_Admin_Bar instance, passed by reference.
368
 *
369
 * @return bool
370
 */
371
function _give_show_test_mode_notice_in_admin_bar( $wp_admin_bar ) {
372
	$is_test_mode = ! empty( $_POST['test_mode'] ) ?
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
373
		give_is_setting_enabled( $_POST['test_mode'] ) :
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...
374
		give_is_test_mode();
375
376
	if (
377
		! current_user_can( 'view_give_reports' ) ||
378
		! $is_test_mode
379
	) {
380
		return false;
381
	}
382
383
	// Add the main siteadmin menu item.
384
	$wp_admin_bar->add_menu( array(
385
		'id'     => 'give-test-notice',
386
		'href'   => admin_url( 'edit.php?post_type=give_forms&page=give-settings&tab=gateways' ),
387
		'parent' => 'top-secondary',
388
		'title'  => esc_html__( 'Give Test Mode Active', 'give' ),
389
		'meta'   => array( 'class' => 'give-test-mode-active' ),
390
	) );
391
392
	return true;
393
}
394
395
add_action( 'admin_bar_menu', '_give_show_test_mode_notice_in_admin_bar', 1000, 1 );
396
397
/**
398
 * Add Link to Import page in from donation archive and donation single page
399
 *
400
 * @since 1.8.13
401
 */
402
function give_import_page_link_callback() {
403
	?>
404
	<a href="<?php echo esc_url( give_import_page_url() ); ?>"
405
	   class="page-import-action page-title-action"><?php esc_html_e( 'Import Donations', 'give' ); ?></a>
406
407
	<style type="text/css">
408
		<?php
409
		// Check if view donation single page only.
410
		if ( ! empty( $_REQUEST['view'] ) && 'view-payment-details' === (string) give_clean( $_REQUEST['view'] ) && 'give-payment-history' === give_clean( $_REQUEST['page'] ) ) {
0 ignored issues
show
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_REQUEST
Loading history...
introduced by
Detected usage of a non-validated input variable: $_REQUEST
Loading history...
411
			?>
412
		.wrap #transaction-details-heading {
413
			display: inline-block;
414
		}
415
416
		<?php
417
	} else {
418
		?>
419
		/* So the "New Donation" button aligns with the wp-admin h1 tag */
420
		.wrap > h1 {
421
			display: inline-block;
422
			margin-right: 5px;
423
		}
424
425
		<?php
426
	} ?>
427
	</style>
428
	<?php
429
}
430
431
432
add_action( 'give_payments_page_top', 'give_import_page_link_callback', 11 );
433
add_action( 'give_view_order_details_before', 'give_import_page_link_callback', 11 );
434
435
/**
436
 * Load donation import ajax callback
437
 * Fire when importing from CSV start
438
 *
439
 * @since  1.8.13
440
 *
441
 * @return json $json_data
442
 */
443
function give_donation_import_callback() {
444
	$import_setting = array();
445
	$fields         = isset( $_POST['fields'] ) ? $_POST['fields'] : null;
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...
446
447
	parse_str( $fields );
448
449
	$import_setting['create_user'] = $create_user;
450
	$import_setting['mode']        = $mode;
451
	$import_setting['delimiter']   = $delimiter;
452
	$import_setting['csv']         = $csv;
453
	$import_setting['delete_csv']  = $delete_csv;
454
455
	// Parent key id.
456
	$main_key = maybe_unserialize( $main_key );
457
458
	$current    = absint( $_REQUEST['current'] );
0 ignored issues
show
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_REQUEST
Loading history...
459
	$total_ajax = absint( $_REQUEST['total_ajax'] );
0 ignored issues
show
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_REQUEST
Loading history...
460
	$start      = absint( $_REQUEST['start'] );
0 ignored issues
show
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_REQUEST
Loading history...
461
	$end        = absint( $_REQUEST['end'] );
0 ignored issues
show
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_REQUEST
Loading history...
462
	$next       = absint( $_REQUEST['next'] );
0 ignored issues
show
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_REQUEST
Loading history...
463
	$total      = absint( $_REQUEST['total'] );
0 ignored issues
show
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_REQUEST
Loading history...
464
	$per_page   = absint( $_REQUEST['per_page'] );
0 ignored issues
show
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_REQUEST
Loading history...
465
	if ( empty( $delimiter ) ) {
466
		$delimiter = ',';
467
	}
468
469
	// processing done here.
470
	$raw_data = give_get_donation_data_from_csv( $csv, $start, $end, $delimiter );
471
	$raw_key  = maybe_unserialize( $mapto );
472
473
	//Prevent normal emails
474
	remove_action( 'give_complete_donation', 'give_trigger_donation_receipt', 999 );
475
	remove_action( 'give_insert_user', 'give_new_user_notification', 10 );
476
	remove_action( 'give_insert_payment', 'give_payment_save_page_data' );
477
478
	foreach ( $raw_data as $row_data ) {
479
		give_save_import_donation_to_db( $raw_key, $row_data, $main_key, $import_setting );
480
	}
481
482
	// Check if function exists or not.
483
	if ( function_exists( 'give_payment_save_page_data' ) ) {
484
		add_action( 'give_insert_payment', 'give_payment_save_page_data' );
485
	}
486
	add_action( 'give_insert_user', 'give_new_user_notification', 10, 2 );
487
	add_action( 'give_complete_donation', 'give_trigger_donation_receipt', 999 );
488
489
	if ( $next == false ) {
0 ignored issues
show
introduced by
Found "== false". Use Yoda Condition checks, you must
Loading history...
490
		$json_data = array(
491
			'success' => true,
492
			'message' => __( 'All donation uploaded successfully!', 'give' ),
493
		);
494
	} else {
495
		$index_start = $start;
496
		$index_end   = $end;
497
		$last        = false;
498
		$next        = true;
499
		if ( $next ) {
500
			$index_start = $index_start + $per_page;
501
			$index_end   = $per_page + ( $index_start - 1 );
502
		}
503
		if ( $index_end >= $total ) {
504
			$index_end = $total;
505
			$last      = true;
506
		}
507
		$json_data = array(
508
			'raw_data' => $raw_data,
509
			'raw_key'  => $raw_key,
510
			'next'     => $next,
511
			'start'    => $index_start,
512
			'end'      => $index_end,
513
			'last'     => $last,
514
		);
515
	}
516
517
	$url              = give_import_page_url( array(
518
		'step'       => '4',
519
		'csv'        => $csv,
520
		'total'      => $total,
521
		'delete_csv' => $import_setting['delete_csv'],
522
		'success'    => ( isset( $json_data['success'] ) ? $json_data['success'] : '' ),
523
	) );
524
	$json_data['url'] = $url;
525
526
	$current ++;
527
	$json_data['current'] = $current;
528
529
	$percentage              = ( 100 / ( $total_ajax + 1 ) ) * $current;
530
	$json_data['percentage'] = $percentage;
531
532
	$json_data = apply_filters( 'give_import_ajax_responces', $json_data, $fields );
533
	wp_die( json_encode( $json_data ) );
534
}
535
536
add_action( 'wp_ajax_give_donation_import', 'give_donation_import_callback' );
537
538
539
/**
540
 * Initializes blank slate content if a list table is empty.
541
 *
542
 * @since 1.8.13
543
 */
544
function give_blank_slate() {
545
	$blank_slate = new Give_Blank_Slate();
546
	$blank_slate->init();
547
}
548
549
add_action( 'current_screen', 'give_blank_slate' );
550
551
/**
552
 * Get Array of WP User Roles.
553
 *
554
 * @since 1.8.13
555
 *
556
 * @return array
557
 */
558
function give_get_user_roles() {
559
	$user_roles = array();
560
561
	// Loop through User Roles.
562
	foreach ( get_editable_roles() as $role_name => $role_info ):
563
		$user_roles[ $role_name ] = $role_info['name'];
564
	endforeach;
565
566
	return $user_roles;
567
}