PluginProbe
bbPress / 2.6.18
bbPress v2.6.18
2.6.19 2.6.18 2.6.17 trunk 2.0 2.0-beta-1 2.0-beta-2b 2.0-beta-3 2.0-beta-3b 2.0-rc-2 2.0-rc-3 2.0-rc-4 2.0-rc-5 2.0.1 2.0.2 2.0.3 2.1 2.1-beta-1 2.1-rc1 2.1-rc2 2.1-rc3 2.1-rc4 2.1.1 2.1.2 2.1.3 All 74 releases
bbpress / includes / users / capabilities.php

capabilities.php in bbPress 2.6.18, at includes/users/capabilities.php

958 lines 23.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 2.2.0 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 array $args Arguments.
21 *
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
30 // Do not allow inactive users.
31 if ( bbp_is_user_inactive( $user_id ) ) {
32 $caps = array( 'do_not_allow' );
33
34 // Default to the current cap.
35 } else {
36 $caps = array( $cap );
37 }
38 break;
39
40 case 'participate' :
41
42 // Do not allow inactive users.
43 if ( bbp_is_user_inactive( $user_id ) ) {
44 $caps = array( 'do_not_allow' );
45
46 // Default to the current cap.
47 } else {
48 $caps = array( $cap );
49 }
50 break;
51
52 case 'moderate' :
53
54 // Do not allow inactive users.
55 if ( bbp_is_user_inactive( $user_id ) ) {
56 $caps = array( 'do_not_allow' );
57
58 // Keymasters can always moderate.
59 } elseif ( bbp_is_user_keymaster( $user_id ) ) {
60 $caps = array( 'spectate' );
61
62 // Check if user can moderate forum.
63 } elseif ( bbp_allow_forum_mods() ) {
64 $caps = array( $cap );
65
66 // Bail if no post to check.
67 if ( empty( $args[0] ) ) {
68 break;
69 }
70
71 // Get the post.
72 $_post = get_post( $args[0] );
73 if ( empty( $_post ) ) {
74 break;
75 }
76
77 // Get forum ID for specific type of post.
78 switch ( $_post->post_type ) {
79
80 // Forum.
81 case bbp_get_forum_post_type() :
82 $forum_id = bbp_get_forum_id( $_post->ID );
83 break;
84
85 // Topic.
86 case bbp_get_topic_post_type() :
87 $forum_id = bbp_get_topic_forum_id( $_post->ID );
88 break;
89
90 // Reply.
91 case bbp_get_reply_post_type() :
92 $forum_id = bbp_get_reply_forum_id( $_post->ID );
93 break;
94
95 // Any other post type defaults to 0.
96 default :
97 $forum_id = 0;
98 break;
99 }
100
101 // Bail if no forum ID.
102 if ( empty( $forum_id ) ) {
103 break;
104 }
105
106 // User is mod of this forum
107 if ( bbp_is_object_of_user( $forum_id, $user_id, '_bbp_moderator_id' ) ) {
108 $caps = array( 'spectate' );
109 }
110 }
111
112 break;
113
114 /** Super Moderators **************************************************/
115
116 case 'edit_user' :
117 case 'promote_user' :
118 $wp_query = bbp_get_wp_query();
119
120 // Moderators can edit users if super moderators is enabled.
121 if ( bbp_allow_super_mods() && ! is_admin() && ! empty( $wp_query->bbp_is_single_user ) && ( true === $wp_query->bbp_is_single_user ) ) {
122
123 // Get the user ID
124 $_user_id = ! empty( $args[0] )
125 ? (int) $args[0]
126 : bbp_get_displayed_user_id();
127
128 // Users can always edit themselves, so only map for others.
129 if ( ! empty( $_user_id ) && ( $_user_id !== $user_id ) ) {
130
131 // Super moderators cannot edit keymasters or site administrators.
132 if (
133 ! bbp_is_user_keymaster( $_user_id )
134 && ! user_can( $_user_id, 'manage_options' )
135 && ! is_super_admin( $_user_id )
136 ) {
137 $caps = array( 'moderate' );
138 }
139 }
140 }
141
142 break;
143 }
144
145 // Filter & return
146 return (array) apply_filters( 'bbp_map_primary_meta_caps', $caps, $cap, $user_id, $args );
147 }
148
149 /**
150 * Set a user's role in the forums
151 *
152 * @since 2.1.0 bbPress (r3860)
153 *
154 * @param int $user_id
155 *
156 * @return mixed False if no change. String of new role if changed.
157 */
158 function bbp_set_user_role( $user_id = 0, $new_role = '' ) {
159
160 // Validate user id
161 $user_id = bbp_get_user_id( $user_id, false, false );
162 $user = get_userdata( $user_id );
163
164 // User exists
165 if ( ! empty( $user ) ) {
166
167 // Get user forum role
168 $role = bbp_get_user_role( $user_id );
169
170 // User already has this role so no new role is set
171 if ( $new_role === $role ) {
172 $new_role = false;
173
174 // User role is different than the new (valid) role
175 } elseif ( bbp_is_valid_role( $new_role ) ) {
176
177 // Remove the old role
178 if ( ! empty( $role ) ) {
179 $user->remove_role( $role );
180 }
181
182 // Add the new role
183 if ( ! empty( $new_role ) ) {
184 $user->add_role( $new_role );
185 }
186 }
187
188 // User does not exist so return false
189 } else {
190 $new_role = false;
191 }
192
193 // Filter & return
194 return apply_filters( 'bbp_set_user_role', $new_role, $user_id, $user );
195 }
196
197 /**
198 * Return a user's forums role
199 *
200 * @since 2.1.0 bbPress (r3860)
201 *
202 * @param int $user_id
203 *
204 * @return string
205 */
206 function bbp_get_user_role( $user_id = 0 ) {
207
208 // Validate user id
209 $user_id = bbp_get_user_id( $user_id );
210 $user = get_userdata( $user_id );
211 $role = false;
212
213 // User has roles so look for a bbPress one
214 if ( ! empty( $user->roles ) ) {
215
216 // Look for a bbPress role
217 $roles = array_intersect(
218 array_values( $user->roles ),
219 array_keys( bbp_get_dynamic_roles() )
220 );
221
222 // If there's a role in the array, use the first one. This isn't very
223 // smart, but since roles aren't exactly hierarchical, and bbPress
224 // does not yet have a UI for multiple user roles, it's fine for now.
225 if ( ! empty( $roles ) ) {
226 $role = array_shift( $roles );
227 }
228 }
229
230 // Filter & return
231 return apply_filters( 'bbp_get_user_role', $role, $user_id, $user );
232 }
233
234 /**
235 * Return a user's blog role
236 *
237 * @since 2.3.0 bbPress (r4446)
238 *
239 * @param int $user_id
240 *
241 * @return string
242 */
243 function bbp_get_user_blog_role( $user_id = 0 ) {
244
245 // Validate user id
246 $user_id = bbp_get_user_id( $user_id );
247 $user = get_userdata( $user_id );
248 $role = false;
249
250 // User has roles so lets
251 if ( ! empty( $user->roles ) ) {
252
253 // Look for a non bbPress role
254 $roles = array_intersect(
255 array_values( $user->roles ),
256 array_keys( bbp_get_blog_roles() )
257 );
258
259 // If there's a role in the array, use the first one. This isn't very
260 // smart, but since roles aren't exactly hierarchical, and WordPress
261 // does not yet have a UI for multiple user roles, it's fine for now.
262 if ( ! empty( $roles ) ) {
263 $role = array_shift( $roles );
264 }
265 }
266
267 // Filter & return
268 return apply_filters( 'bbp_get_user_blog_role', $role, $user_id, $user );
269 }
270
271 /**
272 * Helper function to save or update user roles and capabilities.
273 *
274 * By default, this is hooked to the `bbp_profile_update` action which fires
275 * after a user profile is updated to avoid being stomped by set_role().
276 *
277 * @since 2.2.0 bbPress (r4235)
278 *
279 * @param int $user_id
280 *
281 * @return void If no user ID passed, invalid request, trying to set own role,
282 * current user cannot promote the passing user, or no role passed
283 */
284 function bbp_profile_update_role( $user_id = 0 ) {
285
286 // Bail if no user ID
287 $user_id = bbp_get_user_id( $user_id, false, false );
288 if ( empty( $user_id ) ) {
289 return;
290 }
291
292 // Bail if not a user profile form post request
293 if ( ! bbp_is_user_profile_form_post_request( $user_id ) ) {
294 return;
295 }
296
297 // Bail if trying to set their own role
298 if ( bbp_is_user_home_edit() ) {
299 return;
300 }
301
302 // Bail if the current user cannot edit the forum role.
303 if ( ! bbp_current_user_can_edit_user_field( 'forum_role', $user_id ) ) {
304 return;
305 }
306
307 // Bail if current user cannot promote the passing user
308 if ( ! current_user_can( 'promote_user', $user_id ) ) {
309 return;
310 }
311
312 // Bail if no role
313 if ( ! isset( $_POST['bbp-forums-role'] ) || ! is_string( $_POST['bbp-forums-role'] ) ) {
314 return;
315 }
316
317 // Forums role we want the user to have.
318 $new_role = sanitize_key( wp_unslash( $_POST['bbp-forums-role'] ) );
319
320 // Bail if the current user cannot assign this forum role.
321 if ( ! array_key_exists( $new_role, bbp_get_user_editable_forum_roles( $user_id ) ) ) {
322 return;
323 }
324
325 // Set the new forums role
326 bbp_set_user_role( $user_id, $new_role );
327 }
328
329 /**
330 * Return the forum roles the current user may assign to another user.
331 *
332 * @since 2.6.17
333 *
334 * @param int $user_id User being edited. Defaults to the displayed user.
335 * @return array Filtered array of editable forum roles.
336 */
337 function bbp_get_user_editable_forum_roles( $user_id = 0 ) {
338 $user_id = bbp_get_user_id( $user_id, false, false );
339 $roles = bbp_get_dynamic_roles();
340
341 // Moderators may assign non-staff roles by default.
342 if ( ! bbp_is_user_keymaster() ) {
343 unset(
344 $roles[ bbp_get_keymaster_role() ],
345 $roles[ bbp_get_moderator_role() ]
346 );
347 }
348
349 // Filter & return.
350 return (array) apply_filters( 'bbp_get_user_editable_forum_roles', $roles, $user_id, bbp_get_current_user_id() );
351 }
352
353 /**
354 * Return whether the current user may edit a user-profile field.
355 *
356 * @since 2.6.17
357 *
358 * @param string $field Profile field group: profile, email, password,
359 * site_role, or forum_role.
360 * @param int $user_id User being edited. Defaults to the displayed user.
361 * @return bool Whether the field may be edited.
362 */
363 function bbp_current_user_can_edit_user_field( $field = 'profile', $user_id = 0 ) {
364 $user_id = bbp_get_user_id( $user_id, false, false );
365 $current_user_id = bbp_get_current_user_id();
366
367 // Default to the general profile-edit capability.
368 $retval = current_user_can( 'edit_user', $user_id );
369
370 // Apply narrower defaults to sensitive field groups.
371 switch ( $field ) {
372 case 'password':
373 $retval = ! empty( $user_id )
374 && ! empty( $current_user_id )
375 && $retval
376 && ( ( $user_id === $current_user_id )
377 || bbp_is_user_keymaster( $current_user_id )
378 || current_user_can( 'manage_options' ) );
379 break;
380
381 case 'site_role':
382 $retval = current_user_can( 'promote_users' )
383 && current_user_can( 'promote_user', $user_id );
384 break;
385
386 case 'forum_role':
387 $retval = current_user_can( 'promote_user', $user_id );
388 break;
389 }
390
391 // Filter & return.
392 return (bool) apply_filters( 'bbp_current_user_can_edit_user_field', $retval, $field, $user_id, $current_user_id );
393 }
394
395 /**
396 * Check if a role string is valid
397 *
398 * @since 2.6.5
399 *
400 * @param string $role
401 *
402 * @return bool True if role is valid. False if role is not valid.
403 */
404 function bbp_is_valid_role( $role = '' ) {
405
406 // Default return value
407 $retval = false;
408
409 // Skip if no role to check
410 if ( ! empty( $role ) && is_string( $role ) ) {
411
412 // Get the dynamic role IDs
413 $roles = array_keys( bbp_get_dynamic_roles() );
414
415 // Skip if no known role IDs
416 if ( ! empty( $roles ) ) {
417
418 // Is role in dynamic roles array?
419 $retval = in_array( $role, $roles, true );
420 }
421 }
422
423 // Filter & return
424 return (bool) apply_filters( 'bbp_is_valid_role', $retval, $role );
425 }
426
427 /**
428 * Add the default role to the current user if needed
429 *
430 * This function will bail if the forum is not global in a multisite
431 * installation of WordPress, or if the user is marked as spam or deleted.
432 *
433 * @since 2.0.0 bbPress (r3380)
434 *
435 * @return void If not multisite, not global, or user is deleted/spammed
436 */
437 function bbp_set_current_user_default_role() {
438
439 /** Sanity ****************************************************************/
440
441 // Bail if deactivating bbPress
442 if ( bbp_is_deactivation() ) {
443 return;
444 }
445
446 // Catch all, to prevent premature user initialization
447 if ( ! did_action( 'set_current_user' ) ) {
448 return;
449 }
450
451 // Bail if not logged in or already a member of this site
452 if ( ! is_user_logged_in() ) {
453 return;
454 }
455
456 // Get the current user ID
457 $user_id = bbp_get_current_user_id();
458
459 // Bail if user already has a forums role
460 if ( bbp_get_user_role( $user_id ) ) {
461 return;
462 }
463
464 // Bail if user is marked as spam or is deleted
465 if ( bbp_is_user_inactive( $user_id ) ) {
466 return;
467 }
468
469 /** Ready *****************************************************************/
470
471 // Load up bbPress once
472 $bbp = bbpress();
473
474 // Get whether or not to add a role to the user account
475 $add_to_site = bbp_allow_global_access();
476
477 // Get the current user's WordPress role. Set to empty string if none found.
478 $user_role = bbp_get_user_blog_role( $user_id );
479
480 // Get the role map
481 $role_map = bbp_get_user_role_map();
482
483 /** Forum Role ************************************************************/
484
485 // Use a mapped role or default role
486 $new_role = empty( $user_role ) || ! isset( $role_map[ $user_role ] )
487 ? bbp_get_default_role()
488 : $role_map[ $user_role ];
489
490 /** Add or Map ************************************************************/
491
492 // Add the user to the site
493 if ( true === $add_to_site ) {
494 bbp_set_user_role( $user_id, $new_role );
495
496 // Don't add the user, but still give them the correct caps dynamically
497 } else {
498 $bbp->current_user->caps[ $new_role ] = true;
499 $bbp->current_user->get_role_caps();
500 }
501 }
502
503 /**
504 * Return a map of WordPress roles to bbPress roles. Used to automatically grant
505 * appropriate bbPress roles to WordPress users that wouldn't already have a
506 * role in the forums. Also guarantees WordPress admins get the Keymaster role.
507 *
508 * @since 2.2.0 bbPress (r4334)
509 *
510 * @return array Filtered array of WordPress roles to bbPress roles
511 */
512 function bbp_get_user_role_map() {
513
514 // Get the default role once here
515 $default_role = bbp_get_default_role();
516
517 // Filter & return
518 return (array) apply_filters(
519 'bbp_get_user_role_map',
520 array(
521 'administrator' => bbp_get_keymaster_role(),
522 'editor' => $default_role,
523 'author' => $default_role,
524 'contributor' => $default_role,
525 'subscriber' => $default_role
526 )
527 );
528 }
529
530 /** User Status ***************************************************************/
531
532 /**
533 * Checks if the user has been marked as a spammer.
534 *
535 * @since 2.0.0 bbPress (r3355)
536 *
537 * @param int $user_id int The ID for the user.
538 * @return bool True if spammer, False if not.
539 */
540 function bbp_is_user_spammer( $user_id = 0 ) {
541
542 // Default to current user
543 if ( empty( $user_id ) && is_user_logged_in() ) {
544 $user_id = bbp_get_current_user_id();
545 }
546
547 // No user to check
548 if ( empty( $user_id ) ) {
549 return false;
550 }
551
552 // Assume user is not spam
553 $is_spammer = false;
554
555 // Get user data
556 $user = get_userdata( $user_id );
557
558 // No user found
559 if ( empty( $user ) ) {
560 $is_spammer = false;
561
562 // Check if spam
563 } elseif ( ! empty( $user->spam ) ) {
564 $is_spammer = true;
565 }
566
567 // Filter & return
568 return (bool) apply_filters( 'bbp_core_is_user_spammer', $is_spammer );
569 }
570
571 /**
572 * Mark a users topics and replies as spam when the user is marked as spam
573 *
574 * @since 2.0.0 bbPress (r3405)
575 *
576 * @param int $user_id Optional. User ID to spam. Defaults to displayed user.
577 *
578 * @return bool If no user ID passed.
579 */
580 function bbp_make_spam_user( $user_id = 0 ) {
581
582 // Use displayed user if it's not yourself
583 if ( empty( $user_id ) && bbp_is_single_user() && ! bbp_is_user_home() ) {
584 $user_id = bbp_get_displayed_user_id();
585 }
586
587 // Bail if no user ID
588 if ( empty( $user_id ) ) {
589 return false;
590 }
591
592 // Bail if user ID is keymaster
593 if ( bbp_is_user_keymaster( $user_id ) ) {
594 return false;
595 }
596
597 // Arm the torpedos
598 $bbp_db = bbp_db();
599
600 // Get the blog IDs of the user to mark as spam
601 $blogs = get_blogs_of_user( $user_id, true );
602
603 // If user has no blogs, they are a guest on this site
604 if ( empty( $blogs ) ) {
605 $blogs[ $bbp_db->blogid ] = array();
606 }
607
608 // Process replies before topics so topic status helpers run last
609 $post_types = array( bbp_get_reply_post_type(), bbp_get_topic_post_type() );
610
611 // Get array of statuses to mark as spam
612 $post_statuses = bbp_get_public_topic_statuses();
613 $post_statuses = "'" . implode( "', '", $post_statuses ) . "'";
614
615 // Loop through blogs and remove their posts
616 foreach ( (array) array_keys( $blogs ) as $blog_id ) {
617
618 // Switch to the site ID
619 bbp_switch_to_site( $blog_id );
620
621 foreach ( $post_types as $post_type ) {
622
623 // Get posts of this type
624 $query = $bbp_db->prepare( "SELECT ID FROM {$bbp_db->posts} WHERE post_author = %d AND post_status IN ( {$post_statuses} ) AND post_type = %s", $user_id, $post_type );
625 $posts = $bbp_db->get_col( $query );
626
627 // Loop through posts and spam them
628 if ( ! empty( $posts ) ) {
629 foreach ( $posts as $post_id ) {
630
631 // The routines for topics and replies are different, so use the
632 // correct one based on the post type
633 switch ( $post_type ) {
634
635 case bbp_get_topic_post_type() :
636 bbp_spam_topic( $post_id );
637 break;
638
639 case bbp_get_reply_post_type() :
640 bbp_spam_reply( $post_id );
641 break;
642 }
643 }
644 }
645 }
646
647 // Switch back to current site
648 bbp_restore_current_site();
649 }
650
651 // Delete user options
652 bbp_delete_user_options( $user_id );
653
654 // Success
655 return true;
656 }
657
658 /**
659 * Mark a users topics and replies as spam when the user is marked as spam
660 *
661 * @since 2.0.0 bbPress (r3405)
662 *
663 * @param int $user_id Optional. User ID to unspam. Defaults to displayed user.
664 *
665 * @return bool If no user ID passed.
666 */
667 function bbp_make_ham_user( $user_id = 0 ) {
668
669 // Use displayed user if it's not yourself
670 if ( empty( $user_id ) && bbp_is_single_user() && ! bbp_is_user_home() ) {
671 $user_id = bbp_get_displayed_user_id();
672 }
673
674 // Bail if no user ID
675 if ( empty( $user_id ) ) {
676 return false;
677 }
678
679 // Bail if user ID is keymaster
680 if ( bbp_is_user_keymaster( $user_id ) ) {
681 return false;
682 }
683
684 // Arm the torpedos
685 $bbp_db = bbp_db();
686
687 // Get the blog IDs of the user to mark as spam
688 $blogs = get_blogs_of_user( $user_id, true );
689
690 // If user has no blogs, they are a guest on this site
691 if ( empty( $blogs ) ) {
692 $blogs[ $bbp_db->blogid ] = array();
693 }
694
695 // Process replies before topics so topic status helpers run last
696 $post_types = array( bbp_get_reply_post_type(), bbp_get_topic_post_type() );
697
698 // Get array of statuses to unmark as spam
699 $post_statuses = array( bbp_get_spam_status_id() );
700 $post_statuses = "'" . implode( "', '", $post_statuses ) . "'";
701
702 // Loop through blogs and remove their posts
703 foreach ( (array) array_keys( $blogs ) as $blog_id ) {
704
705 // Switch to the site ID
706 bbp_switch_to_site( $blog_id );
707
708 foreach ( $post_types as $post_type ) {
709
710 // Get posts of this type
711 $query = $bbp_db->prepare( "SELECT ID FROM {$bbp_db->posts} WHERE post_author = %d AND post_status IN ( {$post_statuses} ) AND post_type = %s", $user_id, $post_type );
712 $posts = $bbp_db->get_col( $query );
713
714 // Loop through posts and unspam them
715 if ( ! empty( $posts ) ) {
716 foreach ( $posts as $post_id ) {
717
718 // The routines for topics and replies are different, so use the
719 // correct one based on the post type
720 switch ( $post_type ) {
721
722 case bbp_get_topic_post_type() :
723 bbp_unspam_topic( $post_id );
724 break;
725
726 case bbp_get_reply_post_type() :
727 bbp_unspam_reply( $post_id );
728 break;
729 }
730 }
731 }
732 }
733
734 // Switch back to current site
735 bbp_restore_current_site();
736 }
737
738 // Update topic & reply counts
739 bbp_update_user_topic_count( $user_id, bbp_get_user_topic_count_raw( $user_id ) );
740 bbp_update_user_reply_count( $user_id, bbp_get_user_reply_count_raw( $user_id ) );
741
742 // Update last posted (to now)
743 bbp_update_user_last_posted( $user_id );
744
745 // Success
746 return true;
747 }
748
749 /**
750 * Checks if the user has been marked as deleted.
751 *
752 * @since 2.0.0 bbPress (r3355)
753 *
754 * @param int $user_id int The ID for the user.
755 * @return bool True if deleted, False if not.
756 */
757 function bbp_is_user_deleted( $user_id = 0 ) {
758
759 // Default to current user
760 if ( empty( $user_id ) && is_user_logged_in() ) {
761 $user_id = bbp_get_current_user_id();
762 }
763
764 // No user to check
765 if ( empty( $user_id ) ) {
766 return false;
767 }
768
769 // Assume user is not deleted
770 $is_deleted = false;
771
772 // Get user data
773 $user = get_userdata( $user_id );
774
775 // No user found
776 if ( empty( $user ) ) {
777 $is_deleted = true;
778
779 // Check if deleted
780 } elseif ( ! empty( $user->deleted ) ) {
781 $is_deleted = true;
782 }
783
784 // Filter & return
785 return (bool) apply_filters( 'bbp_core_is_user_deleted', $is_deleted );
786 }
787
788 /**
789 * Checks if user is active
790 *
791 * @since 2.0.0 bbPress (r3502)
792 *
793 * @param int $user_id The user ID to check
794 * @return bool True if public, false if not
795 */
796 function bbp_is_user_active( $user_id = 0 ) {
797
798 // No user to check
799 $user_id = bbp_get_user_id( $user_id, false, true );
800 if ( empty( $user_id ) ) {
801 return false;
802 }
803
804 // Check spam
805 if ( bbp_is_user_spammer( $user_id ) ) {
806 return false;
807 }
808
809 // Check deleted
810 if ( bbp_is_user_deleted( $user_id ) ) {
811 return false;
812 }
813
814 // Assume true if not spam or deleted
815 return true;
816 }
817
818 /**
819 * Checks if user is not active.
820 *
821 * @since 2.0.0 bbPress (r3502)
822 *
823 * @param int $user_id The user ID to check. Defaults to current user ID
824 * @return bool True if inactive, false if active
825 */
826 function bbp_is_user_inactive( $user_id = 0 ) {
827 return ! bbp_is_user_active( $user_id );
828 }
829
830 /**
831 * Checks if user is a keymaster
832 *
833 * @since 2.3.0 bbPress (r4783)
834 *
835 * @param int $user_id
836 * @return bool True if keymaster, false if not
837 */
838 function bbp_is_user_keymaster( $user_id = 0 ) {
839 $_user_id = bbp_get_user_id( $user_id, false, true );
840 $retval = user_can( $_user_id, 'keep_gate' );
841
842 // Filter & return
843 return (bool) apply_filters( 'bbp_is_user_keymaster', $retval, $_user_id, $user_id );
844 }
845
846 /**
847 * Does a user have a profile for the current site
848 *
849 * @since 2.2.0 bbPress (r4362)
850 *
851 * @param int $user_id User ID to check
852 *
853 * @return bool Whether or not the user has a profile on this blog_id.
854 */
855 function bbp_user_has_profile( $user_id = 0 ) {
856
857 // Assume every user has a profile
858 $retval = true;
859
860 // Validate user ID, default to displayed or current user
861 $user_id = bbp_get_user_id( $user_id, true, true );
862
863 // Try to get this user's data
864 $user = get_userdata( $user_id );
865
866 // No user found, return false
867 if ( empty( $user ) ) {
868 $retval = false;
869
870 // User is inactive, and current user is not a keymaster
871 } elseif ( ! bbp_is_user_keymaster() && bbp_is_user_inactive( $user->ID ) ) {
872 $retval = false;
873 }
874
875 // Filter & return
876 return (bool) apply_filters( 'bbp_show_user_profile', $retval, $user_id );
877 }
878
879 /** Moderators ****************************************************************/
880
881 /**
882 * Add a moderator to an object
883 *
884 * @since 2.6.0 bbPress (r6056)
885 *
886 * @param int $object_id Traditionally a post ID
887 * @param int $user_id User ID
888 * @param string $object_type Type of meta (post,term,user,comment)
889 *
890 * @return bool
891 */
892 function bbp_add_moderator( $object_id = 0, $user_id = 0, $object_type = 'post' ) {
893 return bbp_add_user_to_object( $object_id, $user_id, '_bbp_moderator_id', $object_type );
894 }
895
896 /**
897 * Remove a moderator user ID from an object
898 *
899 * @since 2.6.0 bbPress (r6056)
900 *
901 * @param int $object_id Traditionally a post ID
902 * @param int $user_id User ID
903 * @param string $object_type Type of meta (post,term,user,comment)
904 *
905 * @return bool
906 */
907 function bbp_remove_moderator( $object_id = 0, $user_id = 0, $object_type = 'post' ) {
908 return bbp_remove_user_from_object( $object_id, $user_id, '_bbp_moderator_id', $object_type );
909 }
910
911 /**
912 * Get user IDs of moderators for an object
913 *
914 * @since 2.6.0 bbPress (r6056)
915 *
916 * @param int $object_id Traditionally a post ID
917 * @param string $object_type Type of meta (post,term,user,comment)
918 *
919 * @return array
920 */
921 function bbp_get_moderator_ids( $object_id = 0, $object_type = 'post' ) {
922 return bbp_get_users_for_object( $object_id, '_bbp_moderator_id', $object_type );
923 }
924
925 /**
926 * Get moderators for a specific object ID. Will return global moderators when
927 * object ID is empty.
928 *
929 * @since 2.6.0 bbPress (r6056)
930 *
931 * @param int $object_id Traditionally a post ID
932 * @param string $object_type Type of meta (post,term,user,comment)
933 *
934 * @return array
935 */
936 function bbp_get_moderators( $object_id = 0, $object_type = 'post' ) {
937
938 // Get global moderators
939 if ( empty( $object_id ) ) {
940 $users = get_users(
941 array(
942 'role__in' => bbp_get_moderator_role(),
943 )
944 );
945
946 // Get object moderators
947 } else {
948 $users = get_users(
949 array(
950 'include' => bbp_get_moderator_ids( $object_id, $object_type ),
951 )
952 );
953 }
954
955 // Filter & return
956 return (array) apply_filters( 'bbp_get_moderators', $users, $object_id, $object_type );
957 }
958