909 lines
23 KiB
PHP
909 lines
23 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Main bbPress BuddyPress Class
|
|
*
|
|
* @package bbPress
|
|
* @subpackage BuddyPress
|
|
*/
|
|
|
|
// Exit if accessed directly
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
// Hooks
|
|
add_filter( 'bp_modify_page_title', 'bbp_filter_modify_page_title', 10, 3 );
|
|
add_filter( 'bbp_get_user_id', 'bbp_filter_user_id', 10, 3 );
|
|
add_filter( 'bbp_is_single_user', 'bbp_filter_is_single_user', 10, 1 );
|
|
add_filter( 'bbp_is_user_home', 'bbp_filter_is_user_home', 10, 1 );
|
|
|
|
// Group Forum Root
|
|
add_action( 'load-settings_page_bbpress', 'bbp_maybe_create_group_forum_root' );
|
|
add_action( 'bbp_delete_forum', 'bbp_maybe_delete_group_forum_root' );
|
|
|
|
/** BuddyPress Helpers ********************************************************/
|
|
|
|
/**
|
|
* Return component name/ID ('forums' by default)
|
|
*
|
|
* This is used primarily for Notifications integration.
|
|
*
|
|
* @since 2.6.0 bbPress (r5232)
|
|
*
|
|
* @return string
|
|
*/
|
|
function bbp_get_component_name() {
|
|
|
|
// Use existing ID or default
|
|
$retval = ! empty( bbpress()->extend->buddypress->id )
|
|
? bbpress()->extend->buddypress->id
|
|
: 'forums';
|
|
|
|
// Filter & return
|
|
return apply_filters( 'bbp_get_component_name', $retval );
|
|
}
|
|
|
|
/**
|
|
* Filter the current bbPress user ID with the current BuddyPress user ID
|
|
*
|
|
* @since 2.1.0 bbPress (r3552)
|
|
*
|
|
* @param int $user_id
|
|
* @param bool $displayed_user_fallback
|
|
* @param bool $current_user_fallback
|
|
*
|
|
* @return int User ID
|
|
*/
|
|
function bbp_filter_user_id( $user_id = 0, $displayed_user_fallback = true, $current_user_fallback = false ) {
|
|
|
|
// Define local variable
|
|
$bbp_user_id = 0;
|
|
|
|
// Get possible user ID's
|
|
$did = bp_displayed_user_id();
|
|
$lid = bp_loggedin_user_id();
|
|
|
|
// Easy empty checking
|
|
if ( ! empty( $user_id ) && is_numeric( $user_id ) ) {
|
|
$bbp_user_id = $user_id;
|
|
|
|
// Currently viewing or editing a user
|
|
} elseif ( ( true === $displayed_user_fallback ) && ! empty( $did ) ) {
|
|
$bbp_user_id = $did;
|
|
|
|
// Maybe fallback on the current_user ID
|
|
} elseif ( ( true === $current_user_fallback ) && ! empty( $lid ) ) {
|
|
$bbp_user_id = $lid;
|
|
}
|
|
|
|
return $bbp_user_id;
|
|
}
|
|
|
|
/**
|
|
* Filter the bbPress is_single_user function with BuddyPress equivalent
|
|
*
|
|
* @since 2.1.0 bbPress (r3552)
|
|
*
|
|
* @param bool $is Optional. Default false
|
|
* @return bool True if viewing single user, false if not
|
|
*/
|
|
function bbp_filter_is_single_user( $is = false ) {
|
|
if ( ! empty( $is ) ) {
|
|
return $is;
|
|
}
|
|
|
|
return bp_is_user();
|
|
}
|
|
|
|
/**
|
|
* Filter the bbPress is_user_home function with BuddyPress equivalent
|
|
*
|
|
* @since 2.1.0 bbPress (r3552)
|
|
*
|
|
* @param bool $is Optional. Default false
|
|
* @return bool True if viewing single user, false if not
|
|
*/
|
|
function bbp_filter_is_user_home( $is = false ) {
|
|
if ( ! empty( $is ) ) {
|
|
return $is;
|
|
}
|
|
|
|
return bp_is_my_profile();
|
|
}
|
|
|
|
/**
|
|
* Add the topic title to the <title> if viewing a single group forum topic
|
|
*
|
|
* @since 2.5.0 bbPress (r5161)
|
|
*
|
|
* @param string $new_title The title to filter
|
|
* @param string $old_title (Not used)
|
|
* @param string $sep The separator to use
|
|
* @return string The possibly modified title
|
|
*/
|
|
function bbp_filter_modify_page_title( $new_title = '', $old_title = '', $sep = '' ) {
|
|
|
|
// Only filter if group forums are active
|
|
if ( bbp_is_group_forums_active() ) {
|
|
|
|
// Only filter for single group forum topics
|
|
if ( bp_is_group_forum_topic() || bp_is_group_forum_topic_edit() ) {
|
|
|
|
// Get the topic
|
|
$topic = get_posts( array(
|
|
'name' => bp_action_variable( 1 ),
|
|
'post_status' => array_keys( bbp_get_topic_statuses() ),
|
|
'post_type' => bbp_get_topic_post_type(),
|
|
'numberposts' => 1
|
|
) );
|
|
|
|
// Add the topic title to the <title>
|
|
$new_title .= bbp_get_topic_title( $topic[0]->ID ) . ' ' . $sep . ' ';
|
|
}
|
|
}
|
|
|
|
// Return the title
|
|
return $new_title;
|
|
}
|
|
|
|
/** BuddyPress Screens ********************************************************/
|
|
|
|
/**
|
|
* Hook bbPress topics template into plugins template
|
|
*
|
|
* @since 2.1.0 bbPress (r3552)
|
|
*/
|
|
function bbp_member_forums_screen_topics() {
|
|
add_action( 'bp_template_content', 'bbp_member_forums_topics_content' );
|
|
bp_core_load_template( apply_filters( 'bbp_member_forums_screen_topics', 'members/single/plugins' ) );
|
|
}
|
|
|
|
/**
|
|
* Hook bbPress replies template into plugins template
|
|
*
|
|
* @since 2.1.0 bbPress (r3552)
|
|
*/
|
|
function bbp_member_forums_screen_replies() {
|
|
add_action( 'bp_template_content', 'bbp_member_forums_replies_content' );
|
|
bp_core_load_template( apply_filters( 'bbp_member_forums_screen_replies', 'members/single/plugins' ) );
|
|
}
|
|
|
|
/**
|
|
* Hook bbPress engagements template into plugins template
|
|
*
|
|
* @since 2.6.0 bbPress (r6320)
|
|
*/
|
|
function bbp_member_forums_screen_engagements() {
|
|
add_action( 'bp_template_content', 'bbp_member_forums_engagements_content' );
|
|
bp_core_load_template( apply_filters( 'bbp_member_forums_screen_engagements', 'members/single/plugins' ) );
|
|
}
|
|
|
|
/**
|
|
* Hook bbPress favorites template into plugins template
|
|
*
|
|
* @since 2.1.0 bbPress (r3552)
|
|
*/
|
|
function bbp_member_forums_screen_favorites() {
|
|
add_action( 'bp_template_content', 'bbp_member_forums_favorites_content' );
|
|
bp_core_load_template( apply_filters( 'bbp_member_forums_screen_favorites', 'members/single/plugins' ) );
|
|
}
|
|
|
|
/**
|
|
* Hook bbPress subscriptions template into plugins template
|
|
*
|
|
* @since 2.1.0 bbPress (r3552)
|
|
*/
|
|
function bbp_member_forums_screen_subscriptions() {
|
|
add_action( 'bp_template_content', 'bbp_member_forums_subscriptions_content' );
|
|
bp_core_load_template( apply_filters( 'bbp_member_forums_screen_subscriptions', 'members/single/plugins' ) );
|
|
}
|
|
|
|
/** BuddyPress Templates ******************************************************/
|
|
|
|
/**
|
|
* Get the topics created template part
|
|
*
|
|
* @since 2.1.0 bbPress (r3552)
|
|
*/
|
|
function bbp_member_forums_topics_content() {
|
|
?>
|
|
|
|
<div id="bbpress-forums" class="bbpress-wrapper">
|
|
|
|
<?php bbp_get_template_part( 'user', 'topics-created' ); ?>
|
|
|
|
</div>
|
|
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Get the topics replied to template part
|
|
*
|
|
* @since 2.1.0 bbPress (r3552)
|
|
*/
|
|
function bbp_member_forums_replies_content() {
|
|
?>
|
|
|
|
<div id="bbpress-forums" class="bbpress-wrapper">
|
|
|
|
<?php bbp_get_template_part( 'user', 'replies-created' ); ?>
|
|
|
|
</div>
|
|
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Get the topic engagements template part
|
|
*
|
|
* @since 2.6.0 bbPress (r6320)
|
|
*/
|
|
function bbp_member_forums_engagements_content() {
|
|
?>
|
|
|
|
<div id="bbpress-forums" class="bbpress-wrapper">
|
|
|
|
<?php bbp_get_template_part( 'user', 'engagements' ); ?>
|
|
|
|
</div>
|
|
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Get the topics favorited template part
|
|
*
|
|
* @since 2.1.0 bbPress (r3552)
|
|
*/
|
|
function bbp_member_forums_favorites_content() {
|
|
?>
|
|
|
|
<div id="bbpress-forums" class="bbpress-wrapper">
|
|
|
|
<?php bbp_get_template_part( 'user', 'favorites' ); ?>
|
|
|
|
</div>
|
|
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Get the topics subscribed template part
|
|
*
|
|
* @since 2.1.0 bbPress (r3552)
|
|
*/
|
|
function bbp_member_forums_subscriptions_content() {
|
|
?>
|
|
|
|
<div id="bbpress-forums" class="bbpress-wrapper">
|
|
|
|
<?php bbp_get_template_part( 'user', 'subscriptions' ); ?>
|
|
|
|
</div>
|
|
|
|
<?php
|
|
}
|
|
|
|
/** Forum Group Root **********************************************************/
|
|
|
|
/**
|
|
* Clean up the group root setting if the forum is being deleted
|
|
*
|
|
* @since 2.6.0 bbPress (r6479)
|
|
*
|
|
* @param int $forum_id The forum ID being deleted
|
|
*/
|
|
function bbp_maybe_delete_group_forum_root( $forum_id = 0 ) {
|
|
|
|
// Bail if no forum ID
|
|
$forum_id = bbp_get_forum_id();
|
|
if ( empty( $forum_id ) ) {
|
|
return;
|
|
}
|
|
|
|
// Get the group root
|
|
$group_root = (int) get_option( '_bbp_group_forums_root_id', 0 );
|
|
|
|
// Delete the group root if the forum just got deleted
|
|
if ( $group_root === $forum_id ) {
|
|
delete_option( '_bbp_group_forums_root_id' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handle the new group forum root creation
|
|
*
|
|
* @since 2.6.0 bbPress (r6479)
|
|
*
|
|
* @return
|
|
*/
|
|
function bbp_maybe_create_group_forum_root() {
|
|
|
|
// Bail if no nonce
|
|
if ( empty( $_GET['_wpnonce'] ) || ( empty( $_GET['create'] ) || ( 'bbp-group-forum-root' !== $_GET['create'] ) ) ) {
|
|
return;
|
|
}
|
|
|
|
// Bail if user cannot publish forums
|
|
if ( ! current_user_can( 'publish_forums' ) ) {
|
|
return;
|
|
}
|
|
|
|
// Bail if nonce check fails
|
|
if ( ! wp_verify_nonce( $_GET['_wpnonce'], '_bbp_group_forums_root_id' ) ) {
|
|
return;
|
|
}
|
|
|
|
// Create new forum
|
|
$forum_id = bbp_insert_forum(
|
|
|
|
// Post
|
|
array( 'post_title' => esc_html__( 'Group Forums', 'bbpress' ) ),
|
|
|
|
// Meta
|
|
array( 'forum_type' => 'category' )
|
|
);
|
|
|
|
// Update & redirect
|
|
if ( ! empty( $forum_id ) ) {
|
|
|
|
// Create
|
|
update_option( '_bbp_group_forums_root_id', $forum_id );
|
|
|
|
// Redirect
|
|
bbp_redirect( add_query_arg( array(
|
|
'page' => 'bbpress',
|
|
'updated' => true
|
|
), admin_url( 'options-general.php' ) ) );
|
|
}
|
|
}
|
|
|
|
/** Forum/Group Sync **********************************************************/
|
|
|
|
/**
|
|
* These functions are used to keep the many-to-many relationships between
|
|
* groups and forums synchronized. Each forum and group stores pointers to each
|
|
* other in their respective meta. This way if a group or forum is deleted
|
|
* their associations can be updated without much effort.
|
|
*/
|
|
|
|
/**
|
|
* Get forum ID's for a group
|
|
*
|
|
* @since 2.1.0 bbPress (r3653)
|
|
*
|
|
* @param int $group_id
|
|
*/
|
|
function bbp_get_group_forum_ids( $group_id = 0 ) {
|
|
|
|
// Assume no forums
|
|
$forum_ids = array();
|
|
|
|
// Use current group if none is set
|
|
if ( empty( $group_id ) ) {
|
|
$group_id = bp_get_current_group_id();
|
|
}
|
|
|
|
// Get the forums
|
|
if ( ! empty( $group_id ) ) {
|
|
$forum_ids = groups_get_groupmeta( $group_id, 'forum_id' );
|
|
}
|
|
|
|
// Make sure result is an array of ints
|
|
$forum_ids = array_filter( wp_parse_id_list( $forum_ids ) );
|
|
|
|
// Filter & return
|
|
return (array) apply_filters( 'bbp_get_group_forum_ids', $forum_ids, $group_id );
|
|
}
|
|
|
|
/**
|
|
* Get group ID's for a forum
|
|
*
|
|
* @since 2.1.0 bbPress (r3653)
|
|
*
|
|
* @param int $forum_id
|
|
*/
|
|
function bbp_get_forum_group_ids( $forum_id = 0 ) {
|
|
|
|
// Assume no forums
|
|
$group_ids = array();
|
|
|
|
// Use current group if none is set
|
|
if ( empty( $forum_id ) ) {
|
|
$forum_id = bbp_get_forum_id();
|
|
}
|
|
|
|
// Get the forums
|
|
if ( ! empty( $forum_id ) ) {
|
|
$group_ids = get_post_meta( $forum_id, '_bbp_group_ids', true );
|
|
}
|
|
|
|
// Make sure result is an array of ints
|
|
$group_ids = array_filter( wp_parse_id_list( $group_ids ) );
|
|
|
|
// Filter & return
|
|
return (array) apply_filters( 'bbp_get_forum_group_ids', $group_ids, $forum_id );
|
|
}
|
|
|
|
/**
|
|
* Get forum ID's for a group
|
|
*
|
|
* @since 2.1.0 bbPress (r3653)
|
|
*
|
|
* @param int $group_id
|
|
*/
|
|
function bbp_update_group_forum_ids( $group_id = 0, $forum_ids = array() ) {
|
|
|
|
// Use current group if none is set
|
|
if ( empty( $group_id ) ) {
|
|
$group_id = bp_get_current_group_id();
|
|
}
|
|
|
|
// Trim out any empties
|
|
$forum_ids = array_filter( wp_parse_id_list( $forum_ids ) );
|
|
|
|
// Get the forums
|
|
return groups_update_groupmeta( $group_id, 'forum_id', $forum_ids );
|
|
}
|
|
|
|
/**
|
|
* Update group ID's for a forum
|
|
*
|
|
* @since 2.1.0 bbPress (r3653)
|
|
*
|
|
* @param int $forum_id
|
|
*/
|
|
function bbp_update_forum_group_ids( $forum_id = 0, $group_ids = array() ) {
|
|
$forum_id = bbp_get_forum_id( $forum_id );
|
|
|
|
// Trim out any empties
|
|
$group_ids = array_filter( wp_parse_id_list( $group_ids ) );
|
|
|
|
// Get the forums
|
|
return update_post_meta( $forum_id, '_bbp_group_ids', $group_ids );
|
|
}
|
|
|
|
/**
|
|
* Add a group to a forum
|
|
*
|
|
* @since 2.1.0 bbPress (r3653)
|
|
*
|
|
* @param int $group_id
|
|
*/
|
|
function bbp_add_group_id_to_forum( $forum_id = 0, $group_id = 0 ) {
|
|
|
|
// Validate forum_id
|
|
$forum_id = bbp_get_forum_id( $forum_id );
|
|
|
|
// Use current group if none is set
|
|
if ( empty( $group_id ) ) {
|
|
$group_id = bp_get_current_group_id();
|
|
}
|
|
|
|
// Get current group IDs
|
|
$group_ids = bbp_get_forum_group_ids( $forum_id );
|
|
|
|
// Maybe update the groups forums
|
|
if ( ! in_array( $group_id, $group_ids, true ) ) {
|
|
$group_ids[] = $group_id;
|
|
return bbp_update_forum_group_ids( $forum_id, $group_ids );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove a forum from a group
|
|
*
|
|
* @since 2.1.0 bbPress (r3653)
|
|
*
|
|
* @param int $group_id
|
|
*/
|
|
function bbp_add_forum_id_to_group( $group_id = 0, $forum_id = 0 ) {
|
|
|
|
// Validate forum_id
|
|
$forum_id = bbp_get_forum_id( $forum_id );
|
|
|
|
// Use current group if none is set
|
|
if ( empty( $group_id ) ) {
|
|
$group_id = bp_get_current_group_id();
|
|
}
|
|
|
|
// Get current group IDs
|
|
$forum_ids = bbp_get_group_forum_ids( $group_id );
|
|
|
|
// Maybe update the groups forums
|
|
if ( ! in_array( $forum_id, $forum_ids, true ) ) {
|
|
$forum_ids[] = $forum_id;
|
|
return bbp_update_group_forum_ids( $group_id, $forum_ids );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove a group from a forum
|
|
*
|
|
* @since 2.1.0 bbPress (r3653)
|
|
*
|
|
* @param int $group_id
|
|
*/
|
|
function bbp_remove_group_id_from_forum( $forum_id = 0, $group_id = 0 ) {
|
|
|
|
// Validate forum_id
|
|
$forum_id = bbp_get_forum_id( $forum_id );
|
|
|
|
// Use current group if none is set
|
|
if ( empty( $group_id ) ) {
|
|
$group_id = bp_get_current_group_id();
|
|
}
|
|
|
|
// Get current group IDs
|
|
$group_ids = bbp_get_forum_group_ids( $forum_id );
|
|
|
|
// Maybe update the groups forums
|
|
if ( in_array( $group_id, $group_ids, true ) ) {
|
|
$group_ids = array_diff( array_values( $group_ids ), (array) $group_id );
|
|
return bbp_update_forum_group_ids( $forum_id, $group_ids );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove a forum from a group
|
|
*
|
|
* @since 2.1.0 bbPress (r3653)
|
|
*
|
|
* @param int $group_id
|
|
*/
|
|
function bbp_remove_forum_id_from_group( $group_id = 0, $forum_id = 0 ) {
|
|
|
|
// Validate forum_id
|
|
$forum_id = bbp_get_forum_id( $forum_id );
|
|
|
|
// Use current group if none is set
|
|
if ( empty( $group_id ) ) {
|
|
$group_id = bp_get_current_group_id();
|
|
}
|
|
|
|
// Get current group IDs
|
|
$forum_ids = bbp_get_group_forum_ids( $group_id );
|
|
|
|
// Maybe update the groups forums
|
|
if ( in_array( $forum_id, $forum_ids, true ) ) {
|
|
$forum_ids = array_diff( array_values( $forum_ids ), (array) $forum_id );
|
|
return bbp_update_group_forum_ids( $group_id, $forum_ids );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove a group from all forums
|
|
*
|
|
* @since 2.1.0 bbPress (r3653)
|
|
*
|
|
* @param int $group_id
|
|
*/
|
|
function bbp_remove_group_id_from_all_forums( $group_id = 0 ) {
|
|
|
|
// Use current group if none is set
|
|
if ( empty( $group_id ) ) {
|
|
$group_id = bp_get_current_group_id();
|
|
}
|
|
|
|
// Get current group IDs
|
|
$forum_ids = bbp_get_group_forum_ids( $group_id );
|
|
|
|
// Loop through forums and remove this group from each one
|
|
foreach ( $forum_ids as $forum_id ) {
|
|
bbp_remove_group_id_from_forum( $group_id, $forum_id );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove a forum from all groups
|
|
*
|
|
* @since 2.1.0 bbPress (r3653)
|
|
*
|
|
* @param int $forum_id
|
|
*/
|
|
function bbp_remove_forum_id_from_all_groups( $forum_id = 0 ) {
|
|
|
|
// Validate
|
|
$forum_id = bbp_get_forum_id( $forum_id );
|
|
$group_ids = bbp_get_forum_group_ids( $forum_id );
|
|
|
|
// Loop through groups and remove this forum from each one
|
|
foreach ( $group_ids as $group_id ) {
|
|
bbp_remove_forum_id_from_group( $forum_id, $group_id );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return true if a forum is a group forum
|
|
*
|
|
* @since 2.3.0 bbPress (r4571)
|
|
*
|
|
* @param int $forum_id
|
|
* @return bool True if it is a group forum, false if not
|
|
*/
|
|
function bbp_is_forum_group_forum( $forum_id = 0 ) {
|
|
|
|
// Validate
|
|
$forum_id = bbp_get_forum_id( $forum_id );
|
|
|
|
// Check for group ID's
|
|
$group_ids = bbp_get_forum_group_ids( $forum_id );
|
|
|
|
// Check if the forum has groups
|
|
$retval = (bool) ! empty( $group_ids );
|
|
|
|
// Filter & return
|
|
return (bool) apply_filters( 'bbp_is_forum_group_forum', $retval, $forum_id, $group_ids );
|
|
}
|
|
|
|
/*** Group Member Status ******************************************************/
|
|
|
|
/**
|
|
* Is the current user an admin of the current group
|
|
*
|
|
* @since 2.3.0 bbPress (r4632)
|
|
*
|
|
* @return bool If current user is an admin of the current group
|
|
*/
|
|
function bbp_group_is_admin() {
|
|
|
|
// Bail if user is not logged in or not looking at a group
|
|
if ( ! is_user_logged_in() || ! bp_is_group() ) {
|
|
return false;
|
|
}
|
|
|
|
$bbp = bbpress();
|
|
|
|
// Set the global if not set
|
|
if ( ! isset( $bbp->current_user->is_group_admin ) ) {
|
|
$bbp->current_user->is_group_admin = groups_is_user_admin( bp_loggedin_user_id(), bp_get_current_group_id() );
|
|
}
|
|
|
|
// Return the value
|
|
return (bool) $bbp->current_user->is_group_admin;
|
|
}
|
|
|
|
/**
|
|
* Is the current user a moderator of the current group
|
|
*
|
|
* @since 2.3.0 bbPress (r4632)
|
|
*
|
|
* @return bool If current user is a moderator of the current group
|
|
*/
|
|
function bbp_group_is_mod() {
|
|
|
|
// Bail if user is not logged in or not looking at a group
|
|
if ( ! is_user_logged_in() || ! bp_is_group() ) {
|
|
return false;
|
|
}
|
|
|
|
$bbp = bbpress();
|
|
|
|
// Set the global if not set
|
|
if ( ! isset( $bbp->current_user->is_group_mod ) ) {
|
|
$bbp->current_user->is_group_mod = groups_is_user_mod( bp_loggedin_user_id(), bp_get_current_group_id() );
|
|
}
|
|
|
|
// Return the value
|
|
return (bool) $bbp->current_user->is_group_mod;
|
|
}
|
|
|
|
/**
|
|
* Is the current user a member of the current group
|
|
*
|
|
* @since 2.3.0 bbPress (r4632)
|
|
*
|
|
* @return bool If current user is a member of the current group
|
|
*/
|
|
function bbp_group_is_member() {
|
|
|
|
// Bail if user is not logged in or not looking at a group
|
|
if ( ! is_user_logged_in() || ! bp_is_group() ) {
|
|
return false;
|
|
}
|
|
|
|
$bbp = bbpress();
|
|
|
|
// Set the global if not set
|
|
if ( ! isset( $bbp->current_user->is_group_member ) ) {
|
|
$bbp->current_user->is_group_member = groups_is_user_member( bp_loggedin_user_id(), bp_get_current_group_id() );
|
|
}
|
|
|
|
// Return the value
|
|
return (bool) $bbp->current_user->is_group_member;
|
|
}
|
|
|
|
/**
|
|
* Is the current user banned from the current group
|
|
*
|
|
* @since 2.3.0 bbPress (r4632)
|
|
*
|
|
* @return bool If current user is banned from the current group
|
|
*/
|
|
function bbp_group_is_banned() {
|
|
|
|
// Bail if user is not logged in or not looking at a group
|
|
if ( ! is_user_logged_in() || ! bp_is_group() ) {
|
|
return false;
|
|
}
|
|
|
|
$bbp = bbpress();
|
|
|
|
// Set the global if not set
|
|
if ( ! isset( $bbp->current_user->is_group_banned ) ) {
|
|
$bbp->current_user->is_group_banned = groups_is_user_banned( bp_loggedin_user_id(), bp_get_current_group_id() );
|
|
}
|
|
|
|
// Return the value
|
|
return (bool) $bbp->current_user->is_group_banned;
|
|
}
|
|
|
|
/**
|
|
* Is the current user the creator of the current group
|
|
*
|
|
* @since 2.3.0 bbPress (r4632)
|
|
*
|
|
* @return bool If current user the creator of the current group
|
|
*/
|
|
function bbp_group_is_creator() {
|
|
|
|
// Bail if user is not logged in or not looking at a group
|
|
if ( ! is_user_logged_in() || ! bp_is_group() ) {
|
|
return false;
|
|
}
|
|
|
|
$bbp = bbpress();
|
|
|
|
// Set the global if not set
|
|
if ( ! isset( $bbp->current_user->is_group_creator ) ) {
|
|
$bbp->current_user->is_group_creator = groups_is_user_creator( bp_loggedin_user_id(), bp_get_current_group_id() );
|
|
}
|
|
|
|
// Return the value
|
|
return (bool) $bbp->current_user->is_group_creator;
|
|
}
|
|
|
|
/* BuddyPress Activity Action Callbacks ***************************************/
|
|
|
|
/**
|
|
* Return an array of allowed activity actions
|
|
*
|
|
* @since 2.6.0 bbPress (r6370)
|
|
*
|
|
* @return array
|
|
*/
|
|
function bbp_get_activity_actions() {
|
|
|
|
// Filter & return
|
|
return (array) apply_filters( 'bbp_get_activity_actions', array(
|
|
'topic' => esc_html__( '%1$s started the topic %2$s in the forum %3$s', 'bbpress' ),
|
|
'reply' => esc_html__( '%1$s replied to the topic %2$s in the forum %3$s', 'bbpress' )
|
|
) );
|
|
}
|
|
|
|
/**
|
|
* Generic function to format the dynamic BuddyPress activity action for new
|
|
* topics/replies.
|
|
*
|
|
* @since 2.6.0 bbPress (r6370)
|
|
*
|
|
* @param string $type The type of post. Expects `topic` or `reply`.
|
|
* @param string $action The current action string.
|
|
* @param BP_Activity_Activity $activity The BuddyPress activity object.
|
|
*
|
|
* @return string The formatted activity action.
|
|
*/
|
|
function bbp_format_activity_action_new_post( $type = '', $action = '', $activity = false ) {
|
|
|
|
// Get actions
|
|
$actions = bbp_get_activity_actions();
|
|
|
|
// Bail early if we don't have a valid type
|
|
if ( ! in_array( $type, array_keys( $actions ), true ) ) {
|
|
return $action;
|
|
}
|
|
|
|
// Bail if intercepted
|
|
$intercept = bbp_maybe_intercept( __FUNCTION__, func_get_args() );
|
|
if ( bbp_is_intercepted( $intercept ) ) {
|
|
return $intercept;
|
|
}
|
|
|
|
// Groups component
|
|
if ( 'groups' === $activity->component ) {
|
|
if ( 'topic' === $type ) {
|
|
$topic_id = bbp_get_topic_id( $activity->secondary_item_id );
|
|
$forum_id = bbp_get_topic_forum_id( $topic_id );
|
|
} else {
|
|
$topic_id = bbp_get_reply_topic_id( $activity->secondary_item_id );
|
|
$forum_id = bbp_get_topic_forum_id( $topic_id );
|
|
}
|
|
|
|
// General component (bbpress/forums/other)
|
|
} else {
|
|
if ( 'topic' === $type ) {
|
|
$topic_id = bbp_get_topic_id( $activity->item_id );
|
|
$forum_id = bbp_get_forum_id( $activity->secondary_item_id );
|
|
} else {
|
|
$topic_id = bbp_get_topic_id( $activity->secondary_item_id );
|
|
$forum_id = bbp_get_topic_forum_id( $topic_id );
|
|
}
|
|
}
|
|
|
|
// User link for topic author
|
|
$user_link = bbp_get_user_profile_link( $activity->user_id );
|
|
|
|
// Topic link
|
|
$topic_permalink = bbp_get_topic_permalink( $topic_id );
|
|
$topic_title = get_post_field( 'post_title', $topic_id, 'raw' );
|
|
$topic_link = '<a href="' . esc_url( $topic_permalink ) . '">' . esc_html( $topic_title ) . '</a>';
|
|
|
|
// Forum link
|
|
$forum_permalink = bbp_get_forum_permalink( $forum_id );
|
|
$forum_title = get_post_field( 'post_title', $forum_id, 'raw' );
|
|
$forum_link = '<a href="' . esc_url( $forum_permalink ) . '">' . esc_html( $forum_title ) . '</a>';
|
|
|
|
// Format
|
|
$activity_action = sprintf( $actions[ $type ], $user_link, $topic_link, $forum_link );
|
|
|
|
/**
|
|
* Filters the formatted activity action new activity string.
|
|
*
|
|
* @since 2.6.0 bbPress (r6370)
|
|
*
|
|
* @param string $activity_action Activity action string value
|
|
* @param string $type The type of post. Expects `topic` or `reply`.
|
|
* @param string $action The current action string.
|
|
* @param BP_Activity_Activity $activity The BuddyPress activity object.
|
|
*/
|
|
return apply_filters( 'bbp_format_activity_action_new_post', $activity_action, $type, $action, $activity );
|
|
}
|
|
|
|
/**
|
|
* Formats the dynamic BuddyPress activity action for new topics.
|
|
*
|
|
* @since 2.6.0 bbPress (r6370)
|
|
*
|
|
* @param string $action The current action string
|
|
* @param object $activity The BuddyPress activity object
|
|
*
|
|
* @return string The formatted activity action.
|
|
*/
|
|
function bbp_format_activity_action_new_topic( $action, $activity ) {
|
|
$action = bbp_format_activity_action_new_post( bbp_get_topic_post_type(), $action, $activity );
|
|
|
|
/**
|
|
* Filters the formatted activity action new topic string.
|
|
*
|
|
* @since 2.6.0 bbPress (r6370)
|
|
*
|
|
* @param string $action Activity action string value
|
|
* @param BP_Activity_Activity $activity Activity item object
|
|
*/
|
|
return apply_filters( 'bbp_format_activity_action_new_topic', $action, $activity );
|
|
}
|
|
|
|
/**
|
|
* Formats the dynamic BuddyPress activity action for new replies.
|
|
*
|
|
* @since 2.6.0 bbPress (r6370)
|
|
*
|
|
* @param string $action The current action string
|
|
* @param object $activity The BuddyPress activity object
|
|
*
|
|
* @return string The formatted activity action
|
|
*/
|
|
function bbp_format_activity_action_new_reply( $action, $activity ) {
|
|
$action = bbp_format_activity_action_new_post( bbp_get_reply_post_type(), $action, $activity );
|
|
|
|
/**
|
|
* Filters the formatted activity action new reply string.
|
|
*
|
|
* @since 2.6.0 bbPress (r6370)
|
|
*
|
|
* @param string $action Activity action string value
|
|
* @param BP_Activity_Activity $activity Activity item object
|
|
*/
|
|
return apply_filters( 'bbp_format_activity_action_new_reply', $action, $activity );
|
|
}
|