Skip to:
Content

BuddyPress.org

Ticket #5192: 5192.suggestions.patch

File 5192.suggestions.patch, 3.8 KB (added by imath, 9 years ago)

requires 5192.diff to be applied first.

  • src/bp-xprofile/bp-xprofile-admin.php

    diff --git src/bp-xprofile/bp-xprofile-admin.php src/bp-xprofile/bp-xprofile-admin.php
    index 5d93acb..a94499a 100644
    function xprofile_admin_field( $admin_field, $admin_group, $class = '' ) { 
    508508
    509509                                <?php if ( empty( $field->can_delete )                                    ) : ?><?php esc_html_e( '(Primary)',  'buddypress' ); endif; ?>
    510510                                <?php if ( bp_get_the_profile_field_is_required()                         ) : ?><?php esc_html_e( '(Required)', 'buddypress' ); endif; ?>
    511                                 <?php if ( bp_xprofile_get_meta( $field->id, 'field', 'signup_position' ) ) : ?><?php esc_html_e( '(Sign-up)',  'buddypress' ); endif; ?>
    512511
    513512                                <?php
     513                                // Check for Signup position and member type metas
     514                                $field_metas = bp_xprofile_get_meta( $field->id, 'field' );
     515
     516                                if ( $field_metas ) {
     517                                        foreach ( $field_metas as $meta_key => $meta_value ) {
     518                                                if ( 'signup_position' === $meta_key ) {
     519                                                        esc_html_e( '(Sign-up)',  'buddypress' );
     520                                                }
     521
     522                                                if ( 'member-type' === $meta_key ) {
     523                                                        $label  = reset( $meta_value );
     524                                                        $labels = array();
     525
     526                                                        if ( 'none' !== $label ) {
     527                                                                $member_types = bp_get_member_types( array(), 'objects' );
     528
     529                                                                foreach ( $meta_value as $member_type ) {
     530                                                                        if ( ! isset( $member_types[ $member_type ] ) ) {
     531                                                                                continue;
     532                                                                        }
     533
     534                                                                        $labels[] = $member_types[ $member_type ]->labels['singular_name'];
     535                                                                }
     536
     537                                                                $label = join( ', ', $labels );
     538                                                        }
     539
     540                                                        printf( esc_html__( '(Member types: %s)',  'buddypress' ), $label );
     541                                                }
     542                                        }
     543                                }
    514544
    515545                                /**
    516546                                 * Fires at end of legend above the name field in base xprofile group.
  • src/bp-xprofile/classes/class-bp-xprofile-group.php

    diff --git src/bp-xprofile/classes/class-bp-xprofile-group.php src/bp-xprofile/classes/class-bp-xprofile-group.php
    index 9056da9..27146a4 100644
    class BP_XProfile_Group { 
    334334                // Fetch the fields
    335335                $fields    = $wpdb->get_results( "SELECT id, name, description, type, group_id, is_required FROM {$bp->profile->table_name_fields} WHERE group_id IN ( {$group_ids_in} ) AND parent_id = 0 {$exclude_fields_sql} ORDER BY field_order" );
    336336
    337                 // Remove fields based on member-type restrictions, if necessary.
    338                 if ( $r['user_id'] ) {
    339                         $user_member_types = bp_get_member_type( $r['user_id'], false );
    340                         if ( empty( $user_member_types ) ) {
     337                // If some member types are set, remove fields based on member-type restrictions, if necessary.
     338                if ( bp_get_member_types() ) {
     339
     340                        if ( $r['user_id'] ) {
     341                                $user_member_types = bp_get_member_type( $r['user_id'], false );
     342                        } else {
     343                                $user_member_types = apply_filters( 'bp_xprofile_field_restrict_to_member_types', array() );
     344                        }
     345
     346                        // Users with no member type
     347                        if ( false === $user_member_types ) {
    341348                                $user_member_types = array( 'none' );
    342349                        }
    343350
    344                         foreach ( $fields as $k => $_field ) {
    345                                 $field_obj = new BP_XProfile_Field( $_field->id );
    346                                 $field_member_types = $field_obj->get_member_types();
    347                                 $matching_types = array_intersect( $user_member_types, $field_member_types );
    348                                 if ( empty( $matching_types ) ) {
    349                                         unset( $fields[ $k ] );
     351                        if ( ! empty( $user_member_types ) ) {
     352
     353                                foreach ( $fields as $k => $_field ) {
     354                                        $field_obj = new BP_XProfile_Field( $_field->id );
     355                                        $field_member_types = $field_obj->get_member_types();
     356                                        $matching_types = array_intersect( $user_member_types, $field_member_types );
     357                                        if ( empty( $matching_types ) ) {
     358                                                unset( $fields[ $k ] );
     359                                        }
    350360                                }
    351                         }
    352361
    353                         // Reset indexes.
    354                         $fields = array_values( $fields );
     362                                // Reset indexes.
     363                                $fields = array_values( $fields );
     364                        }
    355365                }
    356366
    357367                $field_ids = wp_list_pluck( $fields, 'id' );