web/wp-content/plugins/bbpress/includes/users/capabilities.php
changeset 196 5e8dcbe22c24
equal deleted inserted replaced
195:c7c0fbc09788 196:5e8dcbe22c24
       
     1 <?php
       
     2 
       
     3 /**
       
     4  * bbPress User Capabilites
       
     5  *
       
     6  * Used to map user capabilities to WordPress's existing capabilities.
       
     7  *
       
     8  * @package bbPress
       
     9  * @subpackage Capabilities
       
    10  */
       
    11 
       
    12 /**
       
    13  * Maps primary capabilities
       
    14  *
       
    15  * @since bbPress (r4242)
       
    16  *
       
    17  * @param array $caps Capabilities for meta capability
       
    18  * @param string $cap Capability name
       
    19  * @param int $user_id User id
       
    20  * @param mixed $args Arguments
       
    21  * @uses apply_filters() Filter mapped results
       
    22  * @return array Actual capabilities for meta capability
       
    23  */
       
    24 function bbp_map_primary_meta_caps( $caps = array(), $cap = '', $user_id = 0, $args = array() ) {
       
    25 
       
    26 	// What capability is being checked?
       
    27 	switch ( $cap ) {
       
    28 		case 'spectate'    :
       
    29 		case 'participate' :
       
    30 		case 'moderate'    :
       
    31 
       
    32 			// Do not allow inactive users
       
    33 			if ( bbp_is_user_inactive( $user_id ) ) {
       
    34 				$caps = array( 'do_not_allow' );
       
    35 
       
    36 			// Moderators are always participants
       
    37 			} else {
       
    38 				$caps = array( $cap );
       
    39 			}
       
    40 
       
    41 			break;
       
    42 	}
       
    43 
       
    44 	return apply_filters( 'bbp_map_primary_meta_caps', $caps, $cap, $user_id, $args );
       
    45 }
       
    46 
       
    47 /**
       
    48  * Return a user's main role
       
    49  *
       
    50  * @since bbPress (r3860)
       
    51  *
       
    52  * @param int $user_id
       
    53  * @uses bbp_get_user_id() To get the user id
       
    54  * @uses get_userdata() To get the user data
       
    55  * @uses apply_filters() Calls 'bbp_set_user_role' with the role and user id
       
    56  * @return string
       
    57  */
       
    58 function bbp_set_user_role( $user_id = 0, $new_role = '' ) {
       
    59 
       
    60 	// Validate user id
       
    61 	$user_id = bbp_get_user_id( $user_id, false, false );
       
    62 	$user    = get_userdata( $user_id );
       
    63 
       
    64 	// User exists
       
    65 	if ( !empty( $user ) ) {
       
    66 
       
    67 		// Get users forum role
       
    68 		$role = bbp_get_user_role( $user_id );
       
    69 
       
    70 		// User already has this role so no new role is set
       
    71 		if ( $new_role == $role ) {
       
    72 			$new_role = false;
       
    73 
       
    74 		// Users role is different than the new role
       
    75 		} else {
       
    76 
       
    77 			// Remove the old role
       
    78 			if ( ! empty( $role ) ) {
       
    79 				$user->remove_role( $role );
       
    80 			}
       
    81 
       
    82 			// Add the new role
       
    83 			if ( !empty( $new_role ) ) {
       
    84 				$user->add_role( $new_role );
       
    85 			}
       
    86 		}
       
    87 
       
    88 	// User does don exist so return false
       
    89 	} else {
       
    90 		$new_role = false;
       
    91 	}
       
    92 
       
    93 	return apply_filters( 'bbp_set_user_role', $new_role, $user_id, $user );
       
    94 }
       
    95 
       
    96 /**
       
    97  * Return a user's forums role
       
    98  *
       
    99  * @since bbPress (r3860)
       
   100  *
       
   101  * @param int $user_id
       
   102  * @uses bbp_get_user_id() To get the user id
       
   103  * @uses get_userdata() To get the user data
       
   104  * @uses apply_filters() Calls 'bbp_get_user_role' with the role and user id
       
   105  * @return string
       
   106  */
       
   107 function bbp_get_user_role( $user_id = 0 ) {
       
   108 
       
   109 	// Validate user id
       
   110 	$user_id = bbp_get_user_id( $user_id, false, false );
       
   111 	$user    = get_userdata( $user_id );
       
   112 	$role    = false;
       
   113 
       
   114 	// User has roles so lets
       
   115 	if ( ! empty( $user->roles ) ) {
       
   116 		$roles = array_intersect( array_values( $user->roles ), array_keys( bbp_get_dynamic_roles() ) );
       
   117 
       
   118 		// If there's a role in the array, use the first one
       
   119 		if ( !empty( $roles ) ) {
       
   120 			$role = array_shift( array_values( $roles ) );
       
   121 		}
       
   122 	}
       
   123 
       
   124 	return apply_filters( 'bbp_get_user_role', $role, $user_id, $user );
       
   125 }
       
   126 
       
   127 /**
       
   128  * Return a user's blog role
       
   129  *
       
   130  * @since bbPress (r4446)
       
   131  *
       
   132  * @param int $user_id
       
   133  * @uses bbp_get_user_id() To get the user id
       
   134  * @uses get_userdata() To get the user data
       
   135  * @uses apply_filters() Calls 'bbp_get_user_blog_role' with the role and user id
       
   136  * @return string
       
   137  */
       
   138 function bbp_get_user_blog_role( $user_id = 0 ) {
       
   139 	global $wp_roles;
       
   140 
       
   141 	// This really shold not be necessary anymore, and will likely be removed
       
   142 	// at a later date. If roles aren't loaded yet, something else is wrong.
       
   143 	if ( ! isset( $wp_roles ) )
       
   144 		$wp_roles = new WP_Roles();
       
   145 
       
   146 	// Validate user id
       
   147 	$user_id   = bbp_get_user_id( $user_id, false, false );
       
   148 	$user      = get_userdata( $user_id );
       
   149 	$role      = false;
       
   150 	$all_roles = apply_filters( 'editable_roles', $wp_roles->roles );
       
   151 
       
   152 	// User has roles so lets
       
   153 	if ( ! empty( $user->roles ) ) {
       
   154 		$roles = array_intersect( array_values( $user->roles ), array_keys( $all_roles ) );
       
   155 
       
   156 		// If there's a role in the array, use the first one
       
   157 		if ( !empty( $roles ) ) {
       
   158 			$role = array_shift( array_values( $roles ) );
       
   159 		}
       
   160 	}
       
   161 
       
   162 	return apply_filters( 'bbp_get_user_blog_role', $role, $user_id, $user );
       
   163 }
       
   164 
       
   165 /**
       
   166  * Helper function hooked to 'bbp_edit_user_profile_update' action to save or
       
   167  * update user roles and capabilities.
       
   168  *
       
   169  * @since bbPress (r4235)
       
   170  *
       
   171  * @param int $user_id
       
   172  * @uses bbp_reset_user_caps() to reset caps
       
   173  * @usse bbp_save_user_caps() to save caps
       
   174  */
       
   175 function bbp_profile_update_role( $user_id = 0 ) {
       
   176 
       
   177 	// Bail if no user ID was passed
       
   178 	if ( empty( $user_id ) )
       
   179 		return;
       
   180 
       
   181 	// Bail if no role
       
   182 	if ( ! isset( $_POST['bbp-forums-role'] ) )
       
   183 		return;
       
   184 
       
   185 	// Fromus role we want the user to have
       
   186 	$new_role    = sanitize_text_field( $_POST['bbp-forums-role'] );
       
   187 	$forums_role = bbp_get_user_role( $user_id );
       
   188 
       
   189 	// Set the new forums role
       
   190 	if ( $new_role != $forums_role ) {
       
   191 		bbp_set_user_role( $user_id, $new_role );
       
   192 	}
       
   193 }
       
   194 
       
   195 /**
       
   196  * Add the default role to the current user if needed
       
   197  *
       
   198  * This function will bail if the forum is not global in a multisite
       
   199  * installation of WordPress, or if the user is marked as spam or deleted.
       
   200  *
       
   201  * @since bbPress (r3380)
       
   202  *
       
   203  * @uses is_user_logged_in() To bail if user is not logged in
       
   204  * @uses bbp_get_user_role() To bail if user already has a role
       
   205  * @uses bbp_is_user_inactive() To bail if user is inactive
       
   206  * @uses bbp_allow_global_access() To know whether to save role to database
       
   207  * @uses bbp_get_user_role_map() To get the WP to BBP role map array
       
   208  * @uses bbp_get_default_role() To get the site's default forums role
       
   209  * @uses get_option()
       
   210  *
       
   211  * @return If not multisite, not global, or user is deleted/spammed
       
   212  */
       
   213 function bbp_set_current_user_default_role() {
       
   214 
       
   215 	/** Sanity ****************************************************************/
       
   216 
       
   217 	// Bail if deactivating bbPress
       
   218 	if ( bbp_is_deactivation() )
       
   219 		return;
       
   220 
       
   221 	// Catch all, to prevent premature user initialization
       
   222 	if ( ! did_action( 'set_current_user' ) )
       
   223 		return;
       
   224 
       
   225 	// Bail if not logged in or already a member of this site
       
   226 	if ( ! is_user_logged_in() )
       
   227 		return;
       
   228 
       
   229 	// Get the current user ID
       
   230 	$user_id = bbp_get_current_user_id();
       
   231 
       
   232 	// Bail if user already has a forums role
       
   233 	if ( bbp_get_user_role( $user_id ) )
       
   234 		return;
       
   235 
       
   236 	// Bail if user is marked as spam or is deleted
       
   237 	if ( bbp_is_user_inactive( $user_id ) )
       
   238 		return;
       
   239 
       
   240 	/** Ready *****************************************************************/
       
   241 
       
   242 	// Load up bbPress once
       
   243 	$bbp         = bbpress();
       
   244 
       
   245 	// Get whether or not to add a role to the user account
       
   246 	$add_to_site = bbp_allow_global_access();
       
   247 
       
   248 	// Get the current user's WordPress role. Set to empty string if none found.
       
   249 	$user_role   = bbp_get_user_blog_role( $user_id );
       
   250 
       
   251 	// Get the role map
       
   252 	$role_map    = bbp_get_user_role_map();
       
   253 
       
   254 	/** Forum Role ************************************************************/
       
   255 
       
   256 	// Use a mapped role
       
   257 	if ( isset( $role_map[$user_role] ) ) {
       
   258 		$new_role = $role_map[$user_role];
       
   259 
       
   260 	// Use the default role
       
   261 	} else {
       
   262 		$new_role = bbp_get_default_role();
       
   263 	}
       
   264 
       
   265 	/** Add or Map ************************************************************/
       
   266 
       
   267 	// Add the user to the site
       
   268 	if ( true == $add_to_site ) {
       
   269 		$bbp->current_user->add_role( $new_role );
       
   270 
       
   271 	// Don't add the user, but still give them the correct caps dynamically
       
   272 	} else {		
       
   273 		$bbp->current_user->caps[$new_role] = true;
       
   274 		$bbp->current_user->get_role_caps();
       
   275 	}
       
   276 }
       
   277 
       
   278 /**
       
   279  * Return a map of WordPress roles to bbPress roles. Used to automatically grant
       
   280  * appropriate bbPress roles to WordPress users that wouldn't already have a
       
   281  * role in the forums. Also guarantees WordPress admins get the Keymaster role.
       
   282  *
       
   283  * @since bbPress (r4334)
       
   284  *
       
   285  * @return array Filtered array of WordPress roles to bbPress roles
       
   286  */
       
   287 function bbp_get_user_role_map() {
       
   288 
       
   289 	// Get the default role once here
       
   290 	$default_role = bbp_get_default_role();
       
   291 
       
   292 	// Return filtered results, forcing admins to keymasters.
       
   293 	return (array) apply_filters( 'bbp_get_user_role_map', array (
       
   294 		'administrator' => bbp_get_keymaster_role(),
       
   295 		'editor'        => $default_role,
       
   296 		'author'        => $default_role,
       
   297 		'contributor'   => $default_role,
       
   298 		'subscriber'    => $default_role
       
   299 	) );
       
   300 }
       
   301 
       
   302 /** User Status ***************************************************************/
       
   303 
       
   304 /**
       
   305  * Checks if the user has been marked as a spammer.
       
   306  *
       
   307  * @since bbPress (r3355)
       
   308  *
       
   309  * @param int $user_id int The ID for the user.
       
   310  * @return bool True if spammer, False if not.
       
   311  */
       
   312 function bbp_is_user_spammer( $user_id = 0 ) {
       
   313 
       
   314 	// Default to current user
       
   315 	if ( empty( $user_id ) && is_user_logged_in() )
       
   316 		$user_id = bbp_get_current_user_id();
       
   317 
       
   318 	// No user to check
       
   319 	if ( empty( $user_id ) )
       
   320 		return false;
       
   321 
       
   322 	// Assume user is not spam
       
   323 	$is_spammer = false;
       
   324 
       
   325 	// Get user data
       
   326 	$user = get_userdata( $user_id );
       
   327 
       
   328 	// No user found
       
   329 	if ( empty( $user ) ) {
       
   330 		$is_spammer = false;
       
   331 
       
   332 	// Check if spam
       
   333 	} elseif ( !empty( $user->spam ) ) {
       
   334 		$is_spammer = true;
       
   335 	}
       
   336 
       
   337 	return (bool) apply_filters( 'bp_core_is_user_spammer', $is_spammer );
       
   338 }
       
   339 
       
   340 /**
       
   341  * Mark a users topics and replies as spam when the user is marked as spam
       
   342  *
       
   343  * @since bbPress (r3405)
       
   344  *
       
   345  * @global WPDB $wpdb
       
   346  * @param int $user_id Optional. User ID to spam. Defaults to displayed user.
       
   347 
       
   348  * @uses bbp_is_single_user()
       
   349  * @uses bbp_is_user_home()
       
   350  * @uses bbp_get_displayed_user_field()
       
   351  * @uses is_super_admin()
       
   352  * @uses get_blogs_of_user()
       
   353  * @uses get_current_blog_id()
       
   354  * @uses bbp_get_topic_post_type()
       
   355  * @uses bbp_get_reply_post_type()
       
   356  * @uses switch_to_blog()
       
   357  * @uses get_post_type()
       
   358  * @uses bbp_spam_topic()
       
   359  * @uses bbp_spam_reply()
       
   360  * @uses restore_current_blog()
       
   361  *
       
   362  * @return If no user ID passed
       
   363  */
       
   364 function bbp_make_spam_user( $user_id = 0 ) {
       
   365 
       
   366 	// Use displayed user if it's not yourself
       
   367 	if ( empty( $user_id ) && bbp_is_single_user() && !bbp_is_user_home() )
       
   368 		$user_id = bbp_get_displayed_user_id();
       
   369 
       
   370 	// Bail if no user ID
       
   371 	if ( empty( $user_id ) )
       
   372 		return;
       
   373 
       
   374 	// Bail if user ID is super admin
       
   375 	if ( is_super_admin( $user_id ) )
       
   376 		return;
       
   377 
       
   378 	// Arm the torpedos
       
   379 	global $wpdb;
       
   380 
       
   381 	// Get the blog IDs of the user to mark as spam
       
   382 	$blogs = get_blogs_of_user( $user_id, true );
       
   383 
       
   384 	// If user has no blogs, they are a guest on this site
       
   385 	if ( empty( $blogs ) )
       
   386 		$blogs[$wpdb->blogid] = array();
       
   387 
       
   388 	// Make array of post types to mark as spam
       
   389 	$post_types  = array( bbp_get_topic_post_type(), bbp_get_reply_post_type() );
       
   390 	$post_types  = "'" . implode( "', '", $post_types ) . "'";
       
   391 	$status      = bbp_get_public_status_id();
       
   392 
       
   393 	// Loop through blogs and remove their posts
       
   394 	foreach ( (array) array_keys( $blogs ) as $blog_id ) {
       
   395 
       
   396 		// Switch to the blog ID
       
   397 		switch_to_blog( $blog_id );
       
   398 
       
   399 		// Get topics and replies
       
   400 		$posts = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE post_author = {$user_id} AND post_status = '{$status}' AND post_type IN ({$post_types})" );
       
   401 
       
   402 		// Loop through posts and spam them
       
   403 		if ( !empty( $posts ) ) {
       
   404 			foreach ( $posts as $post_id ) {
       
   405 
       
   406 				// The routines for topics ang replies are different, so use the
       
   407 				// correct one based on the post type
       
   408 				switch ( get_post_type( $post_id ) ) {
       
   409 
       
   410 					case bbp_get_topic_post_type() :
       
   411 						bbp_spam_topic( $post_id );
       
   412 						break;
       
   413 
       
   414 					case bbp_get_reply_post_type() :
       
   415 						bbp_spam_reply( $post_id );
       
   416 						break;
       
   417 				}
       
   418 			}
       
   419 		}
       
   420 
       
   421 		// Switch back to current blog
       
   422 		restore_current_blog();
       
   423 	}
       
   424 }
       
   425 
       
   426 /**
       
   427  * Mark a users topics and replies as spam when the user is marked as spam
       
   428  *
       
   429  * @since bbPress (r3405)
       
   430  *
       
   431  * @global WPDB $wpdb
       
   432  * @param int $user_id Optional. User ID to unspam. Defaults to displayed user.
       
   433  *
       
   434  * @uses bbp_is_single_user()
       
   435  * @uses bbp_is_user_home()
       
   436  * @uses bbp_get_displayed_user_field()
       
   437  * @uses is_super_admin()
       
   438  * @uses get_blogs_of_user()
       
   439  * @uses bbp_get_topic_post_type()
       
   440  * @uses bbp_get_reply_post_type()
       
   441  * @uses switch_to_blog()
       
   442  * @uses get_post_type()
       
   443  * @uses bbp_unspam_topic()
       
   444  * @uses bbp_unspam_reply()
       
   445  * @uses restore_current_blog()
       
   446  *
       
   447  * @return If no user ID passed
       
   448  */
       
   449 function bbp_make_ham_user( $user_id = 0 ) {
       
   450 
       
   451 	// Use displayed user if it's not yourself
       
   452 	if ( empty( $user_id ) && bbp_is_single_user() && !bbp_is_user_home() )
       
   453 		$user_id = bbp_get_displayed_user_field();
       
   454 
       
   455 	// Bail if no user ID
       
   456 	if ( empty( $user_id ) )
       
   457 		return;
       
   458 
       
   459 	// Bail if user ID is super admin
       
   460 	if ( is_super_admin( $user_id ) )
       
   461 		return;
       
   462 
       
   463 	// Arm the torpedos
       
   464 	global $wpdb;
       
   465 
       
   466 	// Get the blog IDs of the user to mark as spam
       
   467 	$blogs = get_blogs_of_user( $user_id, true );
       
   468 
       
   469 	// If user has no blogs, they are a guest on this site
       
   470 	if ( empty( $blogs ) )
       
   471 		$blogs[$wpdb->blogid] = array();
       
   472 
       
   473 	// Make array of post types to mark as spam
       
   474 	$post_types = array( bbp_get_topic_post_type(), bbp_get_reply_post_type() );
       
   475 	$post_types = "'" . implode( "', '", $post_types ) . "'";
       
   476 	$status     = bbp_get_spam_status_id();
       
   477 
       
   478 	// Loop through blogs and remove their posts
       
   479 	foreach ( (array) array_keys( $blogs ) as $blog_id ) {
       
   480 
       
   481 		// Switch to the blog ID
       
   482 		switch_to_blog( $blog_id );
       
   483 
       
   484 		// Get topics and replies
       
   485 		$posts = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE post_author = {$user_id} AND post_status = '{$status}' AND post_type IN ({$post_types})" );
       
   486 
       
   487 		// Loop through posts and spam them
       
   488 		if ( !empty( $posts ) ) {
       
   489 			foreach ( $posts as $post_id ) {
       
   490 
       
   491 				// The routines for topics ang replies are different, so use the
       
   492 				// correct one based on the post type
       
   493 				switch ( get_post_type( $post_id ) ) {
       
   494 
       
   495 					case bbp_get_topic_post_type() :
       
   496 						bbp_unspam_topic( $post_id );
       
   497 						break;
       
   498 
       
   499 					case bbp_get_reply_post_type() :
       
   500 						bbp_unspam_reply( $post_id );
       
   501 						break;
       
   502 				}
       
   503 			}
       
   504 		}
       
   505 
       
   506 		// Switch back to current blog
       
   507 		restore_current_blog();
       
   508 	}
       
   509 }
       
   510 
       
   511 /**
       
   512  * Checks if the user has been marked as deleted.
       
   513  *
       
   514  * @since bbPress (r3355)
       
   515  *
       
   516  * @param int $user_id int The ID for the user.
       
   517  * @return bool True if deleted, False if not.
       
   518  */
       
   519 function bbp_is_user_deleted( $user_id = 0 ) {
       
   520 
       
   521 	// Default to current user
       
   522 	if ( empty( $user_id ) && is_user_logged_in() )
       
   523 		$user_id = bbp_get_current_user_id();
       
   524 
       
   525 	// No user to check
       
   526 	if ( empty( $user_id ) )
       
   527 		return false;
       
   528 
       
   529 	// Assume user is not deleted
       
   530 	$is_deleted = false;
       
   531 
       
   532 	// Get user data
       
   533 	$user = get_userdata( $user_id );
       
   534 
       
   535 	// No user found
       
   536 	if ( empty( $user ) ) {
       
   537 		$is_deleted = true;
       
   538 
       
   539 	// Check if deleted
       
   540 	} elseif ( !empty( $user->deleted ) ) {
       
   541 		$is_deleted = true;
       
   542 	}
       
   543 
       
   544 	return (bool) apply_filters( 'bp_core_is_user_deleted', $is_deleted );
       
   545 }
       
   546 
       
   547 /**
       
   548  * Checks if user is active
       
   549  *
       
   550  * @since bbPress (r3502)
       
   551  *
       
   552  * @uses is_user_logged_in() To check if user is logged in
       
   553  * @uses bbp_get_displayed_user_id() To get current user ID
       
   554  * @uses bbp_is_user_spammer() To check if user is spammer
       
   555  * @uses bbp_is_user_deleted() To check if user is deleted
       
   556  *
       
   557  * @param int $user_id The user ID to check
       
   558  * @return bool True if public, false if not
       
   559  */
       
   560 function bbp_is_user_active( $user_id = 0 ) {
       
   561 
       
   562 	// Default to current user
       
   563 	if ( empty( $user_id ) && is_user_logged_in() )
       
   564 		$user_id = bbp_get_current_user_id();
       
   565 
       
   566 	// No user to check
       
   567 	if ( empty( $user_id ) )
       
   568 		return false;
       
   569 
       
   570 	// Check spam
       
   571 	if ( bbp_is_user_spammer( $user_id ) )
       
   572 		return false;
       
   573 
       
   574 	// Check deleted
       
   575 	if ( bbp_is_user_deleted( $user_id ) )
       
   576 		return false;
       
   577 
       
   578 	// Assume true if not spam or deleted
       
   579 	return true;
       
   580 }
       
   581 
       
   582 /**
       
   583  * Checks if user is not active.
       
   584  *
       
   585  * @since bbPress (r3502)
       
   586  *
       
   587  * @uses is_user_logged_in() To check if user is logged in
       
   588  * @uses bbp_get_displayed_user_id() To get current user ID
       
   589  * @uses bbp_is_user_active() To check if user is active
       
   590  *
       
   591  * @param int $user_id The user ID to check. Defaults to current user ID
       
   592  * @return bool True if inactive, false if active
       
   593  */
       
   594 function bbp_is_user_inactive( $user_id = 0 ) {
       
   595 
       
   596 	// Default to current user
       
   597 	if ( empty( $user_id ) && is_user_logged_in() )
       
   598 		$user_id = bbp_get_current_user_id();
       
   599 
       
   600 	// No user to check
       
   601 	if ( empty( $user_id ) )
       
   602 		return false;
       
   603 
       
   604 	// Return the inverse of active
       
   605 	return !bbp_is_user_active( $user_id );
       
   606 }
       
   607 
       
   608 /**
       
   609  * Does a user have a profile for the current site
       
   610  *
       
   611  * @since bbPress (r4362)
       
   612  *
       
   613  * @param int $user_id User ID to check
       
   614  * @param int $blog_id Blog ID to check
       
   615  *
       
   616  * @uses bbp_get_user_id() To verify the user ID
       
   617  * @uses get_userdata() To get the user's data
       
   618  * @uses is_super_admin() To determine if user can see inactive users
       
   619  * @uses bbp_is_user_inactive() To check if user is spammer or deleted
       
   620  * @uses apply_filters() To allow override of this functions result
       
   621  *
       
   622  * @return boolean Whether or not the user has a profile on this blog_id
       
   623  */
       
   624 function bbp_user_has_profile( $user_id = 0 ) {
       
   625 
       
   626 	// Assume every user has a profile
       
   627 	$retval  = true;
       
   628 
       
   629 	// Validate user ID, default to displayed or current user
       
   630 	$user_id = bbp_get_user_id( $user_id, true, true );
       
   631 
       
   632 	// Try to get this user's data
       
   633 	$user    = get_userdata( $user_id );
       
   634 
       
   635 	// No user found, return false
       
   636 	if ( empty( $user ) ) {
       
   637 		$retval = false;
       
   638 
       
   639 	// User is inactive, and current user is not a super admin
       
   640 	} elseif ( ! is_super_admin() && bbp_is_user_inactive( $user->ID ) ) {
       
   641 		$retval = false;
       
   642 	}
       
   643 
       
   644 	// Filter and return
       
   645 	return (bool) apply_filters( 'bbp_show_user_profile', $retval, $user_id );
       
   646 }