Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Filters Users based on Gender. Make sure only users of opposite genders are visible.
- */
- class BuddyDev_Gender_Based_Member_Filter {
- /**
- * Boot
- *
- * @return BuddyDev_Gender_Based_Member_Filter
- */
- public static function boot() {
- $self = new self();
- $self->setup();
- return $self;
- }
- /**
- * Setup hooks.
- */
- 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 );
- }
- // Modifies members loop args to filter out users of same gender.
- public function filter_args( $args ) {
- // do not filter if user is not logged in, or is super admin or we are inside dashboard.
- if ( ! is_user_logged_in() || is_super_admin() || ( is_admin() && ! defined( 'DOING_AJAX' ) ) ) {
- return $args;
- }
- $opposite_gender = $this->get_opposite_gender( bp_loggedin_user_id() );
- $jlw_gender_field = xprofile_get_field( bp_get_xprofile_gender_type_field_id() );
- if ( $opposite_gender ) {
- $args[$xprofile_query] = $opposite_gender;
- }
- return $args;
- }
- // Restricts access to user profile.
- // Only allows profile owner, user of opposite gender or site admins to view.
- public function check_access() {
- if ( ! is_user_logged_in() || ! bp_is_user() || bp_is_my_profile() || is_super_admin() ) {
- return;
- }
- $user_gender = $this->get_user_gender( bp_loggedin_user_id() );
- $displayed_user_gender = $this->get_user_gender( bp_displayed_user_id() );
- // do not allow access for same gender.
- if ( $displayed_user_gender === $user_gender ) {
- bp_core_add_message( __( 'Access denied.', 'yym-helper' ) );
- bp_core_redirect( bp_loggedin_user_domain() );
- }
- }
- // Get user gender
- private function get_user_gender( $user_id ) {
- return xprofile_get_field_data( bp_get_xprofile_gender_type_field_id(), $user_id );
- }
- // Finds the opposite gender
- private function get_opposite_gender( $user_id ) {
- $user_gender = $this->get_user_gender( $user_id );
- if ( empty( $user_gender ) ) {
- return null;
- }
- if ( $user_gender === 'his_Male' ) {
- return 'her_Female';
- } elseif ( $user_gender === 'her_Female' ) {
- return 'his_Male';
- }
- return null;
- }
- }
- BuddyDev_Gender_Based_Member_Filter::boot();
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement