[ Index ] |
PHP Cross Reference of BBPress |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * bbPress Users Admin Class 5 * 6 * @package bbPress 7 * @subpackage Administration 8 */ 9 10 // Exit if accessed directly 11 defined( 'ABSPATH' ) || exit; 12 13 if ( ! class_exists( 'BBP_Users_Admin' ) ) : 14 /** 15 * Loads bbPress users admin area 16 * 17 * @package bbPress 18 * @subpackage Administration 19 * @since 2.0.0 bbPress (r2464) 20 */ 21 class BBP_Users_Admin { 22 23 /** 24 * The bbPress users admin loader 25 * 26 * @since 2.0.0 bbPress (r2515) 27 */ 28 public function __construct() { 29 $this->setup_actions(); 30 } 31 32 /** 33 * Setup the admin hooks, actions and filters 34 * 35 * @since 2.0.0 bbPress (r2646) 36 * 37 * @access private 38 */ 39 function setup_actions() { 40 41 // Bail if in network admin 42 if ( is_network_admin() ) { 43 return; 44 } 45 46 // User profile edit/display actions 47 add_action( 'edit_user_profile', array( $this, 'secondary_role_display' ) ); 48 49 // WordPress user screen 50 // Remove the bottom list table "change forum role" dropdown from WordPress < 4.6. 51 // See https://bbpress.trac.wordpress.org/ticket/2906. 52 if ( bbp_get_major_wp_version() < 4.6 ) { 53 add_action( 'restrict_manage_users', array( __CLASS__, 'user_role_bulk_dropdown' ) ); 54 } else { 55 add_action( 'restrict_manage_users', array( $this, 'user_role_bulk_dropdown' ), 10, 1 ); 56 } 57 add_filter( 'manage_users_columns', array( $this, 'user_role_column' ), 10, 1 ); 58 add_filter( 'manage_users_custom_column', array( $this, 'user_role_row' ), 10, 3 ); 59 60 // Only list bbPress roles under Forum Role, remove from WordPress' > 4.4 Site Role list. 61 if ( bbp_get_major_wp_version() >= 4.4 ) { 62 add_filter( 'get_role_list', array( $this, 'user_role_list_filter' ), 10, 2 ); 63 } 64 65 // User List Table 66 add_action( 'load-users.php', array( $this, 'user_role_bulk_change' ), 10, 1 ); 67 add_action( 'user_row_actions', array( $this, 'user_row_actions' ), 10, 2 ); 68 } 69 70 /** 71 * Default interface for setting a forum role 72 * 73 * @since 2.2.0 bbPress (r4285) 74 * 75 * @param WP_User $profileuser User data 76 * @return bool Always false 77 */ 78 public static function secondary_role_display( $profileuser ) { 79 80 // Bail if current user cannot edit users 81 if ( ! current_user_can( 'edit_user', $profileuser->ID ) ) { 82 return; 83 } 84 85 // Get the roles 86 $dynamic_roles = bbp_get_dynamic_roles(); 87 88 // Only keymasters can set other keymasters 89 if ( ! bbp_is_user_keymaster() ) { 90 unset( $dynamic_roles[ bbp_get_keymaster_role() ] ); 91 } ?> 92 93 <h2><?php esc_html_e( 'Forums', 'bbpress' ); ?></h2> 94 95 <table class="form-table"> 96 <tbody> 97 <tr> 98 <th><label for="bbp-forums-role"><?php esc_html_e( 'Forum Role', 'bbpress' ); ?></label></th> 99 <td> 100 101 <?php $user_role = bbp_get_user_role( $profileuser->ID ); ?> 102 103 <select name="bbp-forums-role" id="bbp-forums-role"> 104 105 <?php if ( ! empty( $user_role ) ) : ?> 106 107 <option value=""><?php esc_html_e( '— No role for these forums —', 'bbpress' ); ?></option> 108 109 <?php else : ?> 110 111 <option value="" selected="selected"><?php esc_html_e( '— No role for these forums —', 'bbpress' ); ?></option> 112 113 <?php endif; ?> 114 115 <?php foreach ( $dynamic_roles as $role => $details ) : ?> 116 117 <option <?php selected( $user_role, $role ); ?> value="<?php echo esc_attr( $role ); ?>"><?php echo bbp_translate_user_role( $details['name'] ); ?></option> 118 119 <?php endforeach; ?> 120 121 </select> 122 </td> 123 </tr> 124 125 </tbody> 126 </table> 127 128 <?php 129 } 130 131 /** 132 * Add bulk forums role dropdown to the WordPress users table 133 * 134 * @since 2.2.0 bbPress (r4360) 135 * @since 2.6.0 bbPress (r6055) Introduced the `$which` parameter. 136 * 137 * @param string $which The location of the extra table nav markup: 'top' or 'bottom'. 138 */ 139 public static function user_role_bulk_dropdown( $which ) { 140 141 // Remove the bottom list table "change forum role" dropdown from WordPress < 4.6. 142 // See https://bbpress.trac.wordpress.org/ticket/2906. 143 if ( bbp_get_major_wp_version() < 4.6 ) { 144 remove_action( 'restrict_manage_users', array( __CLASS__, 'user_role_bulk_dropdown' ) ); 145 } 146 147 // Bail if current user cannot promote users 148 if ( ! current_user_can( 'promote_users' ) ) { 149 return; 150 } 151 152 // Get the roles 153 $dynamic_roles = bbp_get_dynamic_roles(); 154 155 // Only keymasters can set other keymasters 156 if ( ! bbp_is_user_keymaster() ) { 157 unset( $dynamic_roles[ bbp_get_keymaster_role() ] ); 158 } 159 160 $select_id = 'bottom' === $which ? 'bbp-new-role2' : 'bbp-new-role'; 161 $button_id = 'bottom' === $which ? 'bbp-change-role2' : 'bbp-change-role'; 162 ?> 163 164 <label class="screen-reader-text" for="<?php echo $select_id; ?>"><?php esc_html_e( 'Change forum role to…', 'bbpress' ); ?></label> 165 <select name="<?php echo $select_id; ?>" id="<?php echo $select_id; ?>" style="display:inline-block; float:none;"> 166 <option value=''><?php esc_html_e( 'Change forum role to…', 'bbpress' ); ?></option> 167 <?php foreach ( $dynamic_roles as $role => $details ) : ?> 168 <option value="<?php echo esc_attr( $role ); ?>"><?php echo bbp_translate_user_role( $details['name'] ); ?></option> 169 <?php endforeach; ?> 170 </select><?php submit_button( esc_html__( 'Change', 'bbpress' ), 'secondary', $button_id, false ); 171 172 wp_nonce_field( 'bbp-bulk-users', 'bbp-bulk-users-nonce' ); 173 } 174 175 /** 176 * Process bulk dropdown form submission from the WordPress Users 177 * Table 178 * 179 * @since 2.2.0 bbPress (r4365) 180 * 181 * @return bool Always false 182 */ 183 public function user_role_bulk_change() { 184 185 // Bail if no users specified 186 if ( empty( $_REQUEST['users'] ) ) { 187 return; 188 } 189 190 // Bail if this isn't a bbPress action 191 if ( ( empty( $_REQUEST['bbp-new-role'] ) && empty( $_REQUEST['bbp-new-role2'] ) ) || ( empty( $_REQUEST['bbp-change-role'] ) && empty( $_REQUEST['bbp-change-role2'] ) ) ) { 192 return; 193 } 194 195 $new_role = false; 196 if ( ! empty( $_REQUEST['bbp-change-role2'] ) && ! empty( $_REQUEST['bbp-new-role2'] ) ) { 197 $new_role = $_REQUEST['bbp-new-role2']; 198 } elseif ( ! empty( $_REQUEST['bbp-change-role'] ) && ! empty( $_REQUEST['bbp-new-role'] ) ) { 199 $new_role = $_REQUEST['bbp-new-role']; 200 } 201 202 // Check that the new role exists 203 $dynamic_roles = bbp_get_dynamic_roles(); 204 if ( ! $new_role || empty( $dynamic_roles[ $new_role ] ) ) { 205 return; 206 } 207 208 // Bail if nonce check fails 209 check_admin_referer( 'bbp-bulk-users', 'bbp-bulk-users-nonce' ); 210 211 // Bail if current user cannot promote users 212 if ( ! current_user_can( 'promote_users' ) ) { 213 return; 214 } 215 216 // Get the current user ID 217 $current_user_id = (int) bbp_get_current_user_id(); 218 219 // Run through user ids 220 foreach ( (array) $_REQUEST['users'] as $user_id ) { 221 $user_id = (int) $user_id; 222 223 // Don't let a user change their own role 224 if ( $user_id === $current_user_id ) { 225 continue; 226 } 227 228 // Set up user and role data 229 $user_role = bbp_get_user_role( $user_id ); 230 $new_role = sanitize_text_field( $new_role ); 231 232 // Only keymasters can set other keymasters 233 if ( in_array( bbp_get_keymaster_role(), array( $user_role, $new_role ), true ) && ! bbp_is_user_keymaster() ) { 234 continue; 235 } 236 237 // Set the new forums role 238 if ( $new_role !== $user_role ) { 239 bbp_set_user_role( $user_id, $new_role ); 240 } 241 } 242 } 243 244 /** 245 * Add a "View" link for each user 246 * 247 * @since 2.6.0 bbPress (r6502) 248 * 249 * @param array $actions 250 * @param WP_User $user 251 * 252 * @return array Actions with 'view' link added to them 253 */ 254 public function user_row_actions( $actions = array(), $user = false ) { 255 256 // Reverse 257 $actions = array_reverse( $actions ); 258 259 // Add the view action link 260 $actions['view'] = '<a href="' . esc_url( bbp_get_user_profile_url( $user->ID ) ) . '" class="bbp-user-profile-link">' . esc_html__( 'View', 'bbpress' ) . '</a>'; 261 262 // Re-reverse 263 return array_reverse( $actions ); 264 } 265 266 /** 267 * Add Forum Role column to the WordPress Users table, and change the 268 * core role title to "Site Role" 269 * 270 * @since 2.2.0 bbPress (r4337) 271 * 272 * @param array $columns Users table columns 273 * @return array $columns 274 */ 275 public static function user_role_column( $columns = array() ) { 276 277 // New title for old Role column 278 $columns['role'] = esc_html__( 'Site Role', 'bbpress' ); 279 280 // New column 281 $bbp_user_role = array( 282 'bbp_user_role' => esc_html__( 'Forum Role', 'bbpress' ) 283 ); 284 285 // Make sure role columns are next to each other 286 $role_pos = array_search( 'role', array_keys( $columns ), true ); 287 $result = array_slice( $columns, 0, $role_pos + 1 ); 288 $result = array_merge( $result, $bbp_user_role ); 289 290 // Merge and return 291 return array_merge( $result, array_slice( $columns, $role_pos ) ); 292 } 293 294 /** 295 * Return user's forums role for display in the WordPress Users list table 296 * 297 * @since 2.2.0 bbPress (r4337) 298 * 299 * @param string $retval 300 * @param string $column_name 301 * @param int $user_id 302 * 303 * @return string Displayable bbPress user role 304 */ 305 public static function user_role_row( $retval = '', $column_name = '', $user_id = 0 ) { 306 307 // User role column 308 if ( 'bbp_user_role' === $column_name ) { 309 310 // Get the users role 311 $user_role = bbp_get_user_role( $user_id ); 312 $retval = false; 313 314 // Translate user role for display 315 if ( ! empty( $user_role ) ) { 316 $roles = bbp_get_dynamic_roles(); 317 $retval = bbp_translate_user_role( $roles[ $user_role ]['name'] ); 318 } 319 } 320 321 // Pass retval through 322 return $retval; 323 } 324 325 /** 326 * Filter the list of roles included in the WordPress site role list 327 * 328 * Ensures forum roles are only displayed under the Forum Role list in the 329 * WordPress Users list table 330 * 331 * @since 2.6.0 bbPress (r6051) 332 * 333 * @return array $roles 334 */ 335 public static function user_role_list_filter( $roles, $user ) { 336 337 // Get the users role 338 $user_role = bbp_get_user_role( $user->ID ); 339 340 if ( ! empty( $user_role ) ) { 341 unset( $roles[ $user_role ] ); 342 } 343 344 return $roles; 345 } 346 } 347 new BBP_Users_Admin(); 348 endif; // class exists
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Dec 3 01:00:50 2024 | Cross-referenced by PHPXref 0.7.1 |