wp/wp-admin/network/site-users.php
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
equal deleted inserted replaced
-1:000000000000 0:d970ebf37754
       
     1 <?php
       
     2 /**
       
     3  * Edit Site Users Administration Screen
       
     4  *
       
     5  * @package WordPress
       
     6  * @subpackage Multisite
       
     7  * @since 3.1.0
       
     8  */
       
     9 
       
    10 /** Load WordPress Administration Bootstrap */
       
    11 require_once( dirname( __FILE__ ) . '/admin.php' );
       
    12 
       
    13 if ( ! is_multisite() )
       
    14 	wp_die( __( 'Multisite support is not enabled.' ) );
       
    15 
       
    16 if ( ! current_user_can('manage_sites') )
       
    17 	wp_die(__('You do not have sufficient permissions to edit this site.'));
       
    18 
       
    19 $wp_list_table = _get_list_table('WP_Users_List_Table');
       
    20 $wp_list_table->prepare_items();
       
    21 
       
    22 get_current_screen()->add_help_tab( array(
       
    23 	'id'      => 'overview',
       
    24 	'title'   => __('Overview'),
       
    25 	'content' =>
       
    26 		'<p>' . __('The menu is for editing information specific to individual sites, particularly if the admin area of a site is unavailable.') . '</p>' .
       
    27 		'<p>' . __('<strong>Info</strong> - The domain and path are rarely edited as this can cause the site to not work properly. The Registered date and Last Updated date are displayed. Network admins can mark a site as archived, spam, deleted and mature, to remove from public listings or disable.') . '</p>' .
       
    28 		'<p>' . __('<strong>Users</strong> - This displays the users associated with this site. You can also change their role, reset their password, or remove them from the site. Removing the user from the site does not remove the user from the network.') . '</p>' .
       
    29 		'<p>' . sprintf( __('<strong>Themes</strong> - This area shows themes that are not already enabled across the network. Enabling a theme in this menu makes it accessible to this site. It does not activate the theme, but allows it to show in the site&#8217;s Appearance menu. To enable a theme for the entire network, see the <a href="%s">Network Themes</a> screen.' ), network_admin_url( 'themes.php' ) ) . '</p>' .
       
    30 		'<p>' . __('<strong>Settings</strong> - This page shows a list of all settings associated with this site. Some are created by WordPress and others are created by plugins you activate. Note that some fields are grayed out and say Serialized Data. You cannot modify these values due to the way the setting is stored in the database.') . '</p>'
       
    31 ) );
       
    32 
       
    33 get_current_screen()->set_help_sidebar(
       
    34 	'<p><strong>' . __('For more information:') . '</strong></p>' .
       
    35 	'<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screen" target="_blank">Documentation on Site Management</a>') . '</p>' .
       
    36 	'<p>' . __('<a href="http://wordpress.org/support/forum/multisite/" target="_blank">Support Forums</a>') . '</p>'
       
    37 );
       
    38 
       
    39 $_SERVER['REQUEST_URI'] = remove_query_arg( 'update', $_SERVER['REQUEST_URI'] );
       
    40 $referer = remove_query_arg( 'update', wp_get_referer() );
       
    41 
       
    42 $id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0;
       
    43 
       
    44 if ( ! $id )
       
    45 	wp_die( __('Invalid site ID.') );
       
    46 
       
    47 $details = get_blog_details( $id );
       
    48 if ( ! can_edit_network( $details->site_id ) )
       
    49 	wp_die( __( 'You do not have permission to access this page.' ) );
       
    50 
       
    51 $is_main_site = is_main_site( $id );
       
    52 
       
    53 switch_to_blog( $id );
       
    54 
       
    55 $editblog_roles = $wp_roles->roles;
       
    56 
       
    57 $default_role = get_option( 'default_role' );
       
    58 
       
    59 $action = $wp_list_table->current_action();
       
    60 
       
    61 if ( $action ) {
       
    62 
       
    63 	switch ( $action ) {
       
    64 		case 'newuser':
       
    65 			check_admin_referer( 'add-user', '_wpnonce_add-new-user' );
       
    66 			$user = $_POST['user'];
       
    67 			if ( ! is_array( $_POST['user'] ) || empty( $user['username'] ) || empty( $user['email'] ) ) {
       
    68 				$update = 'err_new';
       
    69 			} else {
       
    70 				$password = wp_generate_password( 12, false);
       
    71 				$user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) );
       
    72 
       
    73 				if ( false == $user_id ) {
       
    74 		 			$update = 'err_new_dup';
       
    75 				} else {
       
    76 					wp_new_user_notification( $user_id, $password );
       
    77 					add_user_to_blog( $id, $user_id, $_POST['new_role'] );
       
    78 					$update = 'newuser';
       
    79 				}
       
    80 			}
       
    81 			break;
       
    82 
       
    83 		case 'adduser':
       
    84 			check_admin_referer( 'add-user', '_wpnonce_add-user' );
       
    85 			if ( !empty( $_POST['newuser'] ) ) {
       
    86 				$update = 'adduser';
       
    87 				$newuser = $_POST['newuser'];
       
    88 				$user = get_user_by( 'login', $newuser );
       
    89 				if ( $user && $user->exists() ) {
       
    90 					if ( ! is_user_member_of_blog( $user->ID, $id ) )
       
    91 						add_user_to_blog( $id, $user->ID, $_POST['new_role'] );
       
    92 					else
       
    93 						$update = 'err_add_member';
       
    94 				} else {
       
    95 					$update = 'err_add_notfound';
       
    96 				}
       
    97 			} else {
       
    98 				$update = 'err_add_notfound';
       
    99 			}
       
   100 			break;
       
   101 
       
   102 		case 'remove':
       
   103 			if ( ! current_user_can( 'remove_users' )  )
       
   104 				die(__('You can&#8217;t remove users.'));
       
   105 			check_admin_referer( 'bulk-users' );
       
   106 
       
   107 			$update = 'remove';
       
   108 			if ( isset( $_REQUEST['users'] ) ) {
       
   109 				$userids = $_REQUEST['users'];
       
   110 
       
   111 				foreach ( $userids as $user_id ) {
       
   112 					$user_id = (int) $user_id;
       
   113 					remove_user_from_blog( $user_id, $id );
       
   114 				}
       
   115 			} elseif ( isset( $_GET['user'] ) ) {
       
   116 				remove_user_from_blog( $_GET['user'] );
       
   117 			} else {
       
   118 				$update = 'err_remove';
       
   119 			}
       
   120 			break;
       
   121 
       
   122 		case 'promote':
       
   123 			check_admin_referer( 'bulk-users' );
       
   124 			$editable_roles = get_editable_roles();
       
   125 			if ( empty( $editable_roles[$_REQUEST['new_role']] ) )
       
   126 				wp_die(__('You can&#8217;t give users that role.'));
       
   127 
       
   128 			if ( isset( $_REQUEST['users'] ) ) {
       
   129 				$userids = $_REQUEST['users'];
       
   130 				$update = 'promote';
       
   131 				foreach ( $userids as $user_id ) {
       
   132 					$user_id = (int) $user_id;
       
   133 
       
   134 					// If the user doesn't already belong to the blog, bail.
       
   135 					if ( !is_user_member_of_blog( $user_id ) )
       
   136 						wp_die(__('Cheatin&#8217; uh?'));
       
   137 
       
   138 					$user = get_userdata( $user_id );
       
   139 					$user->set_role( $_REQUEST['new_role'] );
       
   140 				}
       
   141 			} else {
       
   142 				$update = 'err_promote';
       
   143 			}
       
   144 			break;
       
   145 	}
       
   146 
       
   147 	wp_safe_redirect( add_query_arg( 'update', $update, $referer ) );
       
   148 	exit();
       
   149 }
       
   150 
       
   151 restore_current_blog();
       
   152 
       
   153 if ( isset( $_GET['action'] ) && 'update-site' == $_GET['action'] ) {
       
   154 	wp_safe_redirect( $referer );
       
   155 	exit();
       
   156 }
       
   157 
       
   158 add_screen_option( 'per_page', array( 'label' => _x( 'Users', 'users per page (screen options)' ) ) );
       
   159 
       
   160 $site_url_no_http = preg_replace( '#^http(s)?://#', '', get_blogaddress_by_id( $id ) );
       
   161 $title_site_url_linked = sprintf( __('Edit Site: <a href="%1$s">%2$s</a>'), get_blogaddress_by_id( $id ), $site_url_no_http );
       
   162 $title = sprintf( __('Edit Site: %s'), $site_url_no_http );
       
   163 
       
   164 $parent_file = 'sites.php';
       
   165 $submenu_file = 'sites.php';
       
   166 
       
   167 if ( ! wp_is_large_network( 'users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) )
       
   168 	wp_enqueue_script( 'user-suggest' );
       
   169 
       
   170 require( ABSPATH . 'wp-admin/admin-header.php' ); ?>
       
   171 
       
   172 <script type='text/javascript'>
       
   173 /* <![CDATA[ */
       
   174 var current_site_id = <?php echo $id; ?>;
       
   175 /* ]]> */
       
   176 </script>
       
   177 
       
   178 
       
   179 <div class="wrap">
       
   180 <?php screen_icon('ms-admin'); ?>
       
   181 <h2 id="edit-site"><?php echo $title_site_url_linked ?></h2>
       
   182 <h3 class="nav-tab-wrapper">
       
   183 <?php
       
   184 $tabs = array(
       
   185 	'site-info'     => array( 'label' => __( 'Info' ),     'url' => 'site-info.php'     ),
       
   186 	'site-users'    => array( 'label' => __( 'Users' ),    'url' => 'site-users.php'    ),
       
   187 	'site-themes'   => array( 'label' => __( 'Themes' ),   'url' => 'site-themes.php'   ),
       
   188 	'site-settings' => array( 'label' => __( 'Settings' ), 'url' => 'site-settings.php' ),
       
   189 );
       
   190 foreach ( $tabs as $tab_id => $tab ) {
       
   191 	$class = ( $tab['url'] == $pagenow ) ? ' nav-tab-active' : '';
       
   192 	echo '<a href="' . $tab['url'] . '?id=' . $id .'" class="nav-tab' . $class . '">' . esc_html( $tab['label'] ) . '</a>';
       
   193 }
       
   194 ?>
       
   195 </h3><?php
       
   196 
       
   197 if ( isset($_GET['update']) ) :
       
   198 	switch($_GET['update']) {
       
   199 	case 'adduser':
       
   200 		echo '<div id="message" class="updated"><p>' . __( 'User added.' ) . '</p></div>';
       
   201 		break;
       
   202 	case 'err_add_member':
       
   203 		echo '<div id="message" class="error"><p>' . __( 'User is already a member of this site.' ) . '</p></div>';
       
   204 		break;
       
   205 	case 'err_add_notfound':
       
   206 		echo '<div id="message" class="error"><p>' . __( 'Enter the username of an existing user.' ) . '</p></div>';
       
   207 		break;
       
   208 	case 'promote':
       
   209 		echo '<div id="message" class="updated"><p>' . __( 'Changed roles.' ) . '</p></div>';
       
   210 		break;
       
   211 	case 'err_promote':
       
   212 		echo '<div id="message" class="error"><p>' . __( 'Select a user to change role.' ) . '</p></div>';
       
   213 		break;
       
   214 	case 'remove':
       
   215 		echo '<div id="message" class="updated"><p>' . __( 'User removed from this site.' ) . '</p></div>';
       
   216 		break;
       
   217 	case 'err_remove':
       
   218 		echo '<div id="message" class="error"><p>' . __( 'Select a user to remove.' ) . '</p></div>';
       
   219 		break;
       
   220 	case 'newuser':
       
   221 		echo '<div id="message" class="updated"><p>' . __( 'User created.' ) . '</p></div>';
       
   222 		break;
       
   223 	case 'err_new':
       
   224 		echo '<div id="message" class="error"><p>' . __( 'Enter the username and email.' ) . '</p></div>';
       
   225 		break;
       
   226 	case 'err_new_dup':
       
   227 		echo '<div id="message" class="error"><p>' . __( 'Duplicated username or email address.' ) . '</p></div>';
       
   228 		break;
       
   229 	}
       
   230 endif; ?>
       
   231 
       
   232 <form class="search-form" action="" method="get">
       
   233 <?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?>
       
   234 <input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" />
       
   235 </form>
       
   236 
       
   237 <?php $wp_list_table->views(); ?>
       
   238 
       
   239 <form method="post" action="site-users.php?action=update-site">
       
   240 	<input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" />
       
   241 
       
   242 <?php $wp_list_table->display(); ?>
       
   243 
       
   244 </form>
       
   245 
       
   246 <?php do_action( 'network_site_users_after_list_table', '' );?>
       
   247 
       
   248 <?php if ( current_user_can( 'promote_users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) : ?>
       
   249 <h3 id="add-existing-user"><?php _e( 'Add Existing User' ); ?></h3>
       
   250 <form action="site-users.php?action=adduser" id="adduser" method="post">
       
   251 	<input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" />
       
   252 	<table class="form-table">
       
   253 		<tr>
       
   254 			<th scope="row"><?php _e( 'Username' ); ?></th>
       
   255 			<td><input type="text" class="regular-text wp-suggest-user" name="newuser" id="newuser" /></td>
       
   256 		</tr>
       
   257 		<tr>
       
   258 			<th scope="row"><?php _e( 'Role' ); ?></th>
       
   259 			<td><select name="new_role" id="new_role_0">
       
   260 			<?php
       
   261 			reset( $editblog_roles );
       
   262 			foreach ( $editblog_roles as $role => $role_assoc ) {
       
   263 				$name = translate_user_role( $role_assoc['name'] );
       
   264 				echo '<option ' . selected( $default_role, $role, false ) . ' value="' . esc_attr( $role ) . '">' . esc_html( $name ) . '</option>';
       
   265 			}
       
   266 			?>
       
   267 			</select></td>
       
   268 		</tr>
       
   269 	</table>
       
   270 	<?php wp_nonce_field( 'add-user', '_wpnonce_add-user' ) ?>
       
   271 	<?php submit_button( __( 'Add User' ), 'primary', 'add-user', true, array( 'id' => 'submit-add-existing-user' ) ); ?>
       
   272 </form>
       
   273 <?php endif; ?>
       
   274 
       
   275 <?php if ( current_user_can( 'create_users' ) && apply_filters( 'show_network_site_users_add_new_form', true ) ) : ?>
       
   276 <h3 id="add-new-user"><?php _e( 'Add New User' ); ?></h3>
       
   277 <form action="<?php echo network_admin_url('site-users.php?action=newuser'); ?>" id="newuser" method="post">
       
   278 	<input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" />
       
   279 	<table class="form-table">
       
   280 		<tr>
       
   281 			<th scope="row"><?php _e( 'Username' ) ?></th>
       
   282 			<td><input type="text" class="regular-text" name="user[username]" /></td>
       
   283 		</tr>
       
   284 		<tr>
       
   285 			<th scope="row"><?php _e( 'Email' ) ?></th>
       
   286 			<td><input type="text" class="regular-text" name="user[email]" /></td>
       
   287 		</tr>
       
   288 		<tr>
       
   289 			<th scope="row"><?php _e( 'Role' ); ?></th>
       
   290 			<td><select name="new_role" id="new_role_0">
       
   291 			<?php
       
   292 			reset( $editblog_roles );
       
   293 			foreach ( $editblog_roles as $role => $role_assoc ) {
       
   294 				$name = translate_user_role( $role_assoc['name'] );
       
   295 				echo '<option ' . selected( $default_role, $role, false ) . ' value="' . esc_attr( $role ) . '">' . esc_html( $name ) . '</option>';
       
   296 			}
       
   297 			?>
       
   298 			</select></td>
       
   299 		</tr>
       
   300 		<tr class="form-field">
       
   301 			<td colspan="2"><?php _e( 'Username and password will be mailed to the above email address.' ) ?></td>
       
   302 		</tr>
       
   303 	</table>
       
   304 	<?php wp_nonce_field( 'add-user', '_wpnonce_add-new-user' ) ?>
       
   305 	<?php submit_button( __( 'Add New User' ), 'primary', 'add-user', true, array( 'id' => 'submit-add-user' ) ); ?>
       
   306 </form>
       
   307 <?php endif; ?>
       
   308 </div>
       
   309 <?php
       
   310 require( ABSPATH . 'wp-admin/admin-footer.php' );