PluginProbe
ManageWP Worker / trunk
ManageWP Worker vtrunk
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 trunk, at src/MMB/User.php

295 lines 11.5 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'] = is_array($temp->$field) ? array_keys($temp->$field) : array();
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 // Initialize $username if not provided in $args
153 if (!isset($username)) {
154 $username = '';
155 }
156
157 $return = array();
158 if (count($users)) {
159 foreach ($users as $user) {
160 $result = '';
161 $user_obj = $this->mmb_get_user_info($user);
162 if ($user_obj != false) {
163 switch ($user_edit_action) {
164 case 'change-password':
165 if ($new_password) {
166 $user_data = array();
167 $userdata['user_pass'] = $new_password;
168 $userdata['ID'] = $user_obj->ID;
169 $result = wp_update_user($userdata);
170 } else {
171 $result = array('error' => 'No password provided.');
172 }
173 break;
174 case 'change-role':
175 if ($new_role) {
176 if ($user != $username) {
177 if (!$this->last_admin($user_obj)) {
178 $user_data = array();
179 $userdata['ID'] = $user_obj->ID;
180 $userdata['role'] = strtolower($new_role);
181 $result = wp_update_user($userdata);
182 } else {
183 $result = array('error' => 'Cannot change role to the only one left admin user.');
184 }
185 } else {
186 $result = array('error' => 'Cannot change role to user assigned for ManageWP.');
187 }
188 } else {
189 $result = array('error' => 'No role provided.');
190 }
191 break;
192 case 'change-description':
193 $userdata = array();
194 $userdata['ID'] = $user_obj->ID;
195 $userdata['description'] = trim($change_description);
196 $result = wp_update_user($userdata);
197 break;
198 case 'delete-user':
199 if ($user != $username) {
200 if (!$this->last_admin($user_obj)) {
201 if ($reassign_user) {
202 $to_user = $this->mmb_get_user_info($reassign_user);
203 if ($to_user != false) {
204 $result = wp_delete_user($user_obj->ID, $to_user->ID);
205 } else {
206 $result = array('error' => 'User not deleted. User to reassign posts doesn\'t exist.');
207 }
208 } else {
209 $result = wp_delete_user($user_obj->ID);
210 }
211 } else {
212 $result = array('error' => 'Cannot delete the only one left admin user.');
213 }
214 } else {
215 $result = array('error' => 'Cannot delete user assigned for ManageWP.');
216 }
217
218 break;
219 case 'edit-user':
220 if (!$new_user_email) {
221 $result = array('error' => 'No email provided.');
222 break;
223 }
224
225 if (!$new_role) {
226 $result = array('error' => 'No role provided.');
227 break;
228 }
229
230 if ($user == $username) {
231 $result = array('error' => 'Cannot change role to user assigned for ManageWP.');
232 break;
233 }
234
235 if ($this->last_admin($user_obj) && $new_role != 'administrator') {
236 $result = array('error' => 'Cannot change role to the only one left admin user.');
237 break;
238 }
239
240 $userdata = array();
241 $userdata['ID'] = $user_obj->ID;
242
243 if ($new_password) {
244 $userdata['user_pass'] = $new_password;
245 }
246
247 $userdata['first_name'] = $new_first_name;
248 $userdata['last_name'] = $new_last_name;
249 $userdata['user_email'] = $new_user_email;
250 $userdata['role'] = strtolower($new_role);
251 $userdata['description'] = trim($new_description);
252 $userdata['user_url'] = $new_user_url;
253 $result = wp_update_user($userdata);
254 break;
255 default:
256 $result = array('error' => 'Wrong action provided. Please try again.');
257 break;
258 }
259 } else {
260 $result = array('error' => 'User not found.');
261 }
262
263 if (is_wp_error($result)) {
264 $result = array('error' => $result->get_error_message());
265 }
266
267 $return[$user] = $result;
268 }
269 }
270
271 return $return;
272 }
273
274 //Check if user is the only one admin on the site
275 public function last_admin($user_obj)
276 {
277 global $wpdb;
278 $field = $wpdb->prefix."capabilities";
279 $capabilities = array_map('strtolower', array_keys($user_obj->$field));
280 $result = count_users();
281 if (in_array('administrator', $capabilities)) {
282 if (!function_exists('count_users')) {
283 include_once ABSPATH.WPINC.'/user.php';
284 }
285
286 $result = count_users();
287 if ($result['avail_roles']['administrator'] == 1) {
288 return true;
289 }
290 }
291
292 return false;
293 }
294 }
295