Skip to content

Instantly share code, notes, and snippets.

@sbrajesh
Last active June 12, 2020 17:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sbrajesh/f7350e1687505bd10f94e6233a70ead2 to your computer and use it in GitHub Desktop.
Save sbrajesh/f7350e1687505bd10f94e6233a70ead2 to your computer and use it in GitHub Desktop.
/**
* Class Filters
*
* @copyright BuddyDev
*/
class Gender_Based_Member_Filter {
/**
* Class self boot
*/
public static function boot() {
$self = new self();
$self->setup();
}
/**
* Setup
*/
private function setup() {
add_filter( 'bp_after_has_members_parse_args', array( $this, 'filter_args' ) );
add_action( 'bp_template_redirect', array( $this, 'check_access' ), 10, 2 );
}
/**
* Modify groups args
*
* @param array $args Array of group allowed parameters.
*
* @return array
*/
public function filter_args( $args ) {
// we do not restrict if a user is not logged in
// or the logged in user is site admin
// of the list is being shown inside the admin.
if ( ! is_user_logged_in() || is_super_admin() || ( is_admin() && ! defined( 'DOING_AJAX' ) ) ) {
return $args;
}
$user_id = bp_loggedin_user_id();
if ( bp_has_member_type( $user_id, 'male' ) ) {
$args['member_type'] = 'male';
} elseif ( bp_has_member_type( $user_id, 'female' ) ) {
$args['member_type'] = 'female';
}
return $args;
}
/**
* Check access for user profile.
*/
public function check_access() {
if ( ! is_user_logged_in() || ! bp_is_user() || is_super_admin() ) {
return;
}
$gender = $this->get_user_gender( bp_loggedin_user_id() );
if ( ! $gender ) {
return;
}
// allow access for same gender.
if ( bp_has_member_type( bp_displayed_user_id(), $gender ) ) {
return;
}
bp_core_add_message( __( 'Access denied.', 'bp-gender-based-filter' ) );
bp_core_redirect( bp_loggedin_user_domain() );
}
private function get_user_gender( $user_id ) {
$gender = null;
$member_types = bp_get_member_type( $user_id, false );
if ( empty( $member_types ) ) {
$gender = null;
} elseif ( in_array( 'male', $member_types ) ) {
$gender = 'male';
} elseif ( in_array( 'female', $member_types, true ) ) {
$gender = 'female';
}
return $gender;
}
}
Gender_Based_Member_Filter::boot();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment