--- /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 @@
+<?php
+
+/**
+ * bbPress User Capabilites
+ *
+ * Used to map user capabilities to WordPress's existing capabilities.
+ *
+ * @package bbPress
+ * @subpackage Capabilities
+ */
+
+/**
+ * Maps primary capabilities
+ *
+ * @since bbPress (r4242)
+ *
+ * @param array $caps Capabilities for meta capability
+ * @param string $cap Capability name
+ * @param int $user_id User id
+ * @param mixed $args Arguments
+ * @uses apply_filters() Filter mapped results
+ * @return array Actual capabilities for meta capability
+ */
+function bbp_map_primary_meta_caps( $caps = array(), $cap = '', $user_id = 0, $args = array() ) {
+
+ // What capability is being checked?
+ switch ( $cap ) {
+ case 'spectate' :
+ case 'participate' :
+ case 'moderate' :
+
+ // Do not allow inactive users
+ if ( bbp_is_user_inactive( $user_id ) ) {
+ $caps = array( 'do_not_allow' );
+
+ // Moderators are always participants
+ } else {
+ $caps = array( $cap );
+ }
+
+ break;
+ }
+
+ return apply_filters( 'bbp_map_primary_meta_caps', $caps, $cap, $user_id, $args );
+}
+
+/**
+ * Return a user's main 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_set_user_role' with the role and user id
+ * @return string
+ */
+function bbp_set_user_role( $user_id = 0, $new_role = '' ) {
+
+ // Validate user id
+ $user_id = bbp_get_user_id( $user_id, false, false );
+ $user = get_userdata( $user_id );
+
+ // User exists
+ if ( !empty( $user ) ) {
+
+ // Get users forum role
+ $role = bbp_get_user_role( $user_id );
+
+ // User already has this role so no new role is set
+ if ( $new_role == $role ) {
+ $new_role = false;
+
+ // Users role is different than the new role
+ } else {
+
+ // Remove the old role
+ if ( ! empty( $role ) ) {
+ $user->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 );
+}