365 lines
12 KiB
PHP
365 lines
12 KiB
PHP
<?php
|
|
/**
|
|
* Multisite users administration panel.
|
|
*
|
|
* @package WordPress
|
|
* @subpackage Multisite
|
|
* @since 3.0.0
|
|
*/
|
|
|
|
require_once( './admin.php' );
|
|
|
|
if ( !is_multisite() )
|
|
wp_die( __( 'Multisite support is not enabled.' ) );
|
|
|
|
if ( ! current_user_can( 'manage_network_users' ) )
|
|
wp_die( __( 'You do not have permission to access this page.' ) );
|
|
|
|
$title = __( 'Users' );
|
|
$parent_file = 'ms-admin.php';
|
|
|
|
wp_enqueue_script( 'admin-forms' );
|
|
|
|
require_once( './admin-header.php' );
|
|
|
|
if ( isset( $_GET['updated'] ) && $_GET['updated'] == 'true' && ! empty( $_GET['action'] ) ) {
|
|
?>
|
|
<div id="message" class="updated"><p>
|
|
<?php
|
|
switch ( $_GET['action'] ) {
|
|
case 'delete':
|
|
_e( 'User deleted.' );
|
|
break;
|
|
case 'all_spam':
|
|
_e( 'Users marked as spam.' );
|
|
break;
|
|
case 'all_notspam':
|
|
_e( 'Users removed from spam.' );
|
|
break;
|
|
case 'all_delete':
|
|
_e( 'Users deleted.' );
|
|
break;
|
|
case 'add':
|
|
_e( 'User added.' );
|
|
break;
|
|
}
|
|
?>
|
|
</p></div>
|
|
<?php
|
|
}
|
|
|
|
$pagenum = isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 0;
|
|
if ( empty( $pagenum ) )
|
|
$pagenum = 1;
|
|
|
|
$per_page = (int) get_user_option( 'ms_users_per_page' );
|
|
if ( empty( $per_page ) || $per_page < 1 )
|
|
$per_page = 15;
|
|
|
|
$per_page = apply_filters( 'ms_users_per_page', $per_page );
|
|
|
|
$s = isset( $_GET['s'] ) ? stripslashes( trim( $_GET[ 's' ] ) ) : '';
|
|
$like_s = esc_sql( like_escape( $s ) );
|
|
|
|
$query = "SELECT * FROM {$wpdb->users}";
|
|
|
|
if ( !empty( $like_s ) ) {
|
|
$query .= " WHERE user_login LIKE '%$like_s%' OR user_email LIKE '%$like_s%'";
|
|
}
|
|
|
|
$order_by = isset( $_GET['sortby'] ) ? $_GET['sortby'] : 'id';
|
|
if ( $order_by == 'email' ) {
|
|
$query .= ' ORDER BY user_email ';
|
|
} elseif ( $order_by == 'login' ) {
|
|
$query .= ' ORDER BY user_login ';
|
|
} elseif ( $order_by == 'name' ) {
|
|
$query .= ' ORDER BY display_name ';
|
|
} elseif ( $order_by == 'registered' ) {
|
|
$query .= ' ORDER BY user_registered ';
|
|
} else {
|
|
$order_by = 'id';
|
|
$query .= ' ORDER BY ID ';
|
|
}
|
|
|
|
$order = ( isset( $_GET['order'] ) && 'DESC' == $_GET['order'] ) ? 'DESC' : 'ASC';
|
|
$query .= $order;
|
|
|
|
$total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT(ID)', $query ) );
|
|
|
|
$query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page) . ", " . intval( $per_page );
|
|
|
|
$user_list = $wpdb->get_results( $query, ARRAY_A );
|
|
|
|
$num_pages = ceil( $total / $per_page );
|
|
$page_links = paginate_links( array(
|
|
'base' => add_query_arg( 'paged', '%#%' ),
|
|
'format' => '',
|
|
'prev_text' => __( '«' ),
|
|
'next_text' => __( '»' ),
|
|
'total' => $num_pages,
|
|
'current' => $pagenum
|
|
));
|
|
|
|
if ( empty( $_GET['mode'] ) )
|
|
$mode = 'list';
|
|
else
|
|
$mode = esc_attr( $_GET['mode'] );
|
|
|
|
?>
|
|
<div class="wrap">
|
|
<?php screen_icon(); ?>
|
|
<h2><?php esc_html_e( 'Users' ); ?>
|
|
<a href="#form-add-user" class="button add-new-h2"><?php echo esc_html_x( 'Add New' , 'users'); ?></a>
|
|
<?php
|
|
if ( isset( $_GET['s'] ) && $_GET['s'] )
|
|
printf( '<span class="subtitle">' . __( 'Search results for “%s”' ) . '</span>', esc_html( $s ) );
|
|
?>
|
|
</h2>
|
|
|
|
<form action="ms-users.php" method="get" class="search-form">
|
|
<p class="search-box">
|
|
<input type="text" name="s" value="<?php echo esc_attr( $s ); ?>" class="search-input" id="user-search-input" />
|
|
<input type="submit" id="post-query-submit" value="<?php esc_attr_e( 'Search Users' ) ?>" class="button" />
|
|
</p>
|
|
</form>
|
|
|
|
<form id="form-user-list" action='ms-edit.php?action=allusers' method='post'>
|
|
<input type="hidden" name="mode" value="<?php echo esc_attr( $mode ); ?>" />
|
|
<div class="tablenav">
|
|
<div class="alignleft actions">
|
|
<select name="action">
|
|
<option value="-1" selected="selected"><?php _e( 'Bulk Actions' ); ?></option>
|
|
<option value="delete"><?php _e( 'Delete' ); ?></option>
|
|
<option value="spam"><?php _e( 'Mark as Spam' ); ?></option>
|
|
<option value="notspam"><?php _e( 'Not Spam' ); ?></option>
|
|
</select>
|
|
<input type="submit" value="<?php esc_attr_e( 'Apply' ); ?>" name="doaction" id="doaction" class="button-secondary action" />
|
|
<?php wp_nonce_field( 'bulk-ms-users' ); ?>
|
|
</div>
|
|
|
|
<?php if ( $page_links ) { ?>
|
|
<div class="tablenav-pages">
|
|
<?php $page_links_text = sprintf( '<span class="displaying-num">' . __( 'Displaying %s–%s of %s' ) . '</span>%s',
|
|
number_format_i18n( ( $pagenum - 1 ) * $per_page + 1 ),
|
|
number_format_i18n( min( $pagenum * $per_page, $total ) ),
|
|
number_format_i18n( $total ),
|
|
$page_links
|
|
); echo $page_links_text; ?>
|
|
</div>
|
|
<?php } ?>
|
|
|
|
<div class="view-switch">
|
|
<a href="<?php echo esc_url( add_query_arg( 'mode', 'list', $_SERVER['REQUEST_URI'] ) ) ?>"><img <?php if ( 'list' == $mode ) echo 'class="current"'; ?> id="view-switch-list" src="<?php echo esc_url( includes_url( 'images/blank.gif' ) ); ?>" width="20" height="20" title="<?php _e( 'List View' ) ?>" alt="<?php _e( 'List View' ) ?>" /></a>
|
|
<a href="<?php echo esc_url( add_query_arg( 'mode', 'excerpt', $_SERVER['REQUEST_URI'] ) ) ?>"><img <?php if ( 'excerpt' == $mode ) echo 'class="current"'; ?> id="view-switch-excerpt" src="<?php echo esc_url( includes_url( 'images/blank.gif' ) ); ?>" width="20" height="20" title="<?php _e( 'Excerpt View' ) ?>" alt="<?php _e( 'Excerpt View' ) ?>" /></a>
|
|
</div>
|
|
</div>
|
|
<div class="clear"></div>
|
|
|
|
<?php
|
|
// define the columns to display, the syntax is 'internal name' => 'display name'
|
|
$users_columns = array(
|
|
'id' => __( 'ID' ),
|
|
'login' => __( 'Username' ),
|
|
'name' => __( 'Name' ),
|
|
'email' => __( 'E-mail' ),
|
|
'registered' => __( 'Registered' ),
|
|
'blogs' => __( 'Sites' )
|
|
);
|
|
$users_columns = apply_filters( 'wpmu_users_columns', $users_columns );
|
|
?>
|
|
<table class="widefat">
|
|
<thead>
|
|
<tr>
|
|
<th class="manage-column column-cb check-column" id="cb" scope="col">
|
|
<input type="checkbox" />
|
|
</th>
|
|
<?php
|
|
$col_url = '';
|
|
foreach($users_columns as $column_id => $column_display_name) {
|
|
$column_link = "<a href='";
|
|
$order2 = '';
|
|
if ( $order_by == $column_id )
|
|
$order2 = ( $order == 'DESC' ) ? 'ASC' : 'DESC';
|
|
|
|
$column_link .= esc_url( add_query_arg( array( 'order' => $order2, 'paged' => $pagenum, 'sortby' => $column_id ), remove_query_arg( array( 'action', 'updated' ), $_SERVER['REQUEST_URI'] ) ) );
|
|
$column_link .= "'>{$column_display_name}</a>";
|
|
$col_url .= '<th scope="col">' . ( $column_id == 'blogs' ? $column_display_name : $column_link ) . '</th>';
|
|
}
|
|
echo $col_url; ?>
|
|
</tr>
|
|
</thead>
|
|
<tfoot>
|
|
<tr>
|
|
<th class="manage-column column-cb check-column" id="cb" scope="col">
|
|
<input type="checkbox" />
|
|
</th>
|
|
<?php echo $col_url; ?>
|
|
</tr>
|
|
</tfoot>
|
|
<tbody id="the-user-list" class="list:user">
|
|
<?php if ( $user_list ) {
|
|
$class = '';
|
|
$super_admins = get_super_admins();
|
|
foreach ( (array) $user_list as $user ) {
|
|
$class = ( 'alternate' == $class ) ? '' : 'alternate';
|
|
|
|
$status_list = array( 'spam' => 'site-spammed', 'deleted' => 'site-deleted' );
|
|
|
|
foreach ( $status_list as $status => $col ) {
|
|
if ( $user[$status] )
|
|
$class = $col;
|
|
}
|
|
|
|
?>
|
|
<tr class="<?php echo $class; ?>">
|
|
<?php
|
|
foreach( (array) $users_columns as $column_name=>$column_display_name ) :
|
|
switch( $column_name ) {
|
|
case 'id': ?>
|
|
<th scope="row" class="check-column">
|
|
<input type="checkbox" id="blog_<?php echo $user['ID'] ?>" name="allusers[]" value="<?php echo esc_attr( $user['ID'] ) ?>" />
|
|
</th>
|
|
<th valign="top" scope="row">
|
|
<?php echo $user['ID'] ?>
|
|
</th>
|
|
<?php
|
|
break;
|
|
|
|
case 'login':
|
|
$avatar = get_avatar( $user['user_email'], 32 );
|
|
$edit_link = ( $current_user->ID == $user['ID'] ) ? 'profile.php' : 'user-edit.php?user_id=' . $user['ID'];
|
|
?>
|
|
<td class="username column-username">
|
|
<?php echo $avatar; ?><strong><a href="<?php echo esc_url( admin_url( $edit_link ) ); ?>" class="edit"><?php echo stripslashes( $user['user_login'] ); ?></a><?php
|
|
if ( in_array( $user['user_login'], $super_admins ) )
|
|
echo ' - ' . __( 'Super admin' );
|
|
?></strong>
|
|
<br/>
|
|
<div class="row-actions">
|
|
<span class="edit"><a href="<?php echo esc_url( admin_url( $edit_link ) ); ?>"><?php _e( 'Edit' ); ?></a></span>
|
|
<?php if ( ! in_array( $user['user_login'], $super_admins ) ) { ?>
|
|
| <span class="delete"><a href="<?php echo $delete = esc_url( admin_url( add_query_arg( '_wp_http_referer', urlencode( stripslashes( $_SERVER['REQUEST_URI'] ) ), wp_nonce_url( 'ms-edit.php', 'deleteuser' ) . '&action=deleteuser&id=' . $user['ID'] ) ) ); ?>" class="delete"><?php _e( 'Delete' ); ?></a></span>
|
|
<?php } ?>
|
|
</div>
|
|
</td>
|
|
<?php
|
|
break;
|
|
|
|
case 'name': ?>
|
|
<td class="name column-name"><?php echo $user['display_name'] ?></td>
|
|
<?php
|
|
break;
|
|
|
|
case 'email': ?>
|
|
<td class="email column-email"><a href="mailto:<?php echo $user['user_email'] ?>"><?php echo $user['user_email'] ?></a></td>
|
|
<?php
|
|
break;
|
|
|
|
case 'registered':
|
|
if ( 'list' == $mode )
|
|
$date = 'Y/m/d';
|
|
else
|
|
$date = 'Y/m/d \<\b\r \/\> g:i:s a';
|
|
?>
|
|
<td><?php echo mysql2date( __( $date ), $user['user_registered'] ); ?></td>
|
|
<?php
|
|
break;
|
|
|
|
case 'blogs':
|
|
$blogs = get_blogs_of_user( $user['ID'], true );
|
|
?>
|
|
<td>
|
|
<?php
|
|
if ( is_array( $blogs ) ) {
|
|
foreach ( (array) $blogs as $key => $val ) {
|
|
$path = ( $val->path == '/' ) ? '' : $val->path;
|
|
echo '<a href="'. esc_url( admin_url( 'ms-sites.php?action=editblog&id=' . $val->userblog_id ) ) .'">' . str_replace( '.' . $current_site->domain, '', $val->domain . $path ) . '</a>';
|
|
echo ' <small class="row-actions">';
|
|
|
|
// Edit
|
|
echo '<a href="'. esc_url( admin_url( 'ms-sites.php?action=editblog&id=' . $val->userblog_id ) ) .'">' . __( 'Edit' ) . '</a> | ';
|
|
|
|
// View
|
|
echo '<a ';
|
|
if ( get_blog_status( $val->userblog_id, 'spam' ) == 1 )
|
|
echo 'style="background-color: #faa" ';
|
|
echo 'href="' . esc_url( get_home_url( $val->userblog_id ) ) . '">' . __( 'View' ) . '</a>';
|
|
|
|
echo '</small><br />';
|
|
}
|
|
}
|
|
?>
|
|
</td>
|
|
<?php
|
|
break;
|
|
|
|
default: ?>
|
|
<td><?php do_action( 'manage_users_custom_column', $column_name, $user['ID'] ); ?></td>
|
|
<?php
|
|
break;
|
|
}
|
|
endforeach
|
|
?>
|
|
</tr>
|
|
<?php
|
|
}
|
|
} else {
|
|
?>
|
|
<tr>
|
|
<td colspan="<?php echo (int) count($users_columns); ?>"><?php _e( 'No users found.' ) ?></td>
|
|
</tr>
|
|
<?php
|
|
} // end if ($users)
|
|
?>
|
|
</tbody>
|
|
</table>
|
|
|
|
<div class="tablenav">
|
|
<?php
|
|
if ( $page_links )
|
|
echo "<div class='tablenav-pages'>$page_links_text</div>";
|
|
?>
|
|
|
|
<div class="alignleft actions">
|
|
<select name="action2">
|
|
<option value="-1" selected="selected"><?php _e( 'Bulk Actions' ); ?></option>
|
|
<option value="delete"><?php _e( 'Delete' ); ?></option>
|
|
<option value="spam"><?php _e( 'Mark as Spam' ); ?></option>
|
|
<option value="notspam"><?php _e( 'Not Spam' ); ?></option>
|
|
</select>
|
|
<input type="submit" value="<?php esc_attr_e( 'Apply' ); ?>" name="doaction2" id="doaction2" class="button-secondary action" />
|
|
</div>
|
|
<br class="clear" />
|
|
</div>
|
|
|
|
</form>
|
|
</div>
|
|
|
|
<?php
|
|
if ( apply_filters( 'show_adduser_fields', true ) ) :
|
|
?>
|
|
<div class="wrap" id="form-add-user">
|
|
<h3><?php _e( 'Add User' ) ?></h3>
|
|
<form action="ms-edit.php?action=adduser" method="post">
|
|
<table class="form-table">
|
|
<tr class="form-field form-required">
|
|
<th scope="row"><?php _e( 'Username' ) ?></th>
|
|
<td><input type="text" class="regular-text" name="user[username]" /></td>
|
|
</tr>
|
|
<tr class="form-field form-required">
|
|
<th scope="row"><?php _e( 'Email' ) ?></th>
|
|
<td><input type="text" class="regular-text" name="user[email]" /></td>
|
|
</tr>
|
|
<tr class="form-field">
|
|
<td colspan="2"><?php _e( 'Username and password will be mailed to the above email address.' ) ?></td>
|
|
</tr>
|
|
</table>
|
|
<p class="submit">
|
|
<?php wp_nonce_field( 'add-user' ) ?>
|
|
<input class="button" type="submit" value="<?php esc_attr_e( 'Add user' ) ?>" /></p>
|
|
</form>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?php include( './admin-footer.php' ); ?>
|