Ticket #3695: 3695.001.diff
File 3695.001.diff, 7.8 KB (added by , 13 years ago) |
---|
-
bp-themes/bp-default/members/single/profile/edit.php
116 116 <?php do_action( 'bp_custom_profile_edit_fields' ); ?> 117 117 118 118 <p class="description"><?php bp_the_profile_field_description(); ?></p> 119 <?php bp_xprofile_privacy_inputs(); ?> 119 120 </div> 120 121 121 122 <?php endwhile; ?> -
bp-xprofile/bp-xprofile-functions.php
602 602 return apply_filters( 'bp_xprofile_fullname_field_name', BP_XPROFILE_FULLNAME_FIELD_NAME ); 603 603 } 604 604 605 function bp_xprofile_privacy_inputs() { 606 echo bp_get_xprofile_privacy_inputs(); 607 } 608 609 function bp_get_xprofile_privacy_inputs() { 610 $field_id = bp_get_the_profile_field_id(); 611 $field_name = bp_get_the_profile_field_name(); 612 613 // Get the user's profile field privacy setting 614 $privacy = (array) bp_xprofile_get_meta( $field_id, 'field', 'bp_profile_privacy_' . bp_loggedin_user_id() ); 615 616 // If they've not setting, use the default 617 if ( empty( $privacy ) ) 618 $privacy = (array) bp_xprofile_get_meta( $field_id, 'field', 'bp_profile_privacy_default' ); 619 620 // Fallback for cases where there's no user setting or admin declared default 621 if ( empty( $privacy ) ) 622 $privacy = array( 'public' ); 623 624 $inputs = apply_filters( 'bp_xprofile_privacy_inputs', array( 625 'public' => array( 626 'text' => __( 'Everyone', 'buddypress' ), 627 'checked' => in_array( 'public', $privacy ) ? 'public' : false, 628 ), 629 'logged_in_users' => array( 630 'text' => __( 'Only Logged In Users', 'buddypress' ), 631 'checked' => in_array( 'logged_in_users', $privacy ) ? 'logged_in_users' : false, 632 ), 633 'friends' => array( 634 'text' => __( 'My Friends', 'buddypress' ), 635 'checked' => in_array( 'friends', $privacy ) ? 'friends' : false, 636 ), 637 'groups' => array( 638 'text' => __( 'Memebers of My Groups', 'buddypress' ), 639 'checked' => in_array( 'groups', $privacy ) ? 'groups' : false, 640 ), 641 'none' => array( 642 'text' => __( 'No One', 'buddypress' ), 643 'checked' => in_array( 'none', $privacy ) ? 'none' : false, 644 ), 645 ) ); 646 647 foreach ( (array) $inputs as $value => $data ) { 648 $html[] = $data['text'] . ': <input name="bp_xprofile_field_privacy_options_' . $field_id . '[]" type="checkbox"' . checked( $value, $data['checked'], false ) . ' value="' . $value . '">'; 649 } 650 651 $title = '<strong>' . sprintf( __( "Privacy settings for '%s': ", 'buddypress' ), $field_name ) . '</strong>'; 652 653 return apply_filters( 'bp_xprofile_privacy_inputs_html', $title . join( $html, ' ' ) ); 654 } 655 605 656 ?> 657 No newline at end of file -
bp-xprofile/bp-xprofile-template.php
109 109 for ( $i = 0, $count = count( $this->group->fields ); $i < $count; ++$i ) { 110 110 $field = &$this->group->fields[$i]; 111 111 112 if ( !empty( $field->data ) && $field->data->value != null ) {112 if ( !empty( $field->data ) && $field->data->value != null && !bp_profile_field_is_private( $field ) ) { 113 113 $has_data = true; 114 break; 114 115 } 115 116 } 116 117 … … 138 139 139 140 $value = !empty( $field->data ) && !empty( $field->data->value ) ? maybe_unserialize( $field->data->value ) : false; 140 141 141 if ( !empty( $value ) ) {142 if ( !empty( $value ) && !bp_profile_field_is_private( $field ) ) { 142 143 $this->field_has_data = true; 143 144 } else { 144 145 $this->field_has_data = false; … … 697 698 return apply_filters( 'bp_get_profile_field_data', xprofile_get_field_data( $field, $user_id ) ); 698 699 } 699 700 701 function bp_profile_field_is_private( $field = '', $user_id = null, $other_user_id = null ) { 702 703 // Don't hide fields from super admins, or a user's own fields 704 if ( is_super_admin() && bp_is_my_profile() ) 705 return false; 706 707 // Make every effort to get field data 708 if ( empty( $field ) ) { 709 global $field; 710 711 // Check one last time, but bail if we have nothing 712 if ( empty( $field ) ) 713 return false; 714 } 715 716 // Retrieve the field_id 717 if ( is_numeric( $field ) ) 718 $field_id = (int) $field; 719 elseif ( !empty( $field->id ) ) { 720 $field_id = (int) $field->id; 721 } else { 722 $field_id = (int) xprofile_get_field_id_from_name( $field ); 723 } 724 725 // Does not compute 726 if ( empty( $field_id ) ) 727 return false; 728 729 // Make sure we have a user_id 730 if ( null === $user_id ) 731 $user_id = bp_displayed_user_id(); 732 733 // Does not compute 734 if ( empty( $user_id ) ) 735 return false; 736 737 // Make sure we have a user_id to check in case of a friends check 738 if ( null === $other_user_id ) 739 $other_user_id = (int) bp_loggedin_user_id(); 740 741 // Get the user's profile field privacy setting 742 $privacy = (array) bp_xprofile_get_meta( $field_id, 'field', 'bp_profile_privacy_' . $user_id ); 743 744 // If they've not setting, use the default 745 if ( empty( $privacy ) ) 746 $privacy = (array) bp_xprofile_get_meta( $field_id, 'field', 'bp_profile_privacy_default' ); 747 748 // Fallback for cases where there's no user setting or admin declared default 749 if ( empty( $privacy ) ) 750 $privacy = array( 'public' ); 751 752 // Default to private 753 $retval = true; 754 755 // Logged in users only 756 if ( in_array( 'logged_in_users', $privacy ) ) { 757 758 if ( bp_loggedin_user_id() ) 759 $retval = false; 760 761 // Friends 762 } elseif ( in_array( 'friends', $privacy ) ) { 763 764 if ( !$friendship_status = wp_cache_get( 'bp_friendship_status_' . $user_id . '_to_' . $other_user_id, 'bp' ) ) { 765 $friendship_status = BP_Friends_Friendship::check_is_friend( $user_id, $other_user_id ); 766 wp_cache_set( 'bp_friendship_status_' . $user_id . '_to_' . $other_user_id, $friendship_status, 'bp' ); 767 } 768 769 if ( 'is_friends' == $friendship_status ) 770 $retval = false; 771 772 // Members of a user's groups 773 } elseif ( in_array( 'groups', $privacy ) ) { 774 775 if ( !$user_group_ids = wp_cache_get( 'bp_group_ids_' . $user_id, 'bp' ) ) { 776 $user_group_ids = BP_Groups_Member::get_group_ids( $user_id ); 777 wp_cache_set( 'bp_group_ids_' . $user_id, $user_group_ids, 'bp' ); 778 } 779 780 if ( !$other_user_group_ids = wp_cache_get( 'bp_group_ids_' . $other_user_id, 'bp' ) ) { 781 $other_user_group_ids = BP_Groups_Member::get_group_ids( $other_user_id ); 782 wp_cache_set( 'bp_group_ids_' . $other_user_id, $other_user_group_ids, 'bp' ); 783 } 784 785 $mutual_groups = array_intersect( $user_group_ids['groups'], $other_user_group_ids['groups'] ); 786 787 if ( !empty( $mutual_groups ) ) 788 $retval = false; 789 790 // Anyone can view it 791 } elseif ( in_array( 'public', $privacy ) ) { 792 $retval = false; 793 } 794 795 return apply_filters( 'bp_profile_field_is_private', $retval, $field_id, $user_id, $other_user_id, $privacy ); 796 } 797 700 798 function bp_profile_group_tabs() { 701 799 global $bp, $group_name; 702 800 -
bp-xprofile/bp-xprofile-screens.php
102 102 $errors = true; 103 103 else 104 104 do_action( 'xprofile_profile_field_data_updated', $field_id, $value ); 105 106 // Now let's do some privacy 107 if ( empty( $_POST['bp_xprofile_field_privacy_options_' . $field_id] ) ) 108 $privacy = array( 'public' ); 109 else 110 $privacy = $_POST['bp_xprofile_field_privacy_options_' . $field_id]; 111 112 if ( !bp_xprofile_update_field_meta( $field_id, 'bp_profile_privacy_' . bp_displayed_user_id(), $privacy ) ) 113 $serrors = true; 114 else 115 do_action( 'xprofile_profile_field_privacy_updated', $field_id, $privacy ); 116 105 117 } 106 118 107 119 do_action( 'xprofile_updated_profile', $bp->displayed_user->id, $posted_field_ids, $errors );