PluginProbe
bbPress / 2.6.17
bbPress v2.6.17
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 2.2 2.2.1 All 72 releases
bbpress / includes / users / capabilities.php

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

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