PluginProbe
InfiniteWP Client / trunk
InfiniteWP Client vtrunk
1.13.10 1.13.7 trunk 0.1.4 0.1.5 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.1.0 1.1.1 1.1.10 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.11.0 1.11.1 1.12.1 1.12.3 All 92 releases
iwp-client / addons / manage_users / user.class.php

user.class.php in InfiniteWP Client trunk, at addons/manage_users/user.class.php

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