first commit
This commit is contained in:
348
wp-content/plugins/bbpress/includes/admin/users.php
Normal file
348
wp-content/plugins/bbpress/includes/admin/users.php
Normal file
@@ -0,0 +1,348 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* bbPress Users Admin Class
|
||||
*
|
||||
* @package bbPress
|
||||
* @subpackage Administration
|
||||
*/
|
||||
|
||||
// Exit if accessed directly
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
if ( ! class_exists( 'BBP_Users_Admin' ) ) :
|
||||
/**
|
||||
* Loads bbPress users admin area
|
||||
*
|
||||
* @package bbPress
|
||||
* @subpackage Administration
|
||||
* @since 2.0.0 bbPress (r2464)
|
||||
*/
|
||||
class BBP_Users_Admin {
|
||||
|
||||
/**
|
||||
* The bbPress users admin loader
|
||||
*
|
||||
* @since 2.0.0 bbPress (r2515)
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->setup_actions();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the admin hooks, actions and filters
|
||||
*
|
||||
* @since 2.0.0 bbPress (r2646)
|
||||
*
|
||||
* @access private
|
||||
*/
|
||||
function setup_actions() {
|
||||
|
||||
// Bail if in network admin
|
||||
if ( is_network_admin() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// User profile edit/display actions
|
||||
add_action( 'edit_user_profile', array( $this, 'secondary_role_display' ) );
|
||||
|
||||
// WordPress user screen
|
||||
// Remvove the bottom list table "change forum role" dropdown from WordPress < 4.6.
|
||||
// See https://bbpress.trac.wordpress.org/ticket/2906.
|
||||
if ( bbp_get_major_wp_version() < 4.6 ) {
|
||||
add_action( 'restrict_manage_users', array( __CLASS__, 'user_role_bulk_dropdown' ) );
|
||||
} else {
|
||||
add_action( 'restrict_manage_users', array( $this, 'user_role_bulk_dropdown' ), 10, 1 );
|
||||
}
|
||||
add_filter( 'manage_users_columns', array( $this, 'user_role_column' ), 10, 1 );
|
||||
add_filter( 'manage_users_custom_column', array( $this, 'user_role_row' ), 10, 3 );
|
||||
|
||||
// Only list bbPress roles under Forum Role, remove from WordPress' > 4.4 Site Role list.
|
||||
if ( bbp_get_major_wp_version() >= 4.4 ) {
|
||||
add_filter( 'get_role_list', array( $this, 'user_role_list_filter' ), 10, 2 );
|
||||
}
|
||||
|
||||
// User List Table
|
||||
add_action( 'load-users.php', array( $this, 'user_role_bulk_change' ), 10, 1 );
|
||||
add_action( 'user_row_actions', array( $this, 'user_row_actions' ), 10, 2 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Default interface for setting a forum role
|
||||
*
|
||||
* @since 2.2.0 bbPress (r4285)
|
||||
*
|
||||
* @param WP_User $profileuser User data
|
||||
* @return bool Always false
|
||||
*/
|
||||
public static function secondary_role_display( $profileuser ) {
|
||||
|
||||
// Bail if current user cannot edit users
|
||||
if ( ! current_user_can( 'edit_user', $profileuser->ID ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the roles
|
||||
$dynamic_roles = bbp_get_dynamic_roles();
|
||||
|
||||
// Only keymasters can set other keymasters
|
||||
if ( ! bbp_is_user_keymaster() ) {
|
||||
unset( $dynamic_roles[ bbp_get_keymaster_role() ] );
|
||||
} ?>
|
||||
|
||||
<h2><?php esc_html_e( 'Forums', 'bbpress' ); ?></h2>
|
||||
|
||||
<table class="form-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th><label for="bbp-forums-role"><?php esc_html_e( 'Forum Role', 'bbpress' ); ?></label></th>
|
||||
<td>
|
||||
|
||||
<?php $user_role = bbp_get_user_role( $profileuser->ID ); ?>
|
||||
|
||||
<select name="bbp-forums-role" id="bbp-forums-role">
|
||||
|
||||
<?php if ( ! empty( $user_role ) ) : ?>
|
||||
|
||||
<option value=""><?php esc_html_e( '— No role for these forums —', 'bbpress' ); ?></option>
|
||||
|
||||
<?php else : ?>
|
||||
|
||||
<option value="" selected="selected"><?php esc_html_e( '— No role for these forums —', 'bbpress' ); ?></option>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<?php foreach ( $dynamic_roles as $role => $details ) : ?>
|
||||
|
||||
<option <?php selected( $user_role, $role ); ?> value="<?php echo esc_attr( $role ); ?>"><?php echo bbp_translate_user_role( $details['name'] ); ?></option>
|
||||
|
||||
<?php endforeach; ?>
|
||||
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Add bulk forums role dropdown to the WordPress users table
|
||||
*
|
||||
* @since 2.2.0 bbPress (r4360)
|
||||
* @since 2.6.0 bbPress (r6055) Introduced the `$which` parameter.
|
||||
*
|
||||
* @param string $which The location of the extra table nav markup: 'top' or 'bottom'.
|
||||
*/
|
||||
public static function user_role_bulk_dropdown( $which ) {
|
||||
|
||||
// Remove the bottom list table "change forum role" dropdown from WordPress < 4.6.
|
||||
// See https://bbpress.trac.wordpress.org/ticket/2906.
|
||||
if ( bbp_get_major_wp_version() < 4.6 ) {
|
||||
remove_action( 'restrict_manage_users', array( __CLASS__, 'user_role_bulk_dropdown' ) );
|
||||
}
|
||||
|
||||
// Bail if current user cannot promote users
|
||||
if ( ! current_user_can( 'promote_users' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the roles
|
||||
$dynamic_roles = bbp_get_dynamic_roles();
|
||||
|
||||
// Only keymasters can set other keymasters
|
||||
if ( ! bbp_is_user_keymaster() ) {
|
||||
unset( $dynamic_roles[ bbp_get_keymaster_role() ] );
|
||||
}
|
||||
|
||||
$select_id = 'bottom' === $which ? 'bbp-new-role2' : 'bbp-new-role';
|
||||
$button_id = 'bottom' === $which ? 'bbp-change-role2' : 'bbp-change-role';
|
||||
?>
|
||||
|
||||
<label class="screen-reader-text" for="<?php echo $select_id; ?>"><?php esc_html_e( 'Change forum role to…', 'bbpress' ) ?></label>
|
||||
<select name="<?php echo $select_id; ?>" id="<?php echo $select_id; ?>" style="display:inline-block; float:none;">
|
||||
<option value=''><?php esc_html_e( 'Change forum role to…', 'bbpress' ) ?></option>
|
||||
<?php foreach ( $dynamic_roles as $role => $details ) : ?>
|
||||
<option value="<?php echo esc_attr( $role ); ?>"><?php echo bbp_translate_user_role( $details['name'] ); ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select><?php submit_button( esc_html__( 'Change', 'bbpress' ), 'secondary', $button_id, false );
|
||||
|
||||
wp_nonce_field( 'bbp-bulk-users', 'bbp-bulk-users-nonce' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Process bulk dropdown form submission from the WordPress Users
|
||||
* Table
|
||||
*
|
||||
* @since 2.2.0 bbPress (r4365)
|
||||
*
|
||||
* @return bool Always false
|
||||
*/
|
||||
public function user_role_bulk_change() {
|
||||
|
||||
// Bail if no users specified
|
||||
if ( empty( $_REQUEST['users'] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Bail if this isn't a bbPress action
|
||||
if ( ( empty( $_REQUEST['bbp-new-role'] ) && empty( $_REQUEST['bbp-new-role2'] ) ) || ( empty( $_REQUEST['bbp-change-role'] ) && empty( $_REQUEST['bbp-change-role2'] ) ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$new_role = false;
|
||||
if ( ! empty( $_REQUEST['bbp-change-role2'] ) && ! empty( $_REQUEST['bbp-new-role2'] ) ) {
|
||||
$new_role = $_REQUEST['bbp-new-role2'];
|
||||
} elseif ( ! empty( $_REQUEST['bbp-change-role'] ) && ! empty( $_REQUEST['bbp-new-role'] ) ) {
|
||||
$new_role = $_REQUEST['bbp-new-role'];
|
||||
}
|
||||
|
||||
// Check that the new role exists
|
||||
$dynamic_roles = bbp_get_dynamic_roles();
|
||||
if ( ! $new_role || empty( $dynamic_roles[ $new_role ] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Bail if nonce check fails
|
||||
check_admin_referer( 'bbp-bulk-users', 'bbp-bulk-users-nonce' );
|
||||
|
||||
// Bail if current user cannot promote users
|
||||
if ( ! current_user_can( 'promote_users' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the current user ID
|
||||
$current_user_id = (int) bbp_get_current_user_id();
|
||||
|
||||
// Run through user ids
|
||||
foreach ( (array) $_REQUEST['users'] as $user_id ) {
|
||||
$user_id = (int) $user_id;
|
||||
|
||||
// Don't let a user change their own role
|
||||
if ( $user_id === $current_user_id ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Set up user and role data
|
||||
$user_role = bbp_get_user_role( $user_id );
|
||||
$new_role = sanitize_text_field( $new_role );
|
||||
|
||||
// Only keymasters can set other keymasters
|
||||
if ( in_array( bbp_get_keymaster_role(), array( $user_role, $new_role ), true ) && ! bbp_is_user_keymaster() ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Set the new forums role
|
||||
if ( $new_role !== $user_role ) {
|
||||
bbp_set_user_role( $user_id, $new_role );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a "View" link for each user
|
||||
*
|
||||
* @since 2.6.0 bbPress (r6502)
|
||||
*
|
||||
* @param array $actions
|
||||
* @param WP_User $user
|
||||
*
|
||||
* @return array Actions with 'view' link added to them
|
||||
*/
|
||||
public function user_row_actions( $actions = array(), $user = false ) {
|
||||
|
||||
// Reverse
|
||||
$actions = array_reverse( $actions );
|
||||
|
||||
// Add the view action link
|
||||
$actions['view'] = '<a href="' . esc_url( bbp_get_user_profile_url( $user->ID ) ) . '" class="bbp-user-profile-link">' . esc_html__( 'View', 'bbpress' ) . '</a>';
|
||||
|
||||
// Re-reverse
|
||||
return array_reverse( $actions );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Forum Role column to the WordPress Users table, and change the
|
||||
* core role title to "Site Role"
|
||||
*
|
||||
* @since 2.2.0 bbPress (r4337)
|
||||
*
|
||||
* @param array $columns Users table columns
|
||||
* @return array $columns
|
||||
*/
|
||||
public static function user_role_column( $columns = array() ) {
|
||||
|
||||
// New title for old Role column
|
||||
$columns['role'] = esc_html__( 'Site Role', 'bbpress' );
|
||||
|
||||
// New column
|
||||
$bbp_user_role = array(
|
||||
'bbp_user_role' => esc_html__( 'Forum Role', 'bbpress' )
|
||||
);
|
||||
|
||||
// Make sure role columns are next to each other
|
||||
$role_pos = array_search( 'role', array_keys( $columns ), true );
|
||||
$result = array_slice( $columns, 0, $role_pos + 1 );
|
||||
$result = array_merge( $result, $bbp_user_role );
|
||||
|
||||
// Merge and return
|
||||
return array_merge( $result, array_slice( $columns, $role_pos ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Return user's forums role for display in the WordPress Users list table
|
||||
*
|
||||
* @since 2.2.0 bbPress (r4337)
|
||||
*
|
||||
* @param string $retval
|
||||
* @param string $column_name
|
||||
* @param int $user_id
|
||||
*
|
||||
* @return string Displayable bbPress user role
|
||||
*/
|
||||
public static function user_role_row( $retval = '', $column_name = '', $user_id = 0 ) {
|
||||
|
||||
// User role column
|
||||
if ( 'bbp_user_role' === $column_name ) {
|
||||
|
||||
// Get the users role
|
||||
$user_role = bbp_get_user_role( $user_id );
|
||||
$retval = false;
|
||||
|
||||
// Translate user role for display
|
||||
if ( ! empty( $user_role ) ) {
|
||||
$roles = bbp_get_dynamic_roles();
|
||||
$retval = bbp_translate_user_role( $roles[ $user_role ]['name'] );
|
||||
}
|
||||
}
|
||||
|
||||
// Pass retval through
|
||||
return $retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter the list of roles included in the WordPress site role list
|
||||
*
|
||||
* Ensures forum roles are only displayed under the Forum Role list in the
|
||||
* WordPress Users list table
|
||||
*
|
||||
* @since 2.6.0 bbPress (r6051)
|
||||
*
|
||||
* @return array $roles
|
||||
*/
|
||||
public static function user_role_list_filter( $roles, $user ) {
|
||||
|
||||
// Get the users role
|
||||
$user_role = bbp_get_user_role( $user->ID );
|
||||
|
||||
if ( ! empty( $user_role ) ) {
|
||||
unset( $roles[ $user_role ] );
|
||||
}
|
||||
|
||||
return $roles;
|
||||
}
|
||||
}
|
||||
new BBP_Users_Admin();
|
||||
endif; // class exists
|
||||
Reference in New Issue
Block a user