diff -r c7c0fbc09788 -r 5e8dcbe22c24 web/wp-content/plugins/bbpress/includes/core/capabilities.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/wp-content/plugins/bbpress/includes/core/capabilities.php Tue Dec 04 18:43:10 2012 -0800 @@ -0,0 +1,545 @@ + true, + + // Primary caps + 'spectate' => true, + 'participate' => true, + 'moderate' => true, + 'throttle' => true, + 'view_trash' => true, + + // Forum caps + 'publish_forums' => true, + 'edit_forums' => true, + 'edit_others_forums' => true, + 'delete_forums' => true, + 'delete_others_forums' => true, + 'read_private_forums' => true, + 'read_hidden_forums' => true, + + // Topic caps + 'publish_topics' => true, + 'edit_topics' => true, + 'edit_others_topics' => true, + 'delete_topics' => true, + 'delete_others_topics' => true, + 'read_private_topics' => true, + + // Reply caps + 'publish_replies' => true, + 'edit_replies' => true, + 'edit_others_replies' => true, + 'delete_replies' => true, + 'delete_others_replies' => true, + 'read_private_replies' => true, + + // Topic tag caps + 'manage_topic_tags' => true, + 'edit_topic_tags' => true, + 'delete_topic_tags' => true, + 'assign_topic_tags' => true + ); + + break; + + // Moderator + case bbp_get_moderator_role() : + $caps = array( + + // Primary caps + 'spectate' => true, + 'participate' => true, + 'moderate' => true, + 'throttle' => true, + 'view_trash' => false, + + // Forum caps + 'publish_forums' => true, + 'edit_forums' => true, + 'edit_others_forums' => false, + 'delete_forums' => false, + 'delete_others_forums' => false, + 'read_private_forums' => true, + 'read_hidden_forums' => true, + + // Topic caps + 'publish_topics' => true, + 'edit_topics' => true, + 'edit_others_topics' => true, + 'delete_topics' => true, + 'delete_others_topics' => true, + 'read_private_topics' => true, + + // Reply caps + 'publish_replies' => true, + 'edit_replies' => true, + 'edit_others_replies' => true, + 'delete_replies' => true, + 'delete_others_replies' => true, + 'read_private_replies' => true, + + // Topic tag caps + 'manage_topic_tags' => true, + 'edit_topic_tags' => true, + 'delete_topic_tags' => true, + 'assign_topic_tags' => true, + ); + + break; + + // Spectators can only read + case bbp_get_spectator_role() : + $caps = array( + + // Primary caps + 'spectate' => true, + 'participate' => false, + 'moderate' => false, + 'throttle' => false, + 'view_trash' => false, + + // Forum caps + 'publish_forums' => false, + 'edit_forums' => false, + 'edit_others_forums' => false, + 'delete_forums' => false, + 'delete_others_forums' => false, + 'read_private_forums' => false, + 'read_hidden_forums' => false, + + // Topic caps + 'publish_topics' => false, + 'edit_topics' => false, + 'edit_others_topics' => false, + 'delete_topics' => false, + 'delete_others_topics' => false, + 'read_private_topics' => false, + + // Reply caps + 'publish_replies' => false, + 'edit_replies' => false, + 'edit_others_replies' => false, + 'delete_replies' => false, + 'delete_others_replies' => false, + 'read_private_replies' => false, + + // Topic tag caps + 'manage_topic_tags' => false, + 'edit_topic_tags' => false, + 'delete_topic_tags' => false, + 'assign_topic_tags' => false, + ); + + break; + + // Explicitly blocked + case bbp_get_blocked_role() : + $caps = array( + + // Primary caps + 'spectate' => false, + 'participate' => false, + 'moderate' => false, + 'throttle' => false, + 'view_trash' => false, + + // Forum caps + 'publish_forums' => false, + 'edit_forums' => false, + 'edit_others_forums' => false, + 'delete_forums' => false, + 'delete_others_forums' => false, + 'read_private_forums' => false, + 'read_hidden_forums' => false, + + // Topic caps + 'publish_topics' => false, + 'edit_topics' => false, + 'edit_others_topics' => false, + 'delete_topics' => false, + 'delete_others_topics' => false, + 'read_private_topics' => false, + + // Reply caps + 'publish_replies' => false, + 'edit_replies' => false, + 'edit_others_replies' => false, + 'delete_replies' => false, + 'delete_others_replies' => false, + 'read_private_replies' => false, + + // Topic tag caps + 'manage_topic_tags' => false, + 'edit_topic_tags' => false, + 'delete_topic_tags' => false, + 'assign_topic_tags' => false, + ); + + break; + + // Participant/Default + case bbp_get_participant_role() : + default : + $caps = array( + + // Primary caps + 'spectate' => true, + 'participate' => true, + 'moderate' => false, + 'throttle' => false, + 'view_trash' => false, + + // Forum caps + 'publish_forums' => false, + 'edit_forums' => false, + 'edit_others_forums' => false, + 'delete_forums' => false, + 'delete_others_forums' => false, + 'read_private_forums' => true, + 'read_hidden_forums' => false, + + // Topic caps + 'publish_topics' => true, + 'edit_topics' => true, + 'edit_others_topics' => false, + 'delete_topics' => false, + 'delete_others_topics' => false, + 'read_private_topics' => false, + + // Reply caps + 'publish_replies' => true, + 'edit_replies' => true, + 'edit_others_replies' => false, + 'delete_replies' => false, + 'delete_others_replies' => false, + 'read_private_replies' => false, + + // Topic tag caps + 'manage_topic_tags' => false, + 'edit_topic_tags' => false, + 'delete_topic_tags' => false, + 'assign_topic_tags' => true, + ); + + break; + } + + return apply_filters( 'bbp_get_caps_for_role', $caps, $role ); +} + +/** + * Adds capabilities to WordPress user roles. + * + * @since bbPress (r2608) + */ +function bbp_add_caps() { + + // Loop through available roles and add caps + foreach( bbp_get_wp_roles()->role_objects as $role ) { + foreach ( bbp_get_caps_for_role( $role->name ) as $cap => $value ) { + $role->add_cap( $cap, $value ); + } + } + + do_action( 'bbp_add_caps' ); +} + +/** + * Removes capabilities from WordPress user roles. + * + * @since bbPress (r2608) + */ +function bbp_remove_caps() { + + // Loop through available roles and remove caps + foreach( bbp_get_wp_roles()->role_objects as $role ) { + foreach ( array_keys( bbp_get_caps_for_role( $role->name ) ) as $cap ) { + $role->remove_cap( $cap ); + } + } + + do_action( 'bbp_remove_caps' ); +} + +/** + * Get the $wp_roles global without needing to declare it everywhere + * + * @since bbPress (r4293) + * + * @global WP_Roles $wp_roles + * @return WP_Roles + */ +function bbp_get_wp_roles() { + global $wp_roles; + + // Load roles if not set + if ( ! isset( $wp_roles ) ) + $wp_roles = new WP_Roles(); + + return $wp_roles; +} + +/** Forum Roles ***************************************************************/ + +/** + * Add the bbPress roles to the $wp_roles global. + * + * We do this to avoid adding these values to the database. + * + * @since bbPress (r4290) + */ +function bbp_add_forums_roles() { + $wp_roles = bbp_get_wp_roles(); + + foreach( bbp_get_dynamic_roles() as $role_id => $details ) { + $wp_roles->roles[$role_id] = $details; + $wp_roles->role_objects[$role_id] = new WP_Role( $details['name'], $details['capabilities'] ); + $wp_roles->role_names[$role_id] = $details['name']; + } +} + +/** + * Helper function to add filter to option_wp_user_roles + * + * @since bbPress (r4363) + * + * @see _bbp_reinit_dynamic_roles() + * + * @global WPDB $wpdb Used to get the database prefix + */ +function bbp_filter_user_roles_option() { + global $wpdb; + + $role_key = $wpdb->prefix . 'user_roles'; + + add_filter( 'option_' . $role_key, '_bbp_reinit_dynamic_roles' ); +} + +/** + * This is necessary because in a few places (noted below) WordPress initializes + * a blog's roles directly from the database option. When this happens, the + * $wp_roles global gets flushed, causing a user to magically lose any + * dynamically assigned roles or capabilities when $current_user in refreshed. + * + * Because dynamic multiple roles is a new concept in WordPress, we work around + * it here for now, knowing that improvements will come to WordPress core later. + * + * @see switch_to_blog() + * @see restore_current_blog() + * @see WP_Roles::_init() + * + * @since bbPress (r4363) + * + * @internal Used by bbPress to reinitialize dynamic roles on blog switch + * + * @param array $roles + * @return array Combined array of database roles and dynamic bbPress roles + */ +function _bbp_reinit_dynamic_roles( $roles = array() ) { + foreach( bbp_get_dynamic_roles() as $role_id => $details ) { + $roles[$role_id] = $details; + } + return $roles; +} + +/** + * Fetch a filtered list of forum roles that the current user is + * allowed to have. + * + * Simple function who's main purpose is to allow filtering of the + * list of forum roles so that plugins can remove inappropriate ones depending + * on the situation or user making edits. + * + * Specifically because without filtering, anyone with the edit_users + * capability can edit others to be administrators, even if they are + * only editors or authors. This filter allows admins to delegate + * user management. + * + * @since bbPress (r4284) + * + * @return array + */ +function bbp_get_dynamic_roles() { + return (array) apply_filters( 'bbp_get_dynamic_roles', array( + + // Keymaster + bbp_get_keymaster_role() => array( + 'name' => __( 'Keymaster', 'bbpress' ), + 'capabilities' => bbp_get_caps_for_role( bbp_get_keymaster_role() ) + ), + + // Moderator + bbp_get_moderator_role() => array( + 'name' => __( 'Moderator', 'bbpress' ), + 'capabilities' => bbp_get_caps_for_role( bbp_get_moderator_role() ) + ), + + // Participant + bbp_get_participant_role() => array( + 'name' => __( 'Participant', 'bbpress' ), + 'capabilities' => bbp_get_caps_for_role( bbp_get_participant_role() ) + ), + + // Spectator + bbp_get_spectator_role() => array( + 'name' => __( 'Spectator', 'bbpress' ), + 'capabilities' => bbp_get_caps_for_role( bbp_get_spectator_role() ) + ), + + // Blocked + bbp_get_blocked_role() => array( + 'name' => __( 'Blocked', 'bbpress' ), + 'capabilities' => bbp_get_caps_for_role( bbp_get_blocked_role() ) + ) + ) ); +} + +/** + * Removes the bbPress roles from the editable roles array + * + * This used to use array_diff_assoc() but it randomly broke before 2.2 release. + * Need to research what happened, and if there's a way to speed this up. + * + * @since bbPress (r4303) + * + * @param array $all_roles All registered roles + * @return array + */ +function bbp_filter_blog_editable_roles( $all_roles = array() ) { + + // Loop through bbPress roles + foreach ( array_keys( bbp_get_dynamic_roles() ) as $bbp_role ) { + + // Loop through WordPress roles + foreach ( array_keys( $all_roles ) as $wp_role ) { + + // If keys match, unset + if ( $wp_role == $bbp_role ) { + unset( $all_roles[$wp_role] ); + } + } + } + + return $all_roles; +} + +/** + * The keymaster role for bbPress users + * + * @since bbPress (r4284) + * + * @uses apply_filters() Allow override of hardcoded keymaster role + * @return string + */ +function bbp_get_keymaster_role() { + return apply_filters( 'bbp_get_keymaster_role', 'bbp_keymaster' ); +} + +/** + * The moderator role for bbPress users + * + * @since bbPress (r3410) + * + * @uses apply_filters() Allow override of hardcoded moderator role + * @return string + */ +function bbp_get_moderator_role() { + return apply_filters( 'bbp_get_moderator_role', 'bbp_moderator' ); +} + +/** + * The participant role for registered user that can participate in forums + * + * @since bbPress (r3410) + * + * @uses apply_filters() Allow override of hardcoded participant role + * @return string + */ +function bbp_get_participant_role() { + return apply_filters( 'bbp_get_participant_role', 'bbp_participant' ); +} + +/** + * The spectator role is for registered users without any capabilities + * + * @since bbPress (r3860) + * + * @uses apply_filters() Allow override of hardcoded spectator role + * @return string + */ +function bbp_get_spectator_role() { + return apply_filters( 'bbp_get_spectator_role', 'bbp_spectator' ); +} + +/** + * The blocked role is for registered users that cannot spectate or participate + * + * @since bbPress (r4284) + * + * @uses apply_filters() Allow override of hardcoded blocked role + * @return string + */ +function bbp_get_blocked_role() { + return apply_filters( 'bbp_get_blocked_role', 'bbp_blocked' ); +} + +/** Deprecated ****************************************************************/ + +/** + * Adds bbPress-specific user roles. + * + * @since bbPress (r2741) + * @deprecated since version 2.2 + */ +function bbp_add_roles() { + _doing_it_wrong( 'bbp_add_roles', __( 'Editable forum roles no longer exist.', 'bbpress' ), '2.2' ); +} + +/** + * Removes bbPress-specific user roles. + * + * @since bbPress (r2741) + * @deprecated since version 2.2 + */ +function bbp_remove_roles() { + _doing_it_wrong( 'bbp_remove_roles', __( 'Editable forum roles no longer exist.', 'bbpress' ), '2.2' ); +}