| | 391 | /** |
| | 392 | * Temporary implementation of 'bp_moderate' cap |
| | 393 | * |
| | 394 | * In BuddyPress 1.6, the 'bp_moderate' cap was introduced. In order to enforce that |
| | 395 | * bp_current_user_can( 'bp_moderate' ) always returns true for Administrators, we must manually |
| | 396 | * add the 'bp_moderate' cap to the list of user caps for Admins. |
| | 397 | * |
| | 398 | * Note that this level of enforcement is only necessary in the case of non-Multisite. This is |
| | 399 | * because WordPress automatically assigns every capability - and thus 'bp_moderate' - to Super |
| | 400 | * Admins on a Multisite installation. See WP_User::has_cap(). |
| | 401 | * |
| | 402 | * This implementation of 'bp_moderate' is temporary, until BuddyPress properly matches caps to |
| | 403 | * roles and stores them in the database. Plugin authors: Do not use this function. |
| | 404 | * |
| | 405 | * @since BuddyPress (1.6) |
| | 406 | * @see WP_User::has_cap() |
| | 407 | * |
| | 408 | * @param array $allcaps The caps that WP associates with the given role |
| | 409 | * @param array $caps The caps being tested for in WP_User::has_cap() |
| | 410 | * @param array $args Miscellaneous arguments passed to the user_has_cap filter |
| | 411 | * @return array $allcaps The user's cap list, with 'bp_moderate' appended, if relevant |
| | 412 | */ |
| | 413 | function _bp_enforce_bp_moderate_cap_for_admins( $allcaps, $caps, $args ) { |
| | 414 | if ( in_array( 'bp_moderate', $caps ) && // We only care if checking for bp_moderate |
| | 415 | !in_array( 'do_not_allow', $caps ) && // 'do_not_allow' overrides everything else |
| | 416 | !is_multisite() && // Check not necessary on Multisite |
| | 417 | isset( $allcaps['delete_users'] ) ) // Mimicking WP's check for Administrator status |
| | 418 | { |
| | 419 | $allcaps['bp_moderate'] = true; |
| | 420 | } |
| | 421 | |
| | 422 | return $allcaps; |
| | 423 | } |
| | 424 | add_filter( 'user_has_cap', '_bp_enforce_bp_moderate_cap_for_admins', 10, 3 ); |
| | 425 | |