edelawit

php for custome.php @Brajesh

Sep 24th, 2020 (edited)
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.14 KB | None | 0 0
  1.  <?php
  2. /**
  3.  * Filters Users based on Gender. Make sure only users of opposite genders are visible.
  4.  */
  5. class BuddyDev_Gender_Based_Member_Filter {
  6.  
  7.     /**
  8.      * Boot
  9.      *
  10.      * @return BuddyDev_Gender_Based_Member_Filter
  11.      */
  12.     public static function boot() {
  13.         $self = new self();
  14.         $self->setup();
  15.         return $self;
  16.     }
  17.  
  18.     /**
  19.      * Setup hooks.
  20.      */
  21.     private function setup() {
  22.         add_filter( 'bp_after_has_members_parse_args', array( $this, 'filter_args' ) );
  23.  
  24.         add_action( 'bp_template_redirect', array( $this, 'check_access' ), 10, 2 );
  25.     }
  26.  
  27.     /**
  28.      * Modifies members loop args to filter out users of same gender.
  29.      *
  30.      * @param array $args Array of group allowed parameters.
  31.      *
  32.      * @return array
  33.      */
  34.     public function filter_args( $args ) {
  35.  
  36.         // do not filter if user is not logged in, or is super admin or we are inside dashboard.
  37.         if ( ! is_user_logged_in() || is_super_admin() || ( is_admin() && ! defined( 'DOING_AJAX' ) ) ) {
  38.             return $args;
  39.         }
  40.  
  41.         $opposite_gender = $this->get_opposite_gender( bp_loggedin_user_id() );
  42.  
  43.         if ( $opposite_gender ) {
  44.             $args['member_type'] = $opposite_gender;
  45.         }
  46.  
  47.         return $args;
  48.     }
  49.  
  50.     /**
  51.      * Restricts access to user profile.
  52.      *
  53.      * Only allows profile owner, user of opposite gender or site admins to view.
  54.      */
  55.     public function check_access() {
  56.  
  57.         if ( ! is_user_logged_in() || ! bp_is_user() || bp_is_my_profile() || is_super_admin() ) {
  58.             return;
  59.         }
  60.  
  61.         $gender = $this->get_user_gender( bp_loggedin_user_id() );
  62.         if ( ! $gender ) {
  63.             return;
  64.         }
  65.  
  66.         // do not allow access for same gender.
  67.         if ( bp_has_member_type( bp_displayed_user_id(), $gender ) ) {
  68.             bp_core_add_message( __( 'Access denied.', 'yym-helper' ) );
  69.             bp_core_redirect( bp_loggedin_user_domain() );
  70.         }
  71.     }
  72.  
  73.     /**
  74.      * Returns user Gender.
  75.      *
  76.      * @param int $user_id user id.
  77.      *
  78.      * @return string|null
  79.      */
  80.     private function get_user_gender( $user_id ) {
  81.        
  82.         $gender       = null;
  83.         $member_types = bp_get_member_type( $user_id, false );
  84.  
  85.         if ( empty( $member_types ) ) {
  86.             $gender = null;
  87.         } elseif ( $this->is_user_male( $user_id ) ) {
  88.             $gender = 'male';
  89.         } elseif ( $this->is_user_female( $user_id ) ) {
  90.             $gender = 'female';
  91.         }
  92.  
  93.         return $gender;
  94.     }
  95.  
  96.     /**
  97.      * Finds the opposite gender for the given user.
  98.      *
  99.      * @param int $user_id user id.
  100.      *
  101.      * @return string|null
  102.      */
  103.     private function get_opposite_gender( $user_id ) {
  104.  
  105.         $user_gender = $this->get_user_gender( $user_id );
  106.         if ( ! $user_gender ) {
  107.             return null;
  108.         }
  109.  
  110.         if ( 'male' === $user_gender ) {
  111.             return 'female';
  112.         } elseif ( 'female' === $user_gender ) {
  113.             return 'male';
  114.         }
  115.  
  116.         return null;
  117.     }
  118.  
  119.     /***
  120.      * Checks if user is male or not.
  121.      *
  122.      * @param int $user_id User id to check.
  123.      *
  124.      * @return bool
  125.      */
  126.     private function is_user_male( $user_id ) {
  127.         return bp_has_member_type( $user_id, 'male' );
  128.     }
  129.  
  130.     /***
  131.      * Checks if user is female or not.
  132.      *
  133.      * @param int $user_id User id to check.
  134.      *
  135.      * @return bool
  136.      */
  137.     private function is_user_female( $user_id ) {
  138.         return bp_has_member_type( $user_id, 'female' );
  139.     }
  140. }
  141.  
  142. BuddyDev_Gender_Based_Member_Filter::boot();
  143. ?>
Add Comment
Please, Sign In to add comment