diff -r c7c0fbc09788 -r 5e8dcbe22c24 web/wp-content/plugins/bbpress/includes/users/capabilities.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/wp-content/plugins/bbpress/includes/users/capabilities.php Tue Dec 04 18:43:10 2012 -0800 @@ -0,0 +1,646 @@ +remove_role( $role ); + } + + // Add the new role + if ( !empty( $new_role ) ) { + $user->add_role( $new_role ); + } + } + + // User does don exist so return false + } else { + $new_role = false; + } + + return apply_filters( 'bbp_set_user_role', $new_role, $user_id, $user ); +} + +/** + * Return a user's forums role + * + * @since bbPress (r3860) + * + * @param int $user_id + * @uses bbp_get_user_id() To get the user id + * @uses get_userdata() To get the user data + * @uses apply_filters() Calls 'bbp_get_user_role' with the role and user id + * @return string + */ +function bbp_get_user_role( $user_id = 0 ) { + + // Validate user id + $user_id = bbp_get_user_id( $user_id, false, false ); + $user = get_userdata( $user_id ); + $role = false; + + // User has roles so lets + if ( ! empty( $user->roles ) ) { + $roles = array_intersect( array_values( $user->roles ), array_keys( bbp_get_dynamic_roles() ) ); + + // If there's a role in the array, use the first one + if ( !empty( $roles ) ) { + $role = array_shift( array_values( $roles ) ); + } + } + + return apply_filters( 'bbp_get_user_role', $role, $user_id, $user ); +} + +/** + * Return a user's blog role + * + * @since bbPress (r4446) + * + * @param int $user_id + * @uses bbp_get_user_id() To get the user id + * @uses get_userdata() To get the user data + * @uses apply_filters() Calls 'bbp_get_user_blog_role' with the role and user id + * @return string + */ +function bbp_get_user_blog_role( $user_id = 0 ) { + global $wp_roles; + + // This really shold not be necessary anymore, and will likely be removed + // at a later date. If roles aren't loaded yet, something else is wrong. + if ( ! isset( $wp_roles ) ) + $wp_roles = new WP_Roles(); + + // Validate user id + $user_id = bbp_get_user_id( $user_id, false, false ); + $user = get_userdata( $user_id ); + $role = false; + $all_roles = apply_filters( 'editable_roles', $wp_roles->roles ); + + // User has roles so lets + if ( ! empty( $user->roles ) ) { + $roles = array_intersect( array_values( $user->roles ), array_keys( $all_roles ) ); + + // If there's a role in the array, use the first one + if ( !empty( $roles ) ) { + $role = array_shift( array_values( $roles ) ); + } + } + + return apply_filters( 'bbp_get_user_blog_role', $role, $user_id, $user ); +} + +/** + * Helper function hooked to 'bbp_edit_user_profile_update' action to save or + * update user roles and capabilities. + * + * @since bbPress (r4235) + * + * @param int $user_id + * @uses bbp_reset_user_caps() to reset caps + * @usse bbp_save_user_caps() to save caps + */ +function bbp_profile_update_role( $user_id = 0 ) { + + // Bail if no user ID was passed + if ( empty( $user_id ) ) + return; + + // Bail if no role + if ( ! isset( $_POST['bbp-forums-role'] ) ) + return; + + // Fromus role we want the user to have + $new_role = sanitize_text_field( $_POST['bbp-forums-role'] ); + $forums_role = bbp_get_user_role( $user_id ); + + // Set the new forums role + if ( $new_role != $forums_role ) { + bbp_set_user_role( $user_id, $new_role ); + } +} + +/** + * Add the default role to the current user if needed + * + * This function will bail if the forum is not global in a multisite + * installation of WordPress, or if the user is marked as spam or deleted. + * + * @since bbPress (r3380) + * + * @uses is_user_logged_in() To bail if user is not logged in + * @uses bbp_get_user_role() To bail if user already has a role + * @uses bbp_is_user_inactive() To bail if user is inactive + * @uses bbp_allow_global_access() To know whether to save role to database + * @uses bbp_get_user_role_map() To get the WP to BBP role map array + * @uses bbp_get_default_role() To get the site's default forums role + * @uses get_option() + * + * @return If not multisite, not global, or user is deleted/spammed + */ +function bbp_set_current_user_default_role() { + + /** Sanity ****************************************************************/ + + // Bail if deactivating bbPress + if ( bbp_is_deactivation() ) + return; + + // Catch all, to prevent premature user initialization + if ( ! did_action( 'set_current_user' ) ) + return; + + // Bail if not logged in or already a member of this site + if ( ! is_user_logged_in() ) + return; + + // Get the current user ID + $user_id = bbp_get_current_user_id(); + + // Bail if user already has a forums role + if ( bbp_get_user_role( $user_id ) ) + return; + + // Bail if user is marked as spam or is deleted + if ( bbp_is_user_inactive( $user_id ) ) + return; + + /** Ready *****************************************************************/ + + // Load up bbPress once + $bbp = bbpress(); + + // Get whether or not to add a role to the user account + $add_to_site = bbp_allow_global_access(); + + // Get the current user's WordPress role. Set to empty string if none found. + $user_role = bbp_get_user_blog_role( $user_id ); + + // Get the role map + $role_map = bbp_get_user_role_map(); + + /** Forum Role ************************************************************/ + + // Use a mapped role + if ( isset( $role_map[$user_role] ) ) { + $new_role = $role_map[$user_role]; + + // Use the default role + } else { + $new_role = bbp_get_default_role(); + } + + /** Add or Map ************************************************************/ + + // Add the user to the site + if ( true == $add_to_site ) { + $bbp->current_user->add_role( $new_role ); + + // Don't add the user, but still give them the correct caps dynamically + } else { + $bbp->current_user->caps[$new_role] = true; + $bbp->current_user->get_role_caps(); + } +} + +/** + * Return a map of WordPress roles to bbPress roles. Used to automatically grant + * appropriate bbPress roles to WordPress users that wouldn't already have a + * role in the forums. Also guarantees WordPress admins get the Keymaster role. + * + * @since bbPress (r4334) + * + * @return array Filtered array of WordPress roles to bbPress roles + */ +function bbp_get_user_role_map() { + + // Get the default role once here + $default_role = bbp_get_default_role(); + + // Return filtered results, forcing admins to keymasters. + return (array) apply_filters( 'bbp_get_user_role_map', array ( + 'administrator' => bbp_get_keymaster_role(), + 'editor' => $default_role, + 'author' => $default_role, + 'contributor' => $default_role, + 'subscriber' => $default_role + ) ); +} + +/** User Status ***************************************************************/ + +/** + * Checks if the user has been marked as a spammer. + * + * @since bbPress (r3355) + * + * @param int $user_id int The ID for the user. + * @return bool True if spammer, False if not. + */ +function bbp_is_user_spammer( $user_id = 0 ) { + + // Default to current user + if ( empty( $user_id ) && is_user_logged_in() ) + $user_id = bbp_get_current_user_id(); + + // No user to check + if ( empty( $user_id ) ) + return false; + + // Assume user is not spam + $is_spammer = false; + + // Get user data + $user = get_userdata( $user_id ); + + // No user found + if ( empty( $user ) ) { + $is_spammer = false; + + // Check if spam + } elseif ( !empty( $user->spam ) ) { + $is_spammer = true; + } + + return (bool) apply_filters( 'bp_core_is_user_spammer', $is_spammer ); +} + +/** + * Mark a users topics and replies as spam when the user is marked as spam + * + * @since bbPress (r3405) + * + * @global WPDB $wpdb + * @param int $user_id Optional. User ID to spam. Defaults to displayed user. + + * @uses bbp_is_single_user() + * @uses bbp_is_user_home() + * @uses bbp_get_displayed_user_field() + * @uses is_super_admin() + * @uses get_blogs_of_user() + * @uses get_current_blog_id() + * @uses bbp_get_topic_post_type() + * @uses bbp_get_reply_post_type() + * @uses switch_to_blog() + * @uses get_post_type() + * @uses bbp_spam_topic() + * @uses bbp_spam_reply() + * @uses restore_current_blog() + * + * @return If no user ID passed + */ +function bbp_make_spam_user( $user_id = 0 ) { + + // Use displayed user if it's not yourself + if ( empty( $user_id ) && bbp_is_single_user() && !bbp_is_user_home() ) + $user_id = bbp_get_displayed_user_id(); + + // Bail if no user ID + if ( empty( $user_id ) ) + return; + + // Bail if user ID is super admin + if ( is_super_admin( $user_id ) ) + return; + + // Arm the torpedos + global $wpdb; + + // Get the blog IDs of the user to mark as spam + $blogs = get_blogs_of_user( $user_id, true ); + + // If user has no blogs, they are a guest on this site + if ( empty( $blogs ) ) + $blogs[$wpdb->blogid] = array(); + + // Make array of post types to mark as spam + $post_types = array( bbp_get_topic_post_type(), bbp_get_reply_post_type() ); + $post_types = "'" . implode( "', '", $post_types ) . "'"; + $status = bbp_get_public_status_id(); + + // Loop through blogs and remove their posts + foreach ( (array) array_keys( $blogs ) as $blog_id ) { + + // Switch to the blog ID + switch_to_blog( $blog_id ); + + // Get topics and replies + $posts = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE post_author = {$user_id} AND post_status = '{$status}' AND post_type IN ({$post_types})" ); + + // Loop through posts and spam them + if ( !empty( $posts ) ) { + foreach ( $posts as $post_id ) { + + // The routines for topics ang replies are different, so use the + // correct one based on the post type + switch ( get_post_type( $post_id ) ) { + + case bbp_get_topic_post_type() : + bbp_spam_topic( $post_id ); + break; + + case bbp_get_reply_post_type() : + bbp_spam_reply( $post_id ); + break; + } + } + } + + // Switch back to current blog + restore_current_blog(); + } +} + +/** + * Mark a users topics and replies as spam when the user is marked as spam + * + * @since bbPress (r3405) + * + * @global WPDB $wpdb + * @param int $user_id Optional. User ID to unspam. Defaults to displayed user. + * + * @uses bbp_is_single_user() + * @uses bbp_is_user_home() + * @uses bbp_get_displayed_user_field() + * @uses is_super_admin() + * @uses get_blogs_of_user() + * @uses bbp_get_topic_post_type() + * @uses bbp_get_reply_post_type() + * @uses switch_to_blog() + * @uses get_post_type() + * @uses bbp_unspam_topic() + * @uses bbp_unspam_reply() + * @uses restore_current_blog() + * + * @return If no user ID passed + */ +function bbp_make_ham_user( $user_id = 0 ) { + + // Use displayed user if it's not yourself + if ( empty( $user_id ) && bbp_is_single_user() && !bbp_is_user_home() ) + $user_id = bbp_get_displayed_user_field(); + + // Bail if no user ID + if ( empty( $user_id ) ) + return; + + // Bail if user ID is super admin + if ( is_super_admin( $user_id ) ) + return; + + // Arm the torpedos + global $wpdb; + + // Get the blog IDs of the user to mark as spam + $blogs = get_blogs_of_user( $user_id, true ); + + // If user has no blogs, they are a guest on this site + if ( empty( $blogs ) ) + $blogs[$wpdb->blogid] = array(); + + // Make array of post types to mark as spam + $post_types = array( bbp_get_topic_post_type(), bbp_get_reply_post_type() ); + $post_types = "'" . implode( "', '", $post_types ) . "'"; + $status = bbp_get_spam_status_id(); + + // Loop through blogs and remove their posts + foreach ( (array) array_keys( $blogs ) as $blog_id ) { + + // Switch to the blog ID + switch_to_blog( $blog_id ); + + // Get topics and replies + $posts = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE post_author = {$user_id} AND post_status = '{$status}' AND post_type IN ({$post_types})" ); + + // Loop through posts and spam them + if ( !empty( $posts ) ) { + foreach ( $posts as $post_id ) { + + // The routines for topics ang replies are different, so use the + // correct one based on the post type + switch ( get_post_type( $post_id ) ) { + + case bbp_get_topic_post_type() : + bbp_unspam_topic( $post_id ); + break; + + case bbp_get_reply_post_type() : + bbp_unspam_reply( $post_id ); + break; + } + } + } + + // Switch back to current blog + restore_current_blog(); + } +} + +/** + * Checks if the user has been marked as deleted. + * + * @since bbPress (r3355) + * + * @param int $user_id int The ID for the user. + * @return bool True if deleted, False if not. + */ +function bbp_is_user_deleted( $user_id = 0 ) { + + // Default to current user + if ( empty( $user_id ) && is_user_logged_in() ) + $user_id = bbp_get_current_user_id(); + + // No user to check + if ( empty( $user_id ) ) + return false; + + // Assume user is not deleted + $is_deleted = false; + + // Get user data + $user = get_userdata( $user_id ); + + // No user found + if ( empty( $user ) ) { + $is_deleted = true; + + // Check if deleted + } elseif ( !empty( $user->deleted ) ) { + $is_deleted = true; + } + + return (bool) apply_filters( 'bp_core_is_user_deleted', $is_deleted ); +} + +/** + * Checks if user is active + * + * @since bbPress (r3502) + * + * @uses is_user_logged_in() To check if user is logged in + * @uses bbp_get_displayed_user_id() To get current user ID + * @uses bbp_is_user_spammer() To check if user is spammer + * @uses bbp_is_user_deleted() To check if user is deleted + * + * @param int $user_id The user ID to check + * @return bool True if public, false if not + */ +function bbp_is_user_active( $user_id = 0 ) { + + // Default to current user + if ( empty( $user_id ) && is_user_logged_in() ) + $user_id = bbp_get_current_user_id(); + + // No user to check + if ( empty( $user_id ) ) + return false; + + // Check spam + if ( bbp_is_user_spammer( $user_id ) ) + return false; + + // Check deleted + if ( bbp_is_user_deleted( $user_id ) ) + return false; + + // Assume true if not spam or deleted + return true; +} + +/** + * Checks if user is not active. + * + * @since bbPress (r3502) + * + * @uses is_user_logged_in() To check if user is logged in + * @uses bbp_get_displayed_user_id() To get current user ID + * @uses bbp_is_user_active() To check if user is active + * + * @param int $user_id The user ID to check. Defaults to current user ID + * @return bool True if inactive, false if active + */ +function bbp_is_user_inactive( $user_id = 0 ) { + + // Default to current user + if ( empty( $user_id ) && is_user_logged_in() ) + $user_id = bbp_get_current_user_id(); + + // No user to check + if ( empty( $user_id ) ) + return false; + + // Return the inverse of active + return !bbp_is_user_active( $user_id ); +} + +/** + * Does a user have a profile for the current site + * + * @since bbPress (r4362) + * + * @param int $user_id User ID to check + * @param int $blog_id Blog ID to check + * + * @uses bbp_get_user_id() To verify the user ID + * @uses get_userdata() To get the user's data + * @uses is_super_admin() To determine if user can see inactive users + * @uses bbp_is_user_inactive() To check if user is spammer or deleted + * @uses apply_filters() To allow override of this functions result + * + * @return boolean Whether or not the user has a profile on this blog_id + */ +function bbp_user_has_profile( $user_id = 0 ) { + + // Assume every user has a profile + $retval = true; + + // Validate user ID, default to displayed or current user + $user_id = bbp_get_user_id( $user_id, true, true ); + + // Try to get this user's data + $user = get_userdata( $user_id ); + + // No user found, return false + if ( empty( $user ) ) { + $retval = false; + + // User is inactive, and current user is not a super admin + } elseif ( ! is_super_admin() && bbp_is_user_inactive( $user->ID ) ) { + $retval = false; + } + + // Filter and return + return (bool) apply_filters( 'bbp_show_user_profile', $retval, $user_id ); +}