/wp-content/plugins/worker/user.class.php

https://bitbucket.org/anneivycat/ebcookhouse · PHP · 215 lines · 170 code · 31 blank · 14 comment · 46 complexity · b55f42833909cf86f74ac45dcdac25c5 MD5 · raw file

  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(basename($_SERVER['SCRIPT_FILENAME']) == "user.class.php"):
  13. exit;
  14. endif;
  15. class MMB_User extends MMB_Core
  16. {
  17. function __construct()
  18. {
  19. parent::__construct();
  20. }
  21. function get_users($args){
  22. global $wpdb;
  23. //$args: $user_roles;
  24. if(empty($args))
  25. return false;
  26. extract($args);
  27. $userlevels = array();
  28. $level_strings = array();
  29. foreach($user_roles as $user_role){
  30. switch(strtolower($user_role)){
  31. case 'subscriber' : $userlevels[] = 0; $level_strings[] = $user_role; break;
  32. case 'contributor' : $userlevels[] = 1; $level_strings[] = $user_role; break;
  33. case 'author' : $userlevels[] = 2; $level_strings[] = $user_role; break;
  34. case 'editor' : $userlevels[] = 7; $level_strings[] = $user_role; break;
  35. case 'administrator' : $userlevels[] = 10; $level_strings[] = $user_role; break;
  36. default: break;
  37. }
  38. }
  39. $users = array();
  40. $userlevel_qry = "('".implode("','",$userlevels)."')";
  41. $userlevel_fallback_qry = "('%".implode("%','%",$level_strings)."%')";
  42. $field = $wpdb->prefix."capabilities";
  43. $user_metas = $wpdb->get_results("SELECT * from $wpdb->usermeta WHERE meta_key = '$field' AND meta_value IN $userlevel_fallback_qry");
  44. if($user_metas == false || empty($user_metas)){
  45. $user_metas = $wpdb->get_results("SELECT * from $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value IN $userlevel_qry");
  46. }
  47. $include = array();
  48. if(is_array($user_metas) && !empty($user_metas)){
  49. foreach($user_metas as $user_meta){
  50. $include[] = $user_meta->user_id;
  51. }
  52. }
  53. $args = array();
  54. $args['include'] = $include;
  55. $args['fields'] = 'all_with_meta';
  56. $temp_users = get_users($args);
  57. $user = array();
  58. foreach ((array)$temp_users as $temp){
  59. $user['user_id'] = $temp->ID;
  60. $user['user_login'] = $temp->user_login;
  61. $user['wp_capabilities'] = array_keys($temp->$field);
  62. $users[] = $user;
  63. }
  64. return array('users' => $users);
  65. }
  66. function add_user($args)
  67. {
  68. if(!function_exists('username_exists') || !function_exists('email_exists'))
  69. include_once(ABSPATH . WPINC . '/registration.php');
  70. if(username_exists($args['user_login']))
  71. return array('error' => 'Username already exists');
  72. if (email_exists($args['user_email']))
  73. return array('error' => 'Email already exists');
  74. if(!function_exists('wp_insert_user'))
  75. include_once (ABSPATH . 'wp-admin/includes/user.php');
  76. $user_id = wp_insert_user($args);
  77. if($user_id){
  78. if($args['email_notify']){
  79. //require_once ABSPATH . WPINC . '/pluggable.php';
  80. wp_new_user_notification($user_id, $args['user_pass']);
  81. }
  82. return $user_id;
  83. }else{
  84. return array('error' => 'User not added. Please try again.');
  85. }
  86. }
  87. function edit_users($args){
  88. if(empty($args))
  89. return false;
  90. if(!function_exists('get_user_to_edit'))
  91. include_once (ABSPATH . 'wp-admin/includes/user.php');
  92. if(!function_exists('wp_update_user'))
  93. include_once (ABSPATH . WPINC.'/user.php');
  94. extract($args);
  95. //$args: $users, $new_role, $new_password, $user_edit_action
  96. $return = array();
  97. if(count($users)){
  98. foreach($users as $user){
  99. $result = '';
  100. $user_obj = $this->mmb_get_user_info( $user );
  101. if($user_obj != false){
  102. switch($user_edit_action){
  103. case 'change-password':
  104. if($new_password){
  105. $user_data = array();
  106. $userdata['user_pass'] = $new_password;
  107. $userdata['ID'] = $user_obj->ID;
  108. $result = wp_update_user($userdata);
  109. } else {
  110. $result = array('error' => 'No password provided.');
  111. }
  112. break;
  113. case 'change-role':
  114. if($new_role){
  115. if($user != $username){
  116. if(!$this->last_admin($user_obj)){
  117. $user_data = array();
  118. $userdata['ID'] = $user_obj->ID;
  119. $userdata['role'] = strtolower($new_role);
  120. $result = wp_update_user($userdata);
  121. } else {
  122. $result = array('error' => 'Cannot change role to the only one left admin user.');
  123. }
  124. } else {
  125. $result = array('error' => 'Cannot change role to user assigned for ManageWP.');
  126. }
  127. } else {
  128. $result = array('error' => 'No role provided.');
  129. }
  130. break;
  131. case 'delete-user':
  132. if($user != $username){
  133. if(!$this->last_admin($user_obj)){
  134. if($reassign_user){
  135. $to_user = $this->mmb_get_user_info( $reassign_user );
  136. if($to_user != false){
  137. $result = wp_delete_user($user_obj->ID, $to_user->ID);
  138. } else {
  139. $result = array('error' => 'User not deleted. User to reassign posts doesn\'t exist.');
  140. }
  141. } else {
  142. $result = wp_delete_user($user_obj->ID);
  143. }
  144. } else {
  145. $result = array('error' => 'Cannot delete the only one left admin user.');
  146. }
  147. } else {
  148. $result = array('error' => 'Cannot delete user assigned for ManageWP.');
  149. }
  150. break;
  151. default:
  152. $result = array('error' => 'Wrong action provided. Please try again.');
  153. break;
  154. }
  155. } else {
  156. $result = array('error' => 'User not found.');
  157. }
  158. if(is_wp_error($result)){
  159. $result = array('error' => $result->get_error_message());
  160. }
  161. $return[$user] = $result;
  162. }
  163. }
  164. return $return;
  165. }
  166. //Check if user is the only one admin on the site
  167. function last_admin($user_obj){
  168. global $wpdb;
  169. $field = $wpdb->prefix."capabilities";
  170. $capabilities = array_map('strtolower',array_keys($user_obj->$field));
  171. $result = count_users();
  172. if(in_array('administrator',$capabilities)){
  173. if(!function_exists('count_users')){
  174. include_once (ABSPATH . WPINC. '/user.php');
  175. }
  176. $result = count_users();
  177. if($result['avail_roles']['administrator'] == 1){
  178. return true;
  179. }
  180. }
  181. return false;
  182. }
  183. }
  184. ?>