PageRenderTime 63ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/_splash/blog/wp-admin/users.php

https://github.com/kuzin/website-2008
PHP | 402 lines | 322 code | 70 blank | 10 comment | 48 complexity | 50610db43498f4af06684be85d280fd0 MD5 | raw file
  1. <?php
  2. /**
  3. * Users administration panel.
  4. *
  5. * @package WordPress
  6. * @subpackage Administration
  7. */
  8. /** WordPress Administration Bootstrap */
  9. require_once('admin.php');
  10. /** WordPress Registration API */
  11. require_once( ABSPATH . WPINC . '/registration.php');
  12. if ( !current_user_can('edit_users') )
  13. wp_die(__('Cheatin&#8217; uh?'));
  14. $title = __('Users');
  15. $parent_file = 'users.php';
  16. $update = $doaction = '';
  17. if ( isset($_REQUEST['action']) )
  18. $doaction = $_REQUEST['action'] ? $_REQUEST['action'] : $_REQUEST['action2'];
  19. if ( empty($doaction) ) {
  20. if ( isset($_GET['changeit']) && !empty($_GET['new_role']) )
  21. $doaction = 'promote';
  22. }
  23. if ( empty($_REQUEST) ) {
  24. $referer = '<input type="hidden" name="wp_http_referer" value="'. attribute_escape(stripslashes($_SERVER['REQUEST_URI'])) . '" />';
  25. } elseif ( isset($_REQUEST['wp_http_referer']) ) {
  26. $redirect = remove_query_arg(array('wp_http_referer', 'updated', 'delete_count'), stripslashes($_REQUEST['wp_http_referer']));
  27. $referer = '<input type="hidden" name="wp_http_referer" value="' . attribute_escape($redirect) . '" />';
  28. } else {
  29. $redirect = 'users.php';
  30. $referer = '';
  31. }
  32. switch ($doaction) {
  33. case 'promote':
  34. check_admin_referer('bulk-users');
  35. if (empty($_REQUEST['users'])) {
  36. wp_redirect($redirect);
  37. exit();
  38. }
  39. if ( !current_user_can('edit_users') )
  40. wp_die(__('You can&#8217;t edit users.'));
  41. $userids = $_REQUEST['users'];
  42. $update = 'promote';
  43. foreach($userids as $id) {
  44. if ( ! current_user_can('edit_user', $id) )
  45. wp_die(__('You can&#8217;t edit that user.'));
  46. // The new role of the current user must also have edit_users caps
  47. if($id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('edit_users')) {
  48. $update = 'err_admin_role';
  49. continue;
  50. }
  51. $user = new WP_User($id);
  52. $user->set_role($_REQUEST['new_role']);
  53. }
  54. wp_redirect(add_query_arg('update', $update, $redirect));
  55. exit();
  56. break;
  57. case 'dodelete':
  58. check_admin_referer('delete-users');
  59. if ( empty($_REQUEST['users']) ) {
  60. wp_redirect($redirect);
  61. exit();
  62. }
  63. if ( !current_user_can('delete_users') )
  64. wp_die(__('You can&#8217;t delete users.'));
  65. $userids = $_REQUEST['users'];
  66. $update = 'del';
  67. $delete_count = 0;
  68. foreach ( (array) $userids as $id) {
  69. if ( ! current_user_can('delete_user', $id) )
  70. wp_die(__('You can&#8217;t delete that user.'));
  71. if($id == $current_user->ID) {
  72. $update = 'err_admin_del';
  73. continue;
  74. }
  75. switch($_REQUEST['delete_option']) {
  76. case 'delete':
  77. wp_delete_user($id);
  78. break;
  79. case 'reassign':
  80. wp_delete_user($id, $_REQUEST['reassign_user']);
  81. break;
  82. }
  83. ++$delete_count;
  84. }
  85. $redirect = add_query_arg( array('delete_count' => $delete_count, 'update' => $update), $redirect);
  86. wp_redirect($redirect);
  87. exit();
  88. break;
  89. case 'delete':
  90. check_admin_referer('bulk-users');
  91. if ( empty($_REQUEST['users']) && empty($_REQUEST['user']) ) {
  92. wp_redirect($redirect);
  93. exit();
  94. }
  95. if ( !current_user_can('delete_users') )
  96. $errors = new WP_Error('edit_users', __('You can&#8217;t delete users.'));
  97. if ( empty($_REQUEST['users']) )
  98. $userids = array(intval($_REQUEST['user']));
  99. else
  100. $userids = $_REQUEST['users'];
  101. include ('admin-header.php');
  102. ?>
  103. <form action="" method="post" name="updateusers" id="updateusers">
  104. <?php wp_nonce_field('delete-users') ?>
  105. <?php echo $referer; ?>
  106. <div class="wrap">
  107. <?php screen_icon(); ?>
  108. <h2><?php _e('Delete Users'); ?></h2>
  109. <p><?php _e('You have specified these users for deletion:'); ?></p>
  110. <ul>
  111. <?php
  112. $go_delete = false;
  113. foreach ( (array) $userids as $id ) {
  114. $id = (int) $id;
  115. $user = new WP_User($id);
  116. if ( $id == $current_user->ID ) {
  117. echo "<li>" . sprintf(__('ID #%1s: %2s <strong>The current user will not be deleted.</strong>'), $id, $user->user_login) . "</li>\n";
  118. } else {
  119. echo "<li><input type=\"hidden\" name=\"users[]\" value=\"{$id}\" />" . sprintf(__('ID #%1s: %2s'), $id, $user->user_login) . "</li>\n";
  120. $go_delete = true;
  121. }
  122. }
  123. $all_logins = $wpdb->get_results("SELECT ID, user_login FROM $wpdb->users ORDER BY user_login");
  124. $user_dropdown = '<select name="reassign_user">';
  125. foreach ( (array) $all_logins as $login )
  126. if ( $login->ID == $current_user->ID || !in_array($login->ID, $userids) )
  127. $user_dropdown .= "<option value=\"{$login->ID}\">{$login->user_login}</option>";
  128. $user_dropdown .= '</select>';
  129. ?>
  130. </ul>
  131. <?php if ( $go_delete ) : ?>
  132. <fieldset><p><legend><?php _e('What should be done with posts and links owned by this user?'); ?></legend></p>
  133. <ul style="list-style:none;">
  134. <li><label><input type="radio" id="delete_option0" name="delete_option" value="delete" checked="checked" />
  135. <?php _e('Delete all posts and links.'); ?></label></li>
  136. <li><input type="radio" id="delete_option1" name="delete_option" value="reassign" />
  137. <?php echo '<label for="delete_option1">'.__('Attribute all posts and links to:')."</label> $user_dropdown"; ?></li>
  138. </ul></fieldset>
  139. <input type="hidden" name="action" value="dodelete" />
  140. <p class="submit"><input type="submit" name="submit" value="<?php _e('Confirm Deletion'); ?>" class="button-secondary" /></p>
  141. <?php else : ?>
  142. <p><?php _e('There are no valid users selected for deletion.'); ?></p>
  143. <?php endif; ?>
  144. </div>
  145. </form>
  146. <?php
  147. break;
  148. default:
  149. if ( !empty($_GET['_wp_http_referer']) ) {
  150. wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), stripslashes($_SERVER['REQUEST_URI'])));
  151. exit;
  152. }
  153. wp_enqueue_script('admin-users');
  154. include('admin-header.php');
  155. $usersearch = isset($_GET['usersearch']) ? $_GET['usersearch'] : null;
  156. $userspage = isset($_GET['userspage']) ? $_GET['userspage'] : null;
  157. $role = isset($_GET['role']) ? $_GET['role'] : null;
  158. // Query the users
  159. $wp_user_search = new WP_User_Search($usersearch, $userspage, $role);
  160. $messages = array();
  161. if ( isset($_GET['update']) ) :
  162. switch($_GET['update']) {
  163. case 'del':
  164. case 'del_many':
  165. $delete_count = isset($_GET['delete_count']) ? (int) $_GET['delete_count'] : 0;
  166. $messages[] = '<div id="message" class="updated fade"><p>' . sprintf(__ngettext('%s user deleted', '%s users deleted', $delete_count), $delete_count) . '</p></div>';
  167. break;
  168. case 'add':
  169. $messages[] = '<div id="message" class="updated fade"><p>' . __('New user created.') . '</p></div>';
  170. break;
  171. case 'promote':
  172. $messages[] = '<div id="message" class="updated fade"><p>' . __('Changed roles.') . '</p></div>';
  173. break;
  174. case 'err_admin_role':
  175. $messages[] = '<div id="message" class="error"><p>' . __("The current user's role must have user editing capabilities.") . '</p></div>';
  176. $messages[] = '<div id="message" class="updated fade"><p>' . __('Other user roles have been changed.') . '</p></div>';
  177. break;
  178. case 'err_admin_del':
  179. $messages[] = '<div id="message" class="error"><p>' . __("You can't delete the current user.") . '</p></div>';
  180. $messages[] = '<div id="message" class="updated fade"><p>' . __('Other users have been deleted.') . '</p></div>';
  181. break;
  182. }
  183. endif; ?>
  184. <?php if ( isset($errors) && is_wp_error( $errors ) ) : ?>
  185. <div class="error">
  186. <ul>
  187. <?php
  188. foreach ( $errors->get_error_messages() as $err )
  189. echo "<li>$err</li>\n";
  190. ?>
  191. </ul>
  192. </div>
  193. <?php endif;
  194. if ( ! empty($messages) ) {
  195. foreach ( $messages as $msg )
  196. echo $msg;
  197. } ?>
  198. <div class="wrap">
  199. <?php screen_icon(); ?>
  200. <h2><?php echo wp_specialchars( $title );
  201. if ( isset($_GET['s']) && $_GET['s'] )
  202. printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', wp_specialchars( get_search_query() ) ); ?>
  203. </h2>
  204. <div class="filter">
  205. <form id="list-filter" action="" method="get">
  206. <ul class="subsubsub">
  207. <?php
  208. $role_links = array();
  209. $avail_roles = array();
  210. $users_of_blog = get_users_of_blog();
  211. $total_users = count( $users_of_blog );
  212. foreach ( (array) $users_of_blog as $b_user ) {
  213. $b_roles = unserialize($b_user->meta_value);
  214. foreach ( (array) $b_roles as $b_role => $val ) {
  215. if ( !isset($avail_roles[$b_role]) )
  216. $avail_roles[$b_role] = 0;
  217. $avail_roles[$b_role]++;
  218. }
  219. }
  220. unset($users_of_blog);
  221. $current_role = false;
  222. $class = empty($role) ? ' class="current"' : '';
  223. $role_links[] = "<li><a href='users.php'$class>" . sprintf( __ngettext( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_users ), number_format_i18n( $total_users ) ) . '</a>';
  224. foreach ( $wp_roles->get_names() as $this_role => $name ) {
  225. if ( !isset($avail_roles[$this_role]) )
  226. continue;
  227. $class = '';
  228. if ( $this_role == $role ) {
  229. $current_role = $role;
  230. $class = ' class="current"';
  231. }
  232. $name = translate_with_context($name);
  233. $name = sprintf( _c('%1$s <span class="count">(%2$s)</span>|user role with count'), $name, $avail_roles[$this_role] );
  234. $role_links[] = "<li><a href='users.php?role=$this_role'$class>$name</a>";
  235. }
  236. echo implode( " |</li>\n", $role_links) . '</li>';
  237. unset($role_links);
  238. ?>
  239. </ul>
  240. </form>
  241. </div>
  242. <form class="search-form" action="" method="get">
  243. <p class="search-box">
  244. <label class="hidden" for="user-search-input"><?php _e( 'Search Users' ); ?>:</label>
  245. <input type="text" class="search-input" id="user-search-input" name="usersearch" value="<?php echo attribute_escape($wp_user_search->search_term); ?>" />
  246. <input type="submit" value="<?php _e( 'Search Users' ); ?>" class="button" />
  247. </p>
  248. </form>
  249. <form id="posts-filter" action="" method="get">
  250. <div class="tablenav">
  251. <?php if ( $wp_user_search->results_are_paged() ) : ?>
  252. <div class="tablenav-pages"><?php $wp_user_search->page_links(); ?></div>
  253. <?php endif; ?>
  254. <div class="alignleft actions">
  255. <select name="action">
  256. <option value="" selected="selected"><?php _e('Bulk Actions'); ?></option>
  257. <option value="delete"><?php _e('Delete'); ?></option>
  258. </select>
  259. <input type="submit" value="<?php _e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
  260. <label class="hidden" for="new_role"><?php _e('Change role to&hellip;') ?></label><select name="new_role" id="new_role"><option value=''><?php _e('Change role to&hellip;') ?></option><?php wp_dropdown_roles(); ?></select>
  261. <input type="submit" value="<?php _e('Change'); ?>" name="changeit" class="button-secondary" />
  262. <?php wp_nonce_field('bulk-users'); ?>
  263. </div>
  264. <br class="clear" />
  265. </div>
  266. <?php if ( is_wp_error( $wp_user_search->search_errors ) ) : ?>
  267. <div class="error">
  268. <ul>
  269. <?php
  270. foreach ( $wp_user_search->search_errors->get_error_messages() as $message )
  271. echo "<li>$message</li>";
  272. ?>
  273. </ul>
  274. </div>
  275. <?php endif; ?>
  276. <?php if ( $wp_user_search->get_results() ) : ?>
  277. <?php if ( $wp_user_search->is_search() ) : ?>
  278. <p><a href="users.php"><?php _e('&larr; Back to All Users'); ?></a></p>
  279. <?php endif; ?>
  280. <table class="widefat fixed" cellspacing="0">
  281. <thead>
  282. <tr class="thead">
  283. <?php print_column_headers('users') ?>
  284. </tr>
  285. </thead>
  286. <tfoot>
  287. <tr class="thead">
  288. <?php print_column_headers('users', false) ?>
  289. </tr>
  290. </tfoot>
  291. <tbody id="users" class="list:user user-list">
  292. <?php
  293. $style = '';
  294. foreach ( $wp_user_search->get_results() as $userid ) {
  295. $user_object = new WP_User($userid);
  296. $roles = $user_object->roles;
  297. $role = array_shift($roles);
  298. $style = ( ' class="alternate"' == $style ) ? '' : ' class="alternate"';
  299. echo "\n\t" . user_row($user_object, $style, $role);
  300. }
  301. ?>
  302. </tbody>
  303. </table>
  304. <div class="tablenav">
  305. <?php if ( $wp_user_search->results_are_paged() ) : ?>
  306. <div class="tablenav-pages"><?php $wp_user_search->page_links(); ?></div>
  307. <?php endif; ?>
  308. <div class="alignleft actions">
  309. <select name="action2">
  310. <option value="" selected="selected"><?php _e('Bulk Actions'); ?></option>
  311. <option value="delete"><?php _e('Delete'); ?></option>
  312. </select>
  313. <input type="submit" value="<?php _e('Apply'); ?>" name="doaction2" id="doaction2" class="button-secondary action" />
  314. </div>
  315. <br class="clear" />
  316. </div>
  317. <?php endif; ?>
  318. </form>
  319. </div>
  320. <?php
  321. foreach ( array('user_login' => 'user_login', 'first_name' => 'user_firstname', 'last_name' => 'user_lastname', 'email' => 'user_email', 'url' => 'user_uri', 'role' => 'user_role') as $formpost => $var ) {
  322. $var = 'new_' . $var;
  323. $$var = isset($_REQUEST[$formpost]) ? attribute_escape(stripslashes($_REQUEST[$formpost])) : '';
  324. }
  325. unset($name);
  326. ?>
  327. <br class="clear" />
  328. <?php
  329. break;
  330. } // end of the $doaction switch
  331. include('admin-footer.php');
  332. ?>