Completed
Push — 312-fix/delete-post-meta-modul... ( fbbe37...602413 )
by Sudar
14:44 queued 11:16
created

DeleteUsersByUserRoleModule   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 111
Duplicated Lines 0 %

Test Coverage

Coverage 39.02%

Importance

Changes 0
Metric Value
wmc 7
dl 0
loc 111
ccs 16
cts 41
cp 0.3902
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
B render() 0 34 2
A initialize() 0 11 1
A convert_user_input_to_options() 0 4 1
A get_success_message() 0 3 1
A build_query() 0 7 1
A filter_js_array() 0 10 1
1
<?php
2
3
namespace BulkWP\BulkDelete\Core\Users\Modules;
4
5
use BulkWP\BulkDelete\Core\Users\UsersModule;
6
7 1
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
8
9
/**
10
 * Bulk Delete Users by User Role Module.
11
 *
12
 * @since 5.5
13
 * @since 6.0.0 Renamed to DeleteUsersByUserRoleModule
14
 */
15
class DeleteUsersByUserRoleModule extends UsersModule {
16
	/**
17
	 * Initialize and setup variables.
18
	 *
19
	 * @since 5.5
20
	 */
21 4
	protected function initialize() {
22 4
		$this->item_type     = 'users';
23 4
		$this->field_slug    = 'u_role';
24 4
		$this->meta_box_slug = 'bd_users_by_role';
25 4
		$this->action        = 'delete_users_by_role';
26 4
		$this->cron_hook     = 'do-bulk-delete-users-by-role';
27 4
		$this->scheduler_url = 'https://bulkwp.com/addons/scheduler-for-deleting-users-by-role/?utm_source=wpadmin&utm_campaign=BulkDelete&utm_medium=buynow&utm_content=bd-u-ur';
28 4
		$this->messages      = array(
29 4
			'box_label'  => __( 'By User Role', 'bulk-delete' ),
30 4
			'scheduled'  => __( 'Users from the selected user role are scheduled for deletion.', 'bulk-delete' ),
31 4
			'cron_label' => __( 'Delete Users by User Role', 'bulk-delete' ),
32
		);
33 4
	}
34
35
	/**
36
	 * Render delete users box.
37
	 *
38
	 * @since 5.5
39
	 */
40
	public function render() {
41
	?>
42
		<h4><?php _e( 'Select the user roles from which you want to delete users', 'bulk-delete' ); ?></h4>
43
44
		<fieldset class="options">
45
			<table class="optiontable">
46
				<?php
47
				$users_count = count_users();
48
				foreach ( $users_count['avail_roles'] as $role => $count ) {
49
					?>
50
					<tr>
51
						<td scope="row">
52
							<input name="smbd_u_roles[]" value="<?php echo $role; ?>" type="checkbox">
53
							<label for="smbd_u_roles"><?php echo $role; ?> (<?php echo $count . ' ';
54
								_e( 'Users', 'bulk-delete' ); ?>)</label>
55
						</td>
56
					</tr>
57
					<?php
58
				}
59
				?>
60
			</table>
61
62
			<table class="optiontable">
63
				<?php
64
					$this->render_filtering_table_header();
65
					$this->render_user_login_restrict_settings();
66
					$this->render_user_with_no_posts_settings();
67
					$this->render_limit_settings();
68
					$this->render_cron_settings();
69
				?>
70
			</table>
71
		</fieldset>
72
	<?php
73
		$this->render_submit_button();
74
	}
75
76
	protected function convert_user_input_to_options( $request, $options ) {
77
		$options['selected_roles'] = bd_array_get( $request, 'smbd_u_roles', array() );
0 ignored issues
show
Bug introduced by
array() of type array is incompatible with the type string expected by parameter $default of bd_array_get(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

77
		$options['selected_roles'] = bd_array_get( $request, 'smbd_u_roles', /** @scrutinizer ignore-type */ array() );
Loading history...
78
79
		return $options;
80
	}
81
82
	/**
83
	 * Build query params for WP_User_Query by using delete options.
84
	 *
85
	 * Return an empty query array to short-circuit deletion.
86
	 *
87
	 * @since 6.0.0
88
	 *
89
	 * @param array $options Delete options.
90
	 *
91
	 * @return array Query.
92
	 */
93 4
	protected function build_query( $options ) {
94
		$query = array(
95 4
			'role__in' => $options['selected_roles'],
96 4
			'number'   => $options['limit_to'],
97
		);
98
99 4
		return $query;
100
	}
101
102
	/**
103
	 * Filter JS Array and add validation hooks.
104
	 *
105
	 * @since 5.5
106
	 *
107
	 * @param array $js_array JavaScript Array.
108
	 *
109
	 * @return array Modified JavaScript Array
110
	 */
111
	public function filter_js_array( $js_array ) {
112
		$js_array['dt_iterators'][] = '_' . $this->field_slug;
113
114
		$js_array['pre_action_msg'][ $this->action ] = 'deleteUsersWarning';
115
		$js_array['msg']['deleteUsersWarning']       = __( 'Are you sure you want to delete all the users from the selected user role?', 'bulk-delete' );
116
117
		$js_array['error_msg'][ $this->action ] = 'selectOneUserRole';
118
		$js_array['msg']['selectOneUserRole']   = __( 'Select at least one user role from which users should be deleted', 'bulk-delete' );
119
120
		return $js_array;
121
	}
122
123
	protected function get_success_message( $items_deleted ) {
124
		/* translators: 1 Number of users deleted */
125
		return _n( 'Deleted %d user from the selected roles', 'Deleted %d users from the selected roles', $items_deleted, 'bulk-delete' );
126
	}
127
}
128