first commit
This commit is contained in:
@@ -0,0 +1,241 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* bbPress BuddyPress Members Class
|
||||
*
|
||||
* @package bbPress
|
||||
* @subpackage BuddyPress
|
||||
*/
|
||||
|
||||
// Exit if accessed directly
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
if ( ! class_exists( 'BBP_Forums_Members' ) ) :
|
||||
/**
|
||||
* Member profile modifications
|
||||
*
|
||||
* @since 2.2.0 bbPress (r4395)
|
||||
* @since 2.6.0 bbPress (r6320) Add engagements support
|
||||
*
|
||||
* @package bbPress
|
||||
* @subpackage BuddyPress
|
||||
*/
|
||||
class BBP_BuddyPress_Members {
|
||||
|
||||
/**
|
||||
* Main constructor for modifying bbPress profile links
|
||||
*
|
||||
* @since 2.2.0 bbPress (r4395)
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->setup_actions();
|
||||
$this->setup_filters();
|
||||
$this->fully_loaded();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the actions
|
||||
*
|
||||
* @since 2.2.0 bbPress (r4395)
|
||||
*
|
||||
* @access private
|
||||
*/
|
||||
private function setup_actions() {
|
||||
|
||||
// Allow unsubscribe/unfavorite links to work
|
||||
add_action( 'bp_template_redirect', array( $this, 'set_member_forum_query_vars' ) );
|
||||
|
||||
/** Favorites *********************************************************/
|
||||
|
||||
// Move handler to 'bp_actions' - BuddyPress bypasses template_loader
|
||||
remove_action( 'bbp_get_request', 'bbp_favorites_handler', 1 );
|
||||
add_action( 'bp_actions', 'bbp_favorites_handler', 1 );
|
||||
|
||||
/** Subscriptions *****************************************************/
|
||||
|
||||
// Move handler to 'bp_actions' - BuddyPress bypasses template_loader
|
||||
remove_action( 'bbp_get_request', 'bbp_subscriptions_handler', 1 );
|
||||
add_action( 'bp_actions', 'bbp_subscriptions_handler', 1 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the filters
|
||||
*
|
||||
* @since 2.2.0 bbPress (r4395)
|
||||
* @since 2.6.0 bbPress (r6320) Add engagements support
|
||||
*
|
||||
* @access private
|
||||
*/
|
||||
private function setup_filters() {
|
||||
add_filter( 'bbp_pre_get_user_profile_url', array( $this, 'get_user_profile_url' ) );
|
||||
add_filter( 'bbp_pre_get_user_topics_created_url', array( $this, 'get_topics_created_url' ) );
|
||||
add_filter( 'bbp_pre_get_user_replies_created_url', array( $this, 'get_replies_created_url' ) );
|
||||
add_filter( 'bbp_pre_get_user_engagements_url', array( $this, 'get_engagements_permalink' ) );
|
||||
add_filter( 'bbp_pre_get_favorites_permalink', array( $this, 'get_favorites_permalink' ) );
|
||||
add_filter( 'bbp_pre_get_subscriptions_permalink', array( $this, 'get_subscriptions_permalink' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow the variables, actions, and filters to be modified by third party
|
||||
* plugins and themes.
|
||||
*
|
||||
* @since 2.6.0 bbPress (r6808)
|
||||
*/
|
||||
private function fully_loaded() {
|
||||
do_action_ref_array( 'bbp_buddypress_members_loaded', array( $this ) );
|
||||
}
|
||||
|
||||
/** Filters ***************************************************************/
|
||||
|
||||
/**
|
||||
* Override bbPress profile URL with BuddyPress profile URL
|
||||
*
|
||||
* @since 2.0.0 bbPress (r3401)
|
||||
* @since 2.6.0 bbPress (r6320) Add engagements support
|
||||
*
|
||||
* @param int $user_id
|
||||
* @return string
|
||||
*/
|
||||
public function get_user_profile_url( $user_id = 0 ) {
|
||||
return $this->get_profile_url( $user_id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Override bbPress topics created URL with BuddyPress profile URL
|
||||
*
|
||||
* @since 2.6.0 bbPress (r3721)
|
||||
* @since 2.6.0 bbPress (r6803) Use private method
|
||||
*
|
||||
* @param int $user_id
|
||||
* @return string
|
||||
*/
|
||||
public function get_topics_created_url( $user_id = 0 ) {
|
||||
return $this->get_profile_url( $user_id, bbp_get_topic_archive_slug() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Override bbPress replies created URL with BuddyPress profile URL
|
||||
*
|
||||
* @since 2.6.0 bbPress (r3721)
|
||||
* @since 2.6.0 bbPress (r6803) Use private method
|
||||
*
|
||||
* @param int $user_id
|
||||
* @return string
|
||||
*/
|
||||
public function get_replies_created_url( $user_id = 0 ) {
|
||||
return $this->get_profile_url( $user_id, bbp_get_reply_archive_slug() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Override bbPress favorites URL with BuddyPress profile URL
|
||||
*
|
||||
* @since 2.1.0 bbPress (r3721)
|
||||
* @since 2.6.0 bbPress (r6803) Use private method
|
||||
*
|
||||
* @param int $user_id
|
||||
* @return string
|
||||
*/
|
||||
public function get_favorites_permalink( $user_id = 0 ) {
|
||||
return $this->get_profile_url( $user_id, bbp_get_user_favorites_slug() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Override bbPress subscriptions URL with BuddyPress profile URL
|
||||
*
|
||||
* @since 2.1.0 bbPress (r3721)
|
||||
* @since 2.6.0 bbPress (r6803) Use private method
|
||||
*
|
||||
* @param int $user_id
|
||||
* @return string
|
||||
*/
|
||||
public function get_subscriptions_permalink( $user_id = 0 ) {
|
||||
return $this->get_profile_url( $user_id, bbp_get_user_subscriptions_slug() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Override bbPress engagements URL with BuddyPress profile URL
|
||||
*
|
||||
* @since 2.6.0 bbPress (r6320)
|
||||
*
|
||||
* @param int $user_id
|
||||
* @return string
|
||||
*/
|
||||
public function get_engagements_permalink( $user_id = 0 ) {
|
||||
return $this->get_profile_url( $user_id, bbp_get_user_engagements_slug() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Set favorites and subscriptions query variables if viewing member profile
|
||||
* pages.
|
||||
*
|
||||
* @since 2.3.0 bbPress (r4615)
|
||||
* @since 2.6.0 bbPress (r6320) Support all profile sections
|
||||
*
|
||||
* @global WP_Query $wp_query
|
||||
* @return If not viewing your own profile
|
||||
*/
|
||||
public function set_member_forum_query_vars() {
|
||||
|
||||
// Special handling for forum component
|
||||
if ( ! bp_is_my_profile() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the main query object
|
||||
$wp_query = bbp_get_wp_query();
|
||||
|
||||
// 'topics' action
|
||||
if ( bp_is_current_action( bbp_get_topic_archive_slug() ) ) {
|
||||
$wp_query->bbp_is_single_user_topics = true;
|
||||
|
||||
// 'replies' action
|
||||
} elseif ( bp_is_current_action( bbp_get_reply_archive_slug() ) ) {
|
||||
$wp_query->bbp_is_single_user_replies = true;
|
||||
|
||||
// 'favorites' action
|
||||
} elseif ( bbp_is_favorites_active() && bp_is_current_action( bbp_get_user_favorites_slug() ) ) {
|
||||
$wp_query->bbp_is_single_user_favs = true;
|
||||
|
||||
// 'subscriptions' action
|
||||
} elseif ( bbp_is_subscriptions_active() && bp_is_current_action( bbp_get_user_subscriptions_slug() ) ) {
|
||||
$wp_query->bbp_is_single_user_subs = true;
|
||||
|
||||
// 'engagements' action
|
||||
} elseif ( bbp_is_engagements_active() && bp_is_current_action( bbp_get_user_engagements_slug() ) ) {
|
||||
$wp_query->bbp_is_single_user_engagements = true;
|
||||
}
|
||||
}
|
||||
|
||||
/** Private Methods *******************************************************/
|
||||
|
||||
/**
|
||||
* Private method used to concatenate user IDs and slugs into URLs
|
||||
*
|
||||
* @since 2.6.0 bbPress (r6803)
|
||||
*
|
||||
* @param int $user_id
|
||||
* @param string $slug
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_profile_url( $user_id = 0, $slug = '' ) {
|
||||
|
||||
// Do not filter if not on BuddyPress root blog
|
||||
if ( empty( $user_id ) || ! bp_is_root_blog() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Setup profile URL
|
||||
$url = array( bp_core_get_user_domain( $user_id ) );
|
||||
|
||||
// Maybe push slug to end of URL array
|
||||
if ( ! empty( $slug ) ) {
|
||||
array_push( $url, bbpress()->extend->buddypress->slug );
|
||||
array_push( $url, $slug );
|
||||
}
|
||||
|
||||
// Return
|
||||
return implode( '', array_map( 'trailingslashit', $url ) );
|
||||
}
|
||||
}
|
||||
endif;
|
||||
Reference in New Issue
Block a user