Passed
Push — 579-feature/delete-users-belon... ( cde1ce )
by
unknown
04:38
created

DeleteUsersByUserRoleModule::render()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 17
nc 1
nop 0
dl 0
loc 21
rs 9.7
c 0
b 0
f 0
1
<?php
2
3
namespace BulkWP\BulkDelete\Core\Users\Modules;
4
5
use BulkWP\BulkDelete\Core\Users\UsersModule;
6
7
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
	protected function initialize() {
22
		$this->item_type     = 'users';
23
		$this->field_slug    = 'u_role';
24
		$this->meta_box_slug = 'bd_users_by_role';
25
		$this->action        = 'delete_users_by_role';
26
		$this->cron_hook     = 'do-bulk-delete-users-by-role';
27
		$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
		$this->messages      = array(
29
			'box_label'  => __( 'By User Role', 'bulk-delete' ),
30
			'scheduled'  => __( 'Users from the selected user role are scheduled for deletion.', 'bulk-delete' ),
31
			'cron_label' => __( 'Delete Users by User Role', 'bulk-delete' ),
32
		);
33
	}
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 $this->render_user_role_dropdown( true ); ?>
47
			</table>
48
49
			<table class="optiontable">
50
				<?php
51
					$this->render_filtering_table_header();
52
					$this->render_user_login_restrict_settings();
53
					$this->render_user_with_no_posts_settings();
54
					$this->render_limit_settings();
55
					$this->render_cron_settings();
56
				?>
57
			</table>
58
		</fieldset>
59
		<?php
60
		$this->render_submit_button();
61
	}
62
63
	protected function convert_user_input_to_options( $request, $options ) {
64
		$options['selected_roles'] = bd_array_get( $request, 'smbd_' . $this->field_slug . '_roles', array() );
65
66
		return $options;
67
	}
68
69
	/**
70
	 * Build query params for WP_User_Query by using delete options.
71
	 *
72
	 * Return an empty query array to short-circuit deletion.
73
	 *
74
	 * @since 6.0.0
75
	 *
76
	 * @param array $options Delete options.
77
	 *
78
	 * @return array Query.
79
	 */
80
	protected function build_query( $options ) {
81
		// No role is selected.
82
		if ( empty( $options['selected_roles'] ) ) {
83
			return array();
84
		}
85
86
		$no_role_selected = in_array( 'none', $options['selected_roles'], true );
87
		$no_role_user_ids = array();
88
		$query            = array();
89
90
		if ( $no_role_selected ) {
91
			$args = array(
92
				'role__not_in' => array_keys( get_editable_roles() ),
93
				'fields'       => 'ids',
94
			);
95
			$no_role_user_ids = get_users( $args );
96
97
			$options['selected_roles'] = array_diff( $options['selected_roles'], array( 'none' ) );
98
		}
99
100
		if ( ! empty( $options['selected_roles'] ) ) {
101
			$query['role__in'] = $options['selected_roles'];
102
		}
103
104
		if ( ! empty( $no_role_user_ids ) ) {
105
			$query['include'] = $no_role_user_ids;
106
		}
107
		$query['number'] = $options['limit_to'];
108
109
		$date_query = $this->get_date_query( $options );
110
111
		if ( ! empty( $date_query ) ) {
112
			$query['date_query'] = $date_query;
113
		}
114
115
		return $query;
116
	}
117
118
	protected function append_to_js_array( $js_array ) {
119
		$js_array['validators'][ $this->action ] = 'validateUserRole';
120
121
		$js_array['pre_action_msg'][ $this->action ] = 'deleteUsersWarning';
122
		$js_array['msg']['deleteUsersWarning']       = __( 'Are you sure you want to delete all the users from the selected user role?', 'bulk-delete' );
123
124
		$js_array['error_msg'][ $this->action ] = 'selectOneUserRole';
125
		$js_array['msg']['selectOneUserRole']   = __( 'Select at least one user role from which users should be deleted', 'bulk-delete' );
126
127
		return $js_array;
128
	}
129
130
	protected function get_success_message( $items_deleted ) {
131
		/* translators: 1 Number of users deleted */
132
		return _n( 'Deleted %d user from the selected roles', 'Deleted %d users from the selected roles', $items_deleted, 'bulk-delete' );
133
	}
134
}
135