PluginProbe
Send Users Email – Email Subscribers, Email Marketing Newsletter / trunk
Send Users Email – Email Subscribers, Email Marketing Newsletter vtrunk
2.0.3 2.0.2 2.0.1 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.2.0 1.2.1 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 All 51 releases
send-users-email / includes / class-wp-user-remove-group.php

class-wp-user-remove-group.php in Send Users Email – Email Subscribers, Email Marketing Newsletter trunk, at includes/class-wp-user-remove-group.php

189 lines 5.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Summary of SUE_WP_User_Remove_Group
5 * This removes the user in the User Group in the WP User List Page.
6 */
7 class SUE_WP_User_Remove_Group
8 {
9 /**
10 * Initialize hooks
11 * @return void
12 */
13 static public function init_hook()
14 {
15 add_action('manage_users_extra_tablenav', [self::class, 'add_group_delete_field'], 10, 1);
16 add_action('load-users.php', [self::class, 'handle_remove_group_action']);
17 add_action('admin_notices', [self::class, 'display_removal_notice']);
18 }
19
20 /**
21 * Show admin notice after user was removed.
22 * @return void
23 */
24 static public function display_removal_notice()
25 {
26 if (isset($_GET['sue_group_removed'])) {
27 $removed_count = intval($_GET['sue_group_removed']);
28
29 $notice_type = 'success';
30
31 $notice_message = sprintf(
32 _n('%d user has been removed from the group.', '%d users have been removed from the group.', $removed_count, 'send-users-email'),
33 $removed_count
34 );
35
36 $notice_dismissible = true;
37
38 if ($removed_count <= 0) {
39 if($_GET['sue_group_removed'] === 'no-users-selected-for-group-removal'){
40 $notice_message = esc_html__('No users were selected for group removal.', 'send-users-email');
41 } elseif ($_GET['sue_group_removed'] === 'select-a-group-to-remove'){
42 $notice_message = esc_html__('Please select a user group to remove.', 'send-users-email');
43 }
44 $notice_type = 'error';
45 }
46
47 SUE_WP_Admin_Notices::display_notice(
48 $notice_message,
49 $notice_type,
50 $notice_dismissible
51 );
52 }
53 }
54
55 /**
56 * Summary of add_group_delete_field
57 * Add the dropdown group both in top and bottom.
58 * @param mixed $which
59 * @return void
60 */
61 static public function add_group_delete_field($which)
62 {
63 if (!current_user_can('edit_users')) {
64 return;
65 }
66
67 self::show_dropdown_group_field($which);
68 }
69
70 /**
71 * Add the dropdown group and button to remove user in the selected group.
72 * @return void
73 */
74 static public function show_dropdown_group_field($which)
75 {
76 $get_groups = SUE_User_Group::query_group();
77
78 if (empty($get_groups)) {
79 return;
80 }
81
82 $args = [
83 'group_data' => $get_groups,
84 'which' => $which,
85 ];
86
87 require SEND_USERS_EMAIL_PLUGIN_BASE_PATH . '/admin/partials/wp-user-group-dropdown.php';
88 }
89
90 /**
91 * Delete the user in the user group.
92 * @return void
93 */
94 static public function handle_remove_group_action()
95 {
96 $query_args = [];
97
98 if (!isset($_REQUEST['sue_remove_group_btn'])) {
99 return;
100 }
101
102 if (!isset($_REQUEST['sue_remove_group_nonce']) || !wp_verify_nonce($_REQUEST['sue_remove_group_nonce'], 'sue_remove_group')) {
103 wp_die(esc_html__('Security check failed. Please try again.', 'send-users-email'));
104 }
105
106 if (!current_user_can('edit_users')) {
107 wp_die(esc_html__('You do not have permission to perform this action.', 'send-users-email'));
108 }
109
110 if (empty($_REQUEST['sue_wp_user_group_dropdown'])) {
111 $query_args['sue_group_removed'] = 'select-a-group-to-remove';
112 }
113
114 $group_id = 0;
115
116 if (is_array($_REQUEST['sue_wp_user_group_dropdown']) && !empty($_REQUEST['sue_wp_user_group_dropdown'])) {
117 foreach ($_REQUEST['sue_wp_user_group_dropdown'] as $gid) {
118 if (!empty($gid)) {
119 $group_id = intval($gid);
120 }
121 }
122 } else {
123 $group_id = intval($_REQUEST['sue_wp_user_group_dropdown']);
124 }
125
126
127 if($group_id <= 0){
128 $query_args['sue_group_removed'] = 'select-a-group-to-remove';
129 }
130
131 $user_ids = isset($_REQUEST['users']) ? array_map('intval', (array)$_REQUEST['users']) : [];
132
133 if (empty($user_ids)) {
134 $query_args['sue_group_removed'] = 'no-users-selected-for-group-removal';
135 }
136
137 $removed = self::remove_users_from_group($group_id, $user_ids);
138 if ( $removed > 0 ){
139 // All good
140 $query_args['sue_group_removed'] = $removed;
141 }
142
143 wp_redirect(add_query_arg($query_args, admin_url('users.php')));
144 exit;
145 }
146
147 /**
148 * Remove the users in the selected group
149 * @param mixed $group_id
150 * @param mixed $user_ids array of user IDs
151 * @return int
152 */
153 static public function remove_users_from_group($group_id, $user_ids)
154 {
155 $remove = 0;
156 // remove the user from the group user table
157 foreach ($user_ids as $user_id) {
158 $remove += self::remove_user_from_group($user_id, $group_id);
159 }
160
161 return $remove;
162 }
163
164 /**
165 * Delete the user in the user group directly in database.
166 * @param mixed $user_id
167 * @param mixed $group_id
168 * @return bool|int
169 */
170 static public function remove_user_from_group($user_id, $group_id)
171 {
172 global $wpdb;
173
174 $sue_group_user_table = SEND_USERS_EMAIL_GROUP_USER_TABLE;
175
176 // remove the user from the group user table
177 return $wpdb->delete(
178 $sue_group_user_table,
179 [
180 'group_id' => (int)$group_id,
181 'user_id' => (int)$user_id,
182 ],
183 [
184 '%d',
185 '%d',
186 ]
187 );
188 }
189 }