Test Failed
Push — issues/2042 ( e8b6b5 )
by Ravinder
05:59
created

admin-actions.php ➔ give_blank_slate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
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() ) {
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
		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
add_action( 'admin_bar_menu', '_give_show_test_mode_notice_in_admin_bar', 1000, 1 );
395
396
/**
397
 * Initializes blank slate content if a list table is empty.
398
 *
399
 * @since 1.8.13
400
 */
401
function give_blank_slate() {
402
	$blank_slate = new Give_Blank_Slate();
403
	$blank_slate->init();
404
}
405
add_action( 'current_screen', 'give_blank_slate' );
406
407
/**
408
 * Get Array of WP User Roles.
409
 *
410
 * @since 1.8.13
411
 *
412
 * @return array
413
 */
414
function give_get_user_roles() {
415
	$user_roles = array();
416
417
	// Loop through User Roles.
418
	foreach( get_editable_roles() as $role_name => $role_info ):
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...
419
		$user_roles[ $role_name ] = $role_info['name'];
420
	endforeach;
421
422
	return $user_roles;
423
}