PluginProbe
ManageWP Worker / 4.9.16
ManageWP Worker v4.9.16
4.9.38 4.9.37 4.9.36 4.9.35 4.9.34 3.8.7 3.8.8 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.18 3.9.19 3.9.2 3.9.20 3.9.21 3.9.22 3.9.23 3.9.24 All 73 releases
worker / src / MMB / User.php

User.php in ManageWP Worker 4.9.16, at src/MMB/User.php

290 lines 11.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /*************************************************************
4 * user.class.php
5 * Add Users
6 * Copyright (c) 2011 Prelovac Media
7 * www.prelovac.com
8 **************************************************************/
9 class MMB_User extends MMB_Core
10 {
11 public function __construct()
12 {
13 parent::__construct();
14 }
15
16 public function get_users($args)
17 {
18 global $wpdb;
19
20 //$args: $user_roles;
21 if (empty($args)) {
22 return false;
23 }
24
25 $user_roles = isset($args['user_roles']) ? $args['user_roles'] : array();
26 $username_filter = isset($args['username_filter']) ? $args['username_filter'] : '';
27
28 $userlevels = array();
29 $level_strings = array();
30 foreach ($user_roles as $user_role) {
31 switch (strtolower($user_role)) {
32 case 'subscriber' :
33 $userlevels[] = 0;
34 $level_strings[] = $user_role;
35 break;
36 case 'contributor' :
37 $userlevels[] = 1;
38 $level_strings[] = $user_role;
39 break;
40 case 'author' :
41 $userlevels[] = 2;
42 $level_strings[] = $user_role;
43 break;
44 case 'editor' :
45 $userlevels[] = 7;
46 $level_strings[] = $user_role;
47 break;
48 case 'administrator' :
49 $userlevels[] = 10;
50 $level_strings[] = $user_role;
51 break;
52 default:
53 break;
54 }
55 }
56
57 $users = array();
58 $userlevel_qry = "('".implode("','", $userlevels)."')";
59 $queryOR = '';
60 if (!empty($level_strings)) {
61 foreach ($level_strings as $level) {
62 if (!empty($queryOR)) {
63 $queryOR .= ' OR ';
64 }
65 $queryOR .= "meta_value LIKE '%{$level}%'";
66 }
67 }
68 $field = $wpdb->prefix."capabilities";
69 $field2 = $wpdb->prefix."user_level";
70
71 $metaQuery = "SELECT * from {$wpdb->usermeta} WHERE meta_key = '{$field}' AND ({$queryOR})";
72 $user_metas = $wpdb->get_results($metaQuery);
73
74 if ($user_metas == false || empty($user_metas)) {
75 $metaQuery = "SELECT * from {$wpdb->usermeta} WHERE meta_key = '{$field2}' AND meta_value IN {$userlevel_qry}";
76 $user_metas = $wpdb->get_results($metaQuery);
77 }
78
79 $include = array(0 => 0);
80 if (is_array($user_metas) && !empty($user_metas)) {
81 foreach ($user_metas as $user_meta) {
82 $include[] = $user_meta->user_id;
83 }
84 }
85
86 $args = array(0, 0);
87 $args['include'] = $include;
88 $args['fields'] = 'all_with_meta';
89 if (!empty($username_filter)) {
90 $args['search'] = $username_filter;
91 }
92 $temp_users = get_users($args);
93 $user = array();
94 foreach ((array) $temp_users as $temp) {
95 $user['user_id'] = $temp->ID;
96 $user['user_login'] = $temp->user_login;
97 $user['wp_capabilities'] = array_keys($temp->$field);
98 $users[] = $user;
99 }
100
101 return array('users' => $users);
102 }
103
104 public function add_user($args)
105 {
106 if (!function_exists('username_exists') || !function_exists('email_exists')) {
107 include_once ABSPATH.WPINC.'/registration.php';
108 }
109
110 if (username_exists($args['user_login'])) {
111 return array('error' => 'Username already exists');
112 }
113
114 if (email_exists($args['user_email'])) {
115 return array('error' => 'Email already exists');
116 }
117
118 if (!function_exists('wp_insert_user')) {
119 include_once ABSPATH.'wp-admin/includes/user.php';
120 }
121
122 $user_id = wp_insert_user($args);
123
124 if ($user_id) {
125 if ($args['email_notify']) {
126 //require_once ABSPATH . WPINC . '/pluggable.php';
127 wp_new_user_notification($user_id, $args['user_pass']);
128 }
129
130 return $user_id;
131 } else {
132 return array('error' => 'User not added. Please try again.');
133 }
134 }
135
136 public function edit_users($args)
137 {
138 if (empty($args)) {
139 return false;
140 }
141 if (!function_exists('get_user_to_edit')) {
142 include_once ABSPATH.'wp-admin/includes/user.php';
143 }
144 if (!function_exists('wp_update_user')) {
145 include_once ABSPATH.WPINC.'/user.php';
146 }
147
148 extract($args);
149 //$args: $users, $new_role, $new_password, $user_edit_action
150 // if action is edit-user $args are: $users, $new_role, $new_password, $user_edit_action, $new_first_name, $new_last_name, $new_user_email, $new_description, $new_user_url
151
152 $return = array();
153 if (count($users)) {
154 foreach ($users as $user) {
155 $result = '';
156 $user_obj = $this->mmb_get_user_info($user);
157 if ($user_obj != false) {
158 switch ($user_edit_action) {
159 case 'change-password':
160 if ($new_password) {
161 $user_data = array();
162 $userdata['user_pass'] = $new_password;
163 $userdata['ID'] = $user_obj->ID;
164 $result = wp_update_user($userdata);
165 } else {
166 $result = array('error' => 'No password provided.');
167 }
168 break;
169 case 'change-role':
170 if ($new_role) {
171 if ($user != $username) {
172 if (!$this->last_admin($user_obj)) {
173 $user_data = array();
174 $userdata['ID'] = $user_obj->ID;
175 $userdata['role'] = strtolower($new_role);
176 $result = wp_update_user($userdata);
177 } else {
178 $result = array('error' => 'Cannot change role to the only one left admin user.');
179 }
180 } else {
181 $result = array('error' => 'Cannot change role to user assigned for ManageWP.');
182 }
183 } else {
184 $result = array('error' => 'No role provided.');
185 }
186 break;
187 case 'change-description':
188 $userdata = array();
189 $userdata['ID'] = $user_obj->ID;
190 $userdata['description'] = trim($change_description);
191 $result = wp_update_user($userdata);
192 break;
193 case 'delete-user':
194 if ($user != $username) {
195 if (!$this->last_admin($user_obj)) {
196 if ($reassign_user) {
197 $to_user = $this->mmb_get_user_info($reassign_user);
198 if ($to_user != false) {
199 $result = wp_delete_user($user_obj->ID, $to_user->ID);
200 } else {
201 $result = array('error' => 'User not deleted. User to reassign posts doesn\'t exist.');
202 }
203 } else {
204 $result = wp_delete_user($user_obj->ID);
205 }
206 } else {
207 $result = array('error' => 'Cannot delete the only one left admin user.');
208 }
209 } else {
210 $result = array('error' => 'Cannot delete user assigned for ManageWP.');
211 }
212
213 break;
214 case 'edit-user':
215 if (!$new_user_email) {
216 $result = array('error' => 'No email provided.');
217 break;
218 }
219
220 if (!$new_role) {
221 $result = array('error' => 'No role provided.');
222 break;
223 }
224
225 if ($user == $username) {
226 $result = array('error' => 'Cannot change role to user assigned for ManageWP.');
227 break;
228 }
229
230 if ($this->last_admin($user_obj) && $new_role != 'administrator') {
231 $result = array('error' => 'Cannot change role to the only one left admin user.');
232 break;
233 }
234
235 $userdata = array();
236 $userdata['ID'] = $user_obj->ID;
237
238 if ($new_password) {
239 $userdata['user_pass'] = $new_password;
240 }
241
242 $userdata['first_name'] = $new_first_name;
243 $userdata['last_name'] = $new_last_name;
244 $userdata['user_email'] = $new_user_email;
245 $userdata['role'] = strtolower($new_role);
246 $userdata['description'] = trim($new_description);
247 $userdata['user_url'] = $new_user_url;
248 $result = wp_update_user($userdata);
249 break;
250 default:
251 $result = array('error' => 'Wrong action provided. Please try again.');
252 break;
253 }
254 } else {
255 $result = array('error' => 'User not found.');
256 }
257
258 if (is_wp_error($result)) {
259 $result = array('error' => $result->get_error_message());
260 }
261
262 $return[$user] = $result;
263 }
264 }
265
266 return $return;
267 }
268
269 //Check if user is the only one admin on the site
270 public function last_admin($user_obj)
271 {
272 global $wpdb;
273 $field = $wpdb->prefix."capabilities";
274 $capabilities = array_map('strtolower', array_keys($user_obj->$field));
275 $result = count_users();
276 if (in_array('administrator', $capabilities)) {
277 if (!function_exists('count_users')) {
278 include_once ABSPATH.WPINC.'/user.php';
279 }
280
281 $result = count_users();
282 if ($result['avail_roles']['administrator'] == 1) {
283 return true;
284 }
285 }
286
287 return false;
288 }
289 }
290