Skip to:
Content

Changeset 7764


Ignore:
Timestamp:
01/29/2014 05:01:17 PM (4 years ago)
Author:
johnjamesjacoby
Message:

First pass at introducing BuddyPress profile editing to /wp-admin:

  • New bp-members-admin.php and accompanying assets to handle the initial admin page creation (outside of XProfile).
  • New stats template functions in Blogs, Friends, and Groups components, to provide additional meta data about a members community involvement.
  • Modifies some existing XProfile admin/template/filters to make it more accommodating to querying for profile data outside of BuddyPress's traditional displayed_user context.
  • Props imath, boonebgorges, johnjamesjacoby. Fixes #5197.
Location:
trunk
Files:
8 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-blogs/bp-blogs-template.php

    r7555 r7764  
    11871187        return bp_get_button( apply_filters( 'bp_get_blogs_visit_blog_button', $button ) );
    11881188    }
     1189
     1190/** Stats **********************************************************************/
     1191
     1192/**
     1193 * Display the number of blogs in user's profile.
     1194 *
     1195 * @since BuddyPress (2.0.0)
     1196 *
     1197 * @param array $args before|after|user_id
     1198 * @uses bp_blogs_admin_get_profile_stats() to get the stats
     1199 */
     1200function bp_blogs_profile_stats( $args = '' ) {
     1201    echo bp_blogs_get_profile_stats( $args );
     1202}
     1203add_action( 'bp_members_admin_user_stats', 'bp_blogs_profile_stats', 9, 1 );
     1204
     1205/**
     1206 * Return the number of blogs in user's profile.
     1207 *
     1208 * @since BuddyPress (2.0.0)
     1209 *
     1210 * @param array $args before|after|user_id
     1211 * @return string HTML for stats output.
     1212 */
     1213function bp_blogs_get_profile_stats( $args = '' ) {
     1214
     1215    // Parse the args
     1216    $r = bp_parse_args( $args, array(
     1217        'before'  => '<li class="bp-blogs-profile-stats">',
     1218        'after'   => '</li>',
     1219        'user_id' => bp_displayed_user_id(),
     1220        'blogs'   => 0,
     1221        'output'  => ''
     1222    ), 'blogs_get_profile_stats' );
     1223
     1224    // Allow completely overloaded output
     1225    if ( is_multisite() && empty( $r['output'] ) ) {
     1226
     1227        // Only proceed if a user ID was passed
     1228        if ( ! empty( $r['user_id'] ) ) {
     1229
     1230            // Get the user groups
     1231            if ( empty( $r['blogs'] ) ) {
     1232                $r['blogs'] = absint( bp_blogs_total_blogs_for_user( $r['user_id'] ) );
     1233            }
     1234
     1235            // If groups exist, show some formatted output
     1236            $r['output'] = $r['before'] . sprintf( _n( '1 site', '<strong>%s</strong> sites', $r['blogs'], 'buddypress' ), $r['blogs'] ) . $r['after'];
     1237        }
     1238    }
     1239
     1240    // Filter and return
     1241    return apply_filters( 'bp_blogs_get_profile_stats', $r['output'], $r );
     1242}
  • trunk/bp-friends/bp-friends-template.php

    r7751 r7764  
    539539        return apply_filters( 'bp_friend_get_total_requests_count', count( BP_Friends_Friendship::get_friend_user_ids( $user_id, true ) ) );
    540540    }
     541
     542/** Stats **********************************************************************/
     543
     544/**
     545 * Display the number of friends in user's profile.
     546 *
     547 * @since BuddyPress (2.0.0)
     548 *
     549 * @param array $args before|after|user_id
     550 * @uses bp_friends_get_profile_stats() to get the stats
     551 */
     552function bp_friends_profile_stats( $args = '' ) {
     553    echo bp_friends_get_profile_stats( $args );
     554}
     555add_action( 'bp_members_admin_user_stats', 'bp_friends_profile_stats', 7, 1 );
     556
     557/**
     558 * Return the number of friends in user's profile.
     559 *
     560 * @since BuddyPress (2.0.0)
     561 *
     562 * @param array $args before|after|user_id
     563 * @return string HTML for stats output.
     564 */
     565function bp_friends_get_profile_stats( $args = '' ) {
     566
     567    // Parse the args
     568    $r = bp_parse_args( $args, array(
     569        'before'  => '<li class="bp-friends-profile-stats">',
     570        'after'   => '</li>',
     571        'user_id' => bp_displayed_user_id(),
     572        'friends' => 0,
     573        'output'  => ''
     574    ), 'friends_get_profile_stats' );
     575
     576    // Allow completely overloaded output
     577    if ( empty( $r['output'] ) ) {
     578
     579        // Only proceed if a user ID was passed
     580        if ( ! empty( $r['user_id'] ) ) {
     581
     582            // Get the user groups
     583            if ( empty( $r['friends'] ) ) {
     584                $r['friends'] = absint( friends_get_total_friend_count( $r['user_id'] ) );
     585            }
     586
     587            // If groups exist, show some formatted output
     588            $r['output'] = $r['before'] . sprintf( _n( '1 friend', '<strong>%s</strong> friends', $r['friends'], 'buddypress' ), $r['friends'] ) . $r['after'];
     589        }
     590    }
     591
     592    // Filter and return
     593    return apply_filters( 'bp_friends_get_profile_stats', $r['output'], $r );
     594}
  • trunk/bp-groups/bp-groups-template.php

    r7751 r7764  
    31553155            return $url;
    31563156    }
     3157
     3158/** Stats **********************************************************************/
     3159
     3160/**
     3161 * Display the number of groups in user's profile.
     3162 *
     3163 * @since BuddyPress (2.0.0)
     3164 *
     3165 * @param array $args before|after|user_id
     3166 * @uses bp_groups_get_profile_stats() to get the stats
     3167 */
     3168function bp_groups_profile_stats( $args = '' ) {
     3169    echo bp_groups_get_profile_stats( $args );
     3170}
     3171add_action( 'bp_members_admin_user_stats', 'bp_groups_profile_stats', 8, 1 );
     3172
     3173/**
     3174 * Return the number of groups in user's profile.
     3175 *
     3176 * @since BuddyPress (2.0.0)
     3177 *
     3178 * @param array $args before|after|user_id
     3179 * @return string HTML for stats output.
     3180 */
     3181function bp_groups_get_profile_stats( $args = '' ) {
     3182
     3183    // Parse the args
     3184    $r = bp_parse_args( $args, array(
     3185        'before'  => '<li class="bp-groups-profile-stats">',
     3186        'after'   => '</li>',
     3187        'user_id' => bp_displayed_user_id(),
     3188        'groups'  => 0,
     3189        'output'  => ''
     3190    ), 'groups_get_profile_stats' );
     3191
     3192    // Allow completely overloaded output
     3193    if ( empty( $r['output'] ) ) {
     3194
     3195        // Only proceed if a user ID was passed
     3196        if ( ! empty( $r['user_id'] ) ) {
     3197
     3198            // Get the user groups
     3199            if ( empty( $r['groups'] ) ) {
     3200                $r['groups'] = absint( bp_get_total_group_count_for_user( $r['user_id'] ) );
     3201            }
     3202
     3203            // If groups exist, show some formatted output
     3204            $r['output'] = $r['before'] . sprintf( _n( '1 group', '<strong>%s</strong> groups', $r['groups'], 'buddypress' ), $r['groups'] ) . $r['after'];
     3205        }
     3206    }
     3207
     3208    // Filter and return
     3209    return apply_filters( 'bp_groups_get_profile_stats', $r['output'], $r );
     3210}
  • trunk/bp-members/bp-members-functions.php

    r7675 r7764  
    564564    remove_action( 'make_ham_user',  'bp_core_mark_user_ham_admin'  );
    565565
     566    // Determine if we are on an admin page
     567    $is_admin = is_admin();
     568    if ( $is_admin && ! defined( 'DOING_AJAX' ) ) {
     569        $is_admin = (bool) ( buddypress()->members->admin->user_page !== get_current_screen()->id );
     570    }
     571
    566572    // When marking as spam in the Dashboard, these actions are handled by WordPress
    567     if ( !is_admin() ) {
     573    if ( ! $is_admin ) {
    568574
    569575        // Get the blogs for the user
  • trunk/bp-members/bp-members-loader.php

    r7756 r7764  
    4646            'notifications',
    4747        );
     48
     49        if ( is_admin() ) {
     50            $includes[] = 'admin';
     51        }
     52
    4853        parent::includes( $includes );
    4954    }
  • trunk/bp-xprofile/bp-xprofile-admin.php

    r7271 r7764  
    467467<?php
    468468}
     469
     470if ( ! class_exists( 'BP_XProfile_User_Admin' ) ) :
     471/**
     472 * Load xProfile Profile admin area.
     473 *
     474 * @package BuddyPress
     475 * @subpackage xProfileAdministration
     476 *
     477 * @since BuddyPress (2.0.0)
     478 */
     479class BP_XProfile_User_Admin {
     480
     481    /**
     482     * Setup xProfile User Admin.
     483     *
     484     * @access public
     485     * @since BuddyPress (2.0.0)
     486     *
     487     * @uses buddypress() to get BuddyPress main instance
     488     */
     489    public static function register_xprofile_user_admin() {
     490        if( ! is_admin() )
     491            return;
     492
     493        $bp = buddypress();
     494
     495        if( empty( $bp->profile->admin ) ) {
     496            $bp->profile->admin = new self;
     497        }
     498
     499        return $bp->profile->admin;
     500    }
     501
     502    /**
     503     * Constructor method.
     504     *
     505     * @access public
     506     * @since BuddyPress (2.0.0)
     507     */
     508    public function __construct() {
     509        $this->setup_actions();
     510    }
     511
     512    /**
     513     * Set admin-related actions and filters.
     514     *
     515     * @access private
     516     * @since BuddyPress (2.0.0)
     517     */
     518    private function setup_actions() {
     519
     520        /** Actions ***************************************************/
     521
     522        // Register the metabox in Member's community admin profile
     523        add_action( 'bp_members_admin_xprofile_metabox', array( $this, 'register_metaboxes' ), 10, 3 );
     524
     525        // Saves the profile actions for user ( avatar, profile fields )
     526        add_action( 'bp_members_admin_update_user',      array( $this, 'user_admin_load' ),    10, 4 );
     527
     528    }
     529
     530    /**
     531     * Register the xProfile metabox on Community Profile admin page.
     532     *
     533     * @access public
     534     * @since BuddyPress (2.0.0)
     535     *
     536     * @param int $user_id ID of the user being edited.
     537     * @param string $screen_id Screen ID to load the metabox in.
     538     * @param object $stats_metabox Context and priority for the stats metabox.
     539     */
     540    public function register_metaboxes( $user_id = 0, $screen_id = '', $stats_metabox = null ) {
     541
     542        if ( empty( $screen_id ) ) {
     543            $screen_id = buddypress()->members->admin->user_page;
     544        }
     545
     546        if ( empty( $stats_metabox ) ) {
     547            $stats_metabox = new StdClass();
     548        }
     549
     550        // Moving the Stats Metabox
     551        $stats_metabox->context = 'side';
     552        $stats_metabox->priority = 'low';
     553
     554        // Each Group of fields will have his own metabox
     555        if ( false == bp_is_user_spammer( $user_id ) && bp_has_profile( array( 'fetch_fields' => false ) ) ) {
     556            while ( bp_profile_groups() ) : bp_the_profile_group();
     557                add_meta_box( 'bp_xprofile_user_admin_fields_' . sanitize_key( bp_get_the_profile_group_slug() ), esc_html( bp_get_the_profile_group_name() ), array( &$this, 'user_admin_profile_metaboxes' ), $screen_id, 'normal', 'core', array( 'profile_group_id' => absint( bp_get_the_profile_group_id() ) ) );
     558            endwhile;
     559
     560        // if a user has been mark as a spammer, his BuddyPress datas are removed !
     561        } else {
     562            add_meta_box( 'bp_xprofile_user_admin_empty_profile', _x( 'User marked as a spammer', 'xprofile user-admin edit screen', 'buddypress' ), array( &$this, 'user_admin_spammer_metabox' ), $screen_id, 'normal', 'core' );
     563        }
     564
     565        // Avatar Metabox
     566        add_meta_box( 'bp_xprofile_user_admin_avatar',  _x( 'Avatar', 'xprofile user-admin edit screen', 'buddypress' ), array( &$this, 'user_admin_avatar_metabox' ), $screen_id, 'side', 'low' );
     567
     568    }
     569
     570    /**
     571     * Save the profile fields in Members community profile page.
     572     *
     573     * Loaded before the page is rendered, this function is processing form
     574     * requests.
     575     *
     576     * @access public
     577     * @since BuddyPress (2.0.0)
     578     */
     579    public function user_admin_load( $doaction = '', $user_id = 0, $request = array(), $redirect_to = '' ) {
     580
     581        // Eventually delete avatar
     582        if ( 'delete_avatar' == $doaction ) {
     583
     584            check_admin_referer( 'delete_avatar' );
     585
     586            $redirect_to = remove_query_arg( '_wpnonce', $redirect_to );
     587
     588            if ( bp_core_delete_existing_avatar( array( 'item_id' => $user_id ) ) ) {
     589                $redirect_to = add_query_arg( 'updated', 'avatar', $redirect_to );
     590            } else {
     591                $redirect_to = add_query_arg( 'error', 'avatar', $redirect_to );
     592            }
     593
     594            bp_core_redirect( $redirect_to );
     595
     596        // Update profile fields
     597        } else {
     598            // Check to see if any new information has been submitted
     599            if ( isset( $_POST['field_ids'] ) ) {
     600
     601                // Check the nonce
     602                check_admin_referer( 'edit-bp-profile_' . $user_id );
     603
     604                // Check we have field ID's
     605                if ( empty( $_POST['field_ids'] ) ) {
     606                    $redirect_to = add_query_arg( 'error', '1', $redirect_to );
     607                    bp_core_redirect( $redirect_to );
     608                }
     609
     610                $merge_ids = '';
     611                foreach ( $_POST['field_ids'] as $ids ) {
     612                    $merge_ids .= $ids . ',';
     613                }
     614
     615                // Explode the posted field IDs into an array so we know which
     616                // fields have been submitted
     617                $posted_field_ids = array_filter( wp_parse_id_list( $merge_ids ) );
     618                $is_required      = array();
     619
     620                // Loop through the posted fields formatting any datebox values
     621                // then validate the field
     622                foreach ( (array) $posted_field_ids as $field_id ) {
     623                    if ( ! isset( $_POST['field_' . $field_id] ) ) {
     624                        if ( ! empty( $_POST['field_' . $field_id . '_day'] ) && ! empty( $_POST['field_' . $field_id . '_month'] ) && ! empty( $_POST['field_' . $field_id . '_year'] ) ) {
     625                            // Concatenate the values
     626                            $date_value =   $_POST['field_' . $field_id . '_day'] . ' ' . $_POST['field_' . $field_id . '_month'] . ' ' . $_POST['field_' . $field_id . '_year'];
     627
     628                            // Turn the concatenated value into a timestamp
     629                            $_POST['field_' . $field_id] = date( 'Y-m-d H:i:s', strtotime( $date_value ) );
     630                        }
     631                    }
     632
     633                    $is_required[ $field_id ] = xprofile_check_is_required_field( $field_id );
     634                    if ( $is_required[ $field_id ] && empty( $_POST['field_' . $field_id] ) ) {
     635                        $redirect_to = add_query_arg( 'error', '2', $redirect_to );
     636                        bp_core_redirect( $redirect_to );
     637                    }
     638                }
     639
     640                // Set the errors var
     641                $errors = false;
     642
     643                // Now we've checked for required fields, lets save the values.
     644                foreach ( (array) $posted_field_ids as $field_id ) {
     645
     646                    // Certain types of fields (checkboxes, multiselects) may come through empty. Save them as an empty array so that they don't get overwritten by the default on the next edit.
     647                    if ( empty( $_POST['field_' . $field_id] ) ) {
     648                        $value = array();
     649                    } else {
     650                        $value = $_POST['field_' . $field_id];
     651                    }
     652
     653                    if ( ! xprofile_set_field_data( $field_id, $user_id, $value, $is_required[ $field_id ] ) ) {
     654                        $errors = true;
     655                    } else {
     656                        do_action( 'xprofile_profile_field_data_updated', $field_id, $value );
     657                    }
     658
     659                    // Save the visibility level
     660                    $visibility_level = ! empty( $_POST['field_' . $field_id . '_visibility'] ) ? $_POST['field_' . $field_id . '_visibility'] : 'public';
     661                    xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level );
     662                }
     663
     664                do_action( 'xprofile_updated_profile', $user_id, $posted_field_ids, $errors );
     665
     666                // Set the feedback messages
     667                if ( ! empty( $errors ) ) {
     668                    $redirect_to = add_query_arg( 'error', '3', $redirect_to );
     669                } else {
     670                    $redirect_to = add_query_arg( 'updated', '1', $redirect_to );
     671                }
     672
     673                bp_core_redirect( $redirect_to );
     674            }
     675        }
     676    }
     677
     678    /**
     679     * Render the xprofile metabox for Community Profile screen.
     680     *
     681     * @access public
     682     * @since BuddyPress (2.0.0)
     683     *
     684     * @param WP_User $user The WP_User object for the user being edited.
     685     */
     686    public function user_admin_profile_metaboxes( $user = null, $args = array() ) {
     687
     688        if ( empty( $user->ID ) ) {
     689            return;
     690        }
     691
     692        $r = bp_parse_args( $args['args'], array(
     693            'profile_group_id' => 0,
     694            'user_id'          => $user->ID
     695        ), 'bp_xprofile_user_admin_profile_loop_args' );
     696
     697        // We really need these args
     698        if ( empty( $r['profile_group_id'] ) || empty( $r['user_id'] ) ) {
     699            return;
     700        }
     701
     702        if ( bp_has_profile( $r ) ) :
     703
     704            while ( bp_profile_groups() ) : bp_the_profile_group(); ?>
     705
     706                <p class="description"><?php bp_the_profile_group_description(); ?></p>
     707
     708                <table class="form-table">
     709                    <tbody>
     710
     711                    <?php while ( bp_profile_fields() ) : bp_the_profile_field(); ?>
     712
     713                        <tr>
     714
     715                            <?php if ( 'textbox' === bp_get_the_profile_field_type() ) : ?>
     716
     717                                <th><label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php _e( '(required)', 'buddypress' ); ?><?php endif; ?></label></th>
     718                                <td class="admin-field-<?php bp_the_profile_field_type();?>">
     719                                    <input type="text" name="<?php bp_the_profile_field_input_name(); ?>" id="<?php bp_the_profile_field_input_name(); ?>" value="<?php bp_the_profile_field_edit_value(); ?>" <?php if ( bp_get_the_profile_field_is_required() ) : ?>aria-required="true"<?php endif; ?>/>
     720                                    <span class="description"><?php bp_the_profile_field_description(); ?></span>
     721                                </td>
     722
     723                            <?php endif; ?>
     724
     725                            <?php if ( 'textarea' === bp_get_the_profile_field_type() ) : ?>
     726
     727                                <th><label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php _e( '(required)', 'buddypress' ); ?><?php endif; ?></label></th>
     728                                <td class="admin-field-<?php bp_the_profile_field_type();?>">
     729                                    <textarea rows="5" cols="40" name="<?php bp_the_profile_field_input_name(); ?>" id="<?php bp_the_profile_field_input_name(); ?>" <?php if ( bp_get_the_profile_field_is_required() ) : ?>aria-required="true"<?php endif; ?>><?php bp_the_profile_field_edit_value(); ?></textarea>
     730                                    <p class="description"><?php bp_the_profile_field_description(); ?></p>
     731                                </td>
     732
     733                            <?php endif; ?>
     734
     735                            <?php if ( 'selectbox' === bp_get_the_profile_field_type() ) : ?>
     736
     737                                <th><label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php _e( '(required)', 'buddypress' ); ?><?php endif; ?></label></th>
     738                                <td class="admin-field-<?php bp_the_profile_field_type();?>">
     739                                    <select name="<?php bp_the_profile_field_input_name(); ?>" id="<?php bp_the_profile_field_input_name(); ?>" <?php if ( bp_get_the_profile_field_is_required() ) : ?>aria-required="true"<?php endif; ?>>
     740                                        <?php bp_the_profile_field_options( array( 'user_id' => $r['user_id'], ) ); ?>
     741                                    </select>
     742                                    <span class="description"><?php bp_the_profile_field_description(); ?></span>
     743                                </td>
     744
     745                            <?php endif; ?>
     746
     747                            <?php if ( 'multiselectbox' === bp_get_the_profile_field_type() ) : ?>
     748
     749                                <th><label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php _e( '(required)', 'buddypress' ); ?><?php endif; ?></label></th>
     750                                <td class="admin-field-<?php bp_the_profile_field_type();?>">
     751                                    <select name="<?php bp_the_profile_field_input_name(); ?>" id="<?php bp_the_profile_field_input_name(); ?>" multiple="multiple" <?php if ( bp_get_the_profile_field_is_required() ) : ?>aria-required="true"<?php endif; ?>>
     752
     753                                        <?php bp_the_profile_field_options( array( 'user_id' => $r['user_id'], ) ); ?>
     754
     755                                    </select>
     756
     757
     758                                    <?php if ( !bp_get_the_profile_field_is_required() ) : ?>
     759
     760                                        <p><a class="clear-value" href="javascript:clear( '<?php bp_the_profile_field_input_name(); ?>' );"><?php _e( 'Clear', 'buddypress' ); ?></a></p>
     761
     762                                    <?php endif; ?>
     763                                    <p class="description"><?php bp_the_profile_field_description(); ?></p>
     764                                </td>
     765
     766                            <?php endif; ?>
     767
     768                            <?php if ( 'radio' === bp_get_the_profile_field_type() ) : ?>
     769
     770                                <th>
     771                                    <span class="label"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php _e( '(required)', 'buddypress' ); ?><?php endif; ?></span>
     772                                </th>
     773                                <td class="admin-field-<?php bp_the_profile_field_type();?>">
     774                                    <fieldset>
     775                                        <legend class="screen-reader-text"><span><?php bp_the_profile_field_name(); ?></span></legend>
     776                                        <?php bp_the_profile_field_options( array( 'user_id' => $r['user_id'], ) ); ?>
     777                                    </fieldset>
     778
     779                                    <?php if ( !bp_get_the_profile_field_is_required() ) : ?>
     780
     781                                        <p><a class="clear-value" href="javascript:clear( '<?php bp_the_profile_field_input_name(); ?>' );"><?php _e( 'Clear', 'buddypress' ); ?></a></p>
     782
     783                                    <?php endif; ?>
     784                                    <p class="description"><?php bp_the_profile_field_description(); ?></p>
     785                                </td>
     786
     787                            <?php endif; ?>
     788
     789                            <?php if ( 'checkbox' === bp_get_the_profile_field_type() ) : ?>
     790
     791                                <th>
     792                                    <span class="label"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php _e( '(required)', 'buddypress' ); ?><?php endif; ?></span>
     793                                </th>
     794                                <td class="admin-field-<?php bp_the_profile_field_type();?>">
     795                                    <?php bp_the_profile_field_options( array( 'user_id' => $r['user_id'], ) ); ?>
     796                                    <p class="description"><?php bp_the_profile_field_description(); ?></p>
     797                                </td>
     798
     799                            <?php endif; ?>
     800
     801                            <?php if ( 'datebox' === bp_get_the_profile_field_type() ) : ?>
     802
     803                                <th>
     804                                    <label for="<?php bp_the_profile_field_input_name(); ?>_day"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php _e( '(required)', 'buddypress' ); ?><?php endif; ?></label>
     805                                </th>
     806                                <td class="admin-field-<?php bp_the_profile_field_type();?>">
     807                                    <select name="<?php bp_the_profile_field_input_name(); ?>_day" id="<?php bp_the_profile_field_input_name(); ?>_day" <?php if ( bp_get_the_profile_field_is_required() ) : ?>aria-required="true"<?php endif; ?>>
     808
     809                                        <?php bp_the_profile_field_options( array( 'user_id' => $r['user_id'], 'type' => 'day', ) ); ?>
     810
     811                                    </select>
     812
     813                                    <select name="<?php bp_the_profile_field_input_name(); ?>_month" id="<?php bp_the_profile_field_input_name(); ?>_month" <?php if ( bp_get_the_profile_field_is_required() ) : ?>aria-required="true"<?php endif; ?>>
     814
     815                                        <?php bp_the_profile_field_options( array( 'user_id' => $r['user_id'], 'type' => 'month', ) ); ?>
     816
     817                                    </select>
     818
     819                                    <select name="<?php bp_the_profile_field_input_name(); ?>_year" id="<?php bp_the_profile_field_input_name(); ?>_year" <?php if ( bp_get_the_profile_field_is_required() ) : ?>aria-required="true"<?php endif; ?>>
     820
     821                                        <?php bp_the_profile_field_options( array( 'user_id' => $r['user_id'], 'type' => 'year', ) ); ?>
     822
     823                                    </select>
     824                                    <p class="description"><?php bp_the_profile_field_description(); ?></p>
     825                                </td>
     826
     827                            <?php endif; ?>
     828
     829                        </tr>
     830
     831                        <tr class="admin-field-visibility-tr">
     832                            <td class="admin-field-visibility-td">&nbsp;</td>
     833                            <td class="admin-field-visibility-td">
     834
     835                                <?php do_action( 'bp_custom_profile_edit_fields_pre_visibility' ); ?>
     836
     837                                <?php if ( bp_current_user_can( 'bp_xprofile_change_field_visibility' ) ) : ?>
     838                                    <p class="description field-visibility-settings-toggle" id="field-visibility-settings-toggle-<?php bp_the_profile_field_id() ?>">
     839                                        <?php printf( __( 'This field can be seen by: <span class="current-visibility-level">%s</span>', 'buddypress' ), bp_get_the_profile_field_visibility_level_label() ) ?> <a href="#" class="visibility-toggle-link"><?php _e( 'Change', 'buddypress' ); ?></a>
     840                                    </p>
     841
     842                                    <div class="field-visibility-settings" id="field-visibility-settings-<?php bp_the_profile_field_id() ?>">
     843                                        <fieldset>
     844                                            <legend><?php esc_html_e( 'Who can see this field?', 'buddypress' ) ?></legend>
     845
     846                                            <?php bp_profile_visibility_radio_buttons() ?>
     847
     848                                        </fieldset>
     849                                        <a class="field-visibility-settings-close" href="#"><?php esc_html_e( 'Close', 'buddypress' ) ?></a>
     850                                    </div>
     851                                <?php else : ?>
     852                                    <div class="field-visibility-settings-notoggle" id="field-visibility-settings-toggle-<?php bp_the_profile_field_id() ?>">
     853                                        <?php printf( __( 'This field can be seen by: <span class="current-visibility-level">%s</span>', 'buddypress' ), bp_get_the_profile_field_visibility_level_label() ) ?>
     854                                    </div>
     855                                <?php endif ?>
     856
     857                            </td>
     858                        </tr>
     859
     860                    <?php endwhile; ?>
     861                    </tbody>
     862
     863                </table>
     864                <input type="hidden" name="field_ids[]" id="field_ids_<?php bp_the_profile_group_slug(); ?>" value="<?php bp_the_profile_group_field_ids(); ?>" />
     865            <?php endwhile;
     866        endif;
     867    }
     868
     869    /**
     870     * Render the fallback metabox in case a user has been marked as a spammer.
     871     *
     872     * @access public
     873     * @since BuddyPress (2.0.0)
     874     *
     875     * @param WP_User $user The WP_User object for the user being edited.
     876     */
     877    public function user_admin_spammer_metabox( $user = null ) {
     878        ?>
     879        <p><?php printf( __( '%s has been marked as a spammer, this user&#39;s BuddyPress datas were removed', 'buddypress' ), esc_html( bp_core_get_user_displayname( $user->ID ) ) ) ;?></p>
     880        <?php
     881    }
     882
     883    /**
     884     * Render the Avatar metabox to moderate inappropriate images.
     885     *
     886     * @access public
     887     * @since BuddyPress (2.0.0)
     888     *
     889     * @param WP_User $user The WP_User object for the user being edited.
     890     */
     891    public function user_admin_avatar_metabox( $user = null ) {
     892
     893        if ( empty( $user->ID ) ) {
     894            return;
     895        }
     896
     897        $args = array(
     898            'item_id' => $user->ID,
     899            'object'  => 'user',
     900            'type'    => 'full',
     901            'title'   => $user->display_name
     902        );
     903
     904        ?>
     905
     906        <div class="avatar">
     907
     908            <?php echo bp_core_fetch_avatar( $args ); ?>
     909
     910            <?php if ( bp_get_user_has_avatar( $user->ID ) ) :
     911
     912                $query_args = array(
     913                    'user_id' => $user->ID,
     914                    'action'  => 'delete_avatar'
     915                );
     916
     917                if ( ! empty( $_REQUEST['wp_http_referer'] ) )
     918                    $query_args['wp_http_referer'] = urlencode( wp_unslash( $_REQUEST['wp_http_referer'] ) );
     919
     920                    $community_url = add_query_arg( $query_args, buddypress()->members->admin->edit_profile_url );
     921                    $delete_link   = wp_nonce_url( $community_url, 'delete_avatar' ); ?>
     922
     923                <a href="<?php echo esc_url( $delete_link ); ?>" title="<?php esc_attr_e( 'Delete Avatar', 'buddypress' ); ?>" class="bp-xprofile-avatar-user-admin"><?php esc_html_e( 'Delete Avatar', 'buddypress' ); ?></a></li>
     924
     925            <?php endif; ?>
     926
     927        </div>
     928        <?php
     929    }
     930
     931}
     932endif; // class_exists check
     933
     934// Load the xprofile user admin
     935add_action( 'bp_init', array( 'BP_XProfile_User_Admin', 'register_xprofile_user_admin' ), 11 );
  • trunk/bp-xprofile/bp-xprofile-filters.php

    r6647 r7764  
    248248    global $bp, $wpdb;
    249249
    250     if ( bp_is_active( 'xprofile' ) ) {
    251         $fullname_field_id = $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->profile->table_name_fields} WHERE name = %s", bp_xprofile_fullname_field_name() ) );
    252         $user_id_names     = $wpdb->get_results( $wpdb->prepare( "SELECT user_id, value as fullname FROM {$bp->profile->table_name_data} WHERE user_id IN ({$user_ids_sql}) AND field_id = %d", $fullname_field_id ) );
    253 
    254         // Loop through names and override each user's fullname
    255         foreach ( $user_id_names as $user ) {
    256             if ( isset( $user_query->results[ $user->user_id ] ) ) {
    257                 $user_query->results[ $user->user_id ]->fullname = $user->fullname;
    258             }
     250    if ( ! bp_is_active( 'xprofile' ) ) {
     251        return;
     252    }
     253
     254    $fullname_field_id = $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->profile->table_name_fields} WHERE name = %s", bp_xprofile_fullname_field_name() ) );
     255    $user_id_names     = $wpdb->get_results( $wpdb->prepare( "SELECT user_id, value as fullname FROM {$bp->profile->table_name_data} WHERE user_id IN ({$user_ids_sql}) AND field_id = %d", $fullname_field_id ) );
     256
     257    // Loop through names and override each user's fullname
     258    foreach ( $user_id_names as $user ) {
     259        if ( isset( $user_query->results[ $user->user_id ] ) ) {
     260            $user_query->results[ $user->user_id ]->fullname = $user->fullname;
    259261        }
    260262    }
  • trunk/bp-xprofile/bp-xprofile-template.php

    r7762 r7764  
    5252        $this->current_group++;
    5353
    54         $this->group         = $this->groups[$this->current_group];
    55         $this->group->fields = apply_filters( 'xprofile_group_fields', $this->group->fields, $this->group->id );
    56         $this->field_count   = count( $this->group->fields );
     54        $this->group       = $this->groups[$this->current_group];
     55        $this->field_count = 0;
     56
     57        if( ! empty( $this->group->fields ) ) {
     58            $this->group->fields = apply_filters( 'xprofile_group_fields', $this->group->fields, $this->group->id );
     59            $this->field_count   = count( $this->group->fields );
     60        }
    5761
    5862        return $this->group;
Note: See TracChangeset for help on using the changeset viewer.