Skip to:
Content

BuddyPress.org

Ticket #5693: bp-xprofile-template-3.patch

File bp-xprofile-template-3.patch, 24.4 KB (added by SGr33n, 10 years ago)
  • .php

    old new  
    1 <?php
    2 
    3 /**
    4  * BuddyPress XProfile Template Tags
    5  *
    6  * @package BuddyPress
    7  * @subpackage XProfileTemplate
    8  */
    9 
    10 // Exit if accessed directly
    11 if ( !defined( 'ABSPATH' ) ) exit;
    12 
    13 class BP_XProfile_Data_Template {
    14         var $current_group = -1;
    15         var $group_count;
    16         var $groups;
    17         var $group;
    18 
    19         var $current_field = -1;
    20         var $field_count;
    21         var $field_has_data;
    22         var $field;
    23 
    24         var $in_the_loop;
    25         var $user_id;
    26 
    27         function __construct( $user_id, $profile_group_id, $hide_empty_groups = false, $fetch_fields = false, $fetch_field_data = false, $exclude_groups = false, $exclude_fields = false, $hide_empty_fields = false, $fetch_visibility_level = false, $update_meta_cache = true ) {
    28                 $this->groups = BP_XProfile_Group::get( array(
    29                         'profile_group_id'    => $profile_group_id,
    30                         'user_id'             => $user_id,
    31                         'hide_empty_groups'   => $hide_empty_groups,
    32                         'hide_empty_fields'   => $hide_empty_fields,
    33                         'fetch_fields'        => $fetch_fields,
    34                         'fetch_field_data'    => $fetch_field_data,
    35                         'fetch_visibility_level' => $fetch_visibility_level,
    36                         'exclude_groups'      => $exclude_groups,
    37                         'exclude_fields'      => $exclude_fields,
    38                         'update_meta_cache'   => $update_meta_cache,
    39                 ) );
    40 
    41                 $this->group_count = count($this->groups);
    42                 $this->user_id = $user_id;
    43         }
    44 
    45         function has_groups() {
    46                 if ( $this->group_count )
    47                         return true;
    48 
    49                 return false;
    50         }
    51 
    52         function next_group() {
    53                 $this->current_group++;
    54 
    55                 $this->group       = $this->groups[$this->current_group];
    56                 $this->field_count = 0;
    57 
    58                 if( ! empty( $this->group->fields ) ) {
    59                         $this->group->fields = apply_filters( 'xprofile_group_fields', $this->group->fields, $this->group->id );
    60                         $this->field_count   = count( $this->group->fields );
    61                 }
    62 
    63                 return $this->group;
    64         }
    65 
    66         function rewind_groups() {
    67                 $this->current_group = -1;
    68                 if ( $this->group_count > 0 ) {
    69                         $this->group = $this->groups[0];
    70                 }
    71         }
    72 
    73         function profile_groups() {
    74                 if ( $this->current_group + 1 < $this->group_count ) {
    75                         return true;
    76                 } elseif ( $this->current_group + 1 == $this->group_count ) {
    77                         do_action('xprofile_template_loop_end');
    78                         // Do some cleaning up after the loop
    79                         $this->rewind_groups();
    80                 }
    81 
    82                 $this->in_the_loop = false;
    83                 return false;
    84         }
    85 
    86         function the_profile_group() {
    87                 global $group;
    88 
    89                 $this->in_the_loop = true;
    90                 $group = $this->next_group();
    91 
    92                 if ( 0 == $this->current_group ) // loop has just started
    93                         do_action('xprofile_template_loop_start');
    94         }
    95 
    96         /**** FIELDS ****/
    97 
    98         function next_field() {
    99                 $this->current_field++;
    100 
    101                 $this->field = $this->group->fields[$this->current_field];
    102                 return $this->field;
    103         }
    104 
    105         function rewind_fields() {
    106                 $this->current_field = -1;
    107                 if ( $this->field_count > 0 ) {
    108                         $this->field = $this->group->fields[0];
    109                 }
    110         }
    111 
    112         function has_fields() {
    113                 $has_data = false;
    114 
    115                 for ( $i = 0, $count = count( $this->group->fields ); $i < $count; ++$i ) {
    116                         $field = &$this->group->fields[$i];
    117 
    118                         if ( !empty( $field->data ) && $field->data->value != null ) {
    119                                 $has_data = true;
    120                         }
    121                 }
    122 
    123                 if ( $has_data )
    124                         return true;
    125 
    126                 return false;
    127         }
    128 
    129         function profile_fields() {
    130                 if ( $this->current_field + 1 < $this->field_count ) {
    131                         return true;
    132                 } elseif ( $this->current_field + 1 == $this->field_count ) {
    133                         // Do some cleaning up after the loop
    134                         $this->rewind_fields();
    135                 }
    136 
    137                 return false;
    138         }
    139 
    140         function the_profile_field() {
    141                 global $field;
    142 
    143                 $field = $this->next_field();
    144 
    145                 $value = !empty( $field->data ) && !empty( $field->data->value ) ? maybe_unserialize( $field->data->value ) : false;
    146 
    147                 if ( !empty( $value ) ) {
    148                         $this->field_has_data = true;
    149                 } else {
    150                         $this->field_has_data = false;
    151                 }
    152         }
    153 }
    154 
    155 function bp_has_profile( $args = '' ) {
    156         global $profile_template;
    157 
    158         // Only show empty fields if we're on the Dashboard, or we're on a user's profile edit page,
    159         // or this is a registration page
    160         $hide_empty_fields_default = ( !is_network_admin() && !is_admin() && !bp_is_user_profile_edit() && !bp_is_register_page() );
    161 
    162         // We only need to fetch visibility levels when viewing your own profile
    163         if ( bp_is_my_profile() || bp_current_user_can( 'bp_moderate' ) || bp_is_register_page() ) {
    164                 $fetch_visibility_level_default = true;
    165         } else {
    166                 $fetch_visibility_level_default = false;
    167         }
    168 
    169         $defaults = array(
    170                 'user_id'             => bp_displayed_user_id(),
    171                 'profile_group_id'    => false,
    172                 'hide_empty_groups'   => true,
    173                 'hide_empty_fields'   => $hide_empty_fields_default,
    174                 'fetch_fields'        => true,
    175                 'fetch_field_data'    => true,
    176                 'fetch_visibility_level' => $fetch_visibility_level_default,
    177                 'exclude_groups'      => false, // Comma-separated list of profile field group IDs to exclude
    178                 'exclude_fields'      => false,  // Comma-separated list of profile field IDs to exclude
    179                 'update_meta_cache'   => true,
    180         );
    181 
    182         $r = bp_parse_args( $args, $defaults, 'has_profile' );
    183         extract( $r, EXTR_SKIP );
    184 
    185         $profile_template = new BP_XProfile_Data_Template( $user_id, $profile_group_id, $hide_empty_groups, $fetch_fields, $fetch_field_data, $exclude_groups, $exclude_fields, $hide_empty_fields, $fetch_visibility_level, $update_meta_cache );
    186         return apply_filters( 'bp_has_profile', $profile_template->has_groups(), $profile_template );
    187 }
    188 
    189 function bp_profile_groups() {
    190         global $profile_template;
    191         return $profile_template->profile_groups();
    192 }
    193 
    194 function bp_the_profile_group() {
    195         global $profile_template;
    196         return $profile_template->the_profile_group();
    197 }
    198 
    199 function bp_profile_group_has_fields() {
    200         global $profile_template;
    201         return $profile_template->has_fields();
    202 }
    203 
    204 function bp_field_css_class( $class = false ) {
    205         echo bp_get_field_css_class( $class );
    206 }
    207         function bp_get_field_css_class( $class = false ) {
    208                 global $profile_template;
    209 
    210                 $css_classes = array();
    211 
    212                 if ( $class )
    213                         $css_classes[] = sanitize_title( esc_attr( $class ) );
    214 
    215                 // Set a class with the field ID
    216                 $css_classes[] = 'field_' . $profile_template->field->id;
    217 
    218                 // Set a class with the field name (sanitized)
    219                 $css_classes[] = 'field_' . sanitize_title( $profile_template->field->name );
    220 
    221                 if ( $profile_template->current_field % 2 == 1 )
    222                         $css_classes[] = 'alt';
    223 
    224                 $css_classes[] = 'field_type_' . sanitize_title( $profile_template->field->type );
    225                 $css_classes = apply_filters_ref_array( 'bp_field_css_classes', array( &$css_classes ) );
    226 
    227                 return apply_filters( 'bp_get_field_css_class', ' class="' . implode( ' ', $css_classes ) . '"' );
    228         }
    229 
    230 function bp_field_has_data() {
    231         global $profile_template;
    232         return $profile_template->field_has_data;
    233 }
    234 
    235 function bp_field_has_public_data() {
    236         global $profile_template;
    237 
    238         if ( $profile_template->field_has_data )
    239                 return true;
    240 
    241         return false;
    242 }
    243 
    244 function bp_the_profile_group_id() {
    245         echo bp_get_the_profile_group_id();
    246 }
    247         function bp_get_the_profile_group_id() {
    248                 global $group;
    249                 return apply_filters( 'bp_get_the_profile_group_id', $group->id );
    250         }
    251 
    252 function bp_the_profile_group_name() {
    253         echo bp_get_the_profile_group_name();
    254 }
    255         function bp_get_the_profile_group_name() {
    256                 global $group;
    257                 return apply_filters( 'bp_get_the_profile_group_name', $group->name );
    258         }
    259 
    260 function bp_the_profile_group_slug() {
    261         echo bp_get_the_profile_group_slug();
    262 }
    263         function bp_get_the_profile_group_slug() {
    264                 global $group;
    265                 return apply_filters( 'bp_get_the_profile_group_slug', sanitize_title( $group->name ) );
    266         }
    267 
    268 function bp_the_profile_group_description() {
    269         echo bp_get_the_profile_group_description();
    270 }
    271         function bp_get_the_profile_group_description() {
    272                 global $group;
    273                 return apply_filters( 'bp_get_the_profile_group_description', $group->description );
    274         }
    275 
    276 function bp_the_profile_group_edit_form_action() {
    277         echo bp_get_the_profile_group_edit_form_action();
    278 }
    279         function bp_get_the_profile_group_edit_form_action() {
    280                 global $bp, $group;
    281 
    282                 return apply_filters( 'bp_get_the_profile_group_edit_form_action', trailingslashit( bp_displayed_user_domain() . $bp->profile->slug . '/edit/group/' . $group->id ) );
    283         }
    284 
    285 function bp_the_profile_group_field_ids() {
    286         echo bp_get_the_profile_group_field_ids();
    287 }
    288         function bp_get_the_profile_group_field_ids() {
    289                 global $group;
    290 
    291                 $field_ids = '';
    292 
    293                 if ( !empty( $group->fields ) ) {
    294                         foreach ( (array) $group->fields as $field ) {
    295                                 $field_ids .= $field->id . ',';
    296                         }
    297                 }
    298 
    299                 return substr( $field_ids, 0, -1 );
    300         }
    301 
    302 function bp_profile_fields() {
    303         global $profile_template;
    304         return $profile_template->profile_fields();
    305 }
    306 
    307 function bp_the_profile_field() {
    308         global $profile_template;
    309         return $profile_template->the_profile_field();
    310 }
    311 
    312 function bp_the_profile_field_id() {
    313         echo bp_get_the_profile_field_id();
    314 }
    315         function bp_get_the_profile_field_id() {
    316                 global $field;
    317                 return apply_filters( 'bp_get_the_profile_field_id', $field->id );
    318         }
    319 
    320 function bp_the_profile_field_name() {
    321         echo bp_get_the_profile_field_name();
    322 }
    323         function bp_get_the_profile_field_name() {
    324                 global $field;
    325 
    326                 return apply_filters( 'bp_get_the_profile_field_name', $field->name );
    327         }
    328 
    329 function bp_the_profile_field_value() {
    330         echo bp_get_the_profile_field_value();
    331 }
    332         function bp_get_the_profile_field_value() {
    333                 global $field;
    334 
    335                 $field->data->value = bp_unserialize_profile_field( $field->data->value );
    336 
    337                 return apply_filters( 'bp_get_the_profile_field_value', $field->data->value, $field->type, $field->id );
    338         }
    339 
    340 function bp_the_profile_field_edit_value() {
    341         echo bp_get_the_profile_field_edit_value();
    342 }
    343         function bp_get_the_profile_field_edit_value() {
    344                 global $field;
    345 
    346                 /**
    347                  * Check to see if the posted value is different, if it is re-display this
    348                  * value as long as it's not empty and a required field.
    349                  */
    350                 if ( !isset( $field->data ) ) {
    351                         $field->data = new stdClass;
    352                 }
    353 
    354                 if ( !isset( $field->data->value ) ) {
    355                         $field->data->value = '';
    356                 }
    357 
    358                 if ( isset( $_POST['field_' . $field->id] ) && $field->data->value != $_POST['field_' . $field->id] ) {
    359                         if ( !empty( $_POST['field_' . $field->id] ) )
    360                                 $field->data->value = $_POST['field_' . $field->id];
    361                         else
    362                                 $field->data->value = '';
    363                 }
    364 
    365                 $field_value = isset( $field->data->value ) ? bp_unserialize_profile_field( $field->data->value ) : '';
    366 
    367                 return apply_filters( 'bp_get_the_profile_field_edit_value', $field_value, $field->type, $field->id );
    368         }
    369 
    370 function bp_the_profile_field_type() {
    371         echo bp_get_the_profile_field_type();
    372 }
    373         function bp_get_the_profile_field_type() {
    374                 global $field;
    375 
    376                 return apply_filters( 'bp_the_profile_field_type', $field->type );
    377         }
    378 
    379 function bp_the_profile_field_description() {
    380         echo bp_get_the_profile_field_description();
    381 }
    382         function bp_get_the_profile_field_description() {
    383                 global $field;
    384 
    385                 return apply_filters( 'bp_get_the_profile_field_description', $field->description );
    386         }
    387 
    388 function bp_the_profile_field_input_name() {
    389         echo bp_get_the_profile_field_input_name();
    390 }
    391         function bp_get_the_profile_field_input_name() {
    392                 global $field;
    393 
    394                 return apply_filters( 'bp_get_the_profile_field_input_name', 'field_' . $field->id );
    395         }
    396 
    397 /**
    398  * Returns the action name for any signup errors related to this profile field
    399  *
    400  * In the registration templates, signup errors are pulled from the global
    401  * object and rendered at actions that look like 'bp_field_12_errors'. This
    402  * function allows the action name to be easily concatenated and called in the
    403  * following fashion:
    404  *   do_action( bp_get_the_profile_field_errors_action() );
    405  *
    406  * @since BuddyPress (1.8)
    407  * @return string The _errors action name corresponding to this profile field
    408  */
    409 function bp_get_the_profile_field_errors_action() {
    410         global $field;
    411         return 'bp_field_' . $field->id . '_errors';
    412 }
    413 
    414 /**
    415  * bp_the_profile_field_options()
    416  *
    417  * Displays field options HTML for field types of 'selectbox', 'multiselectbox',
    418  * 'radio', 'checkbox', and 'datebox'.
    419  *
    420  * @package BuddyPress Xprofile
    421  * @since BuddyPress (1.1)
    422  *
    423  * @uses bp_get_the_profile_field_options()
    424  *
    425  * @param array $args Specify type for datebox. Allowed 'day', 'month', 'year'.
    426  */
    427 function bp_the_profile_field_options( $args = array() ) {
    428         echo bp_get_the_profile_field_options( $args );
    429 }
    430         /**
    431          * bp_get_the_profile_field_options()
    432          *
    433          * Retrieves field options HTML for field types of 'selectbox', 'multiselectbox', 'radio', 'checkbox', and 'datebox'.
    434          *
    435          * @package BuddyPress Xprofile
    436          * @since BuddyPress (1.1)
    437          *
    438          * @uses BP_XProfile_Field::get_children()
    439          * @uses BP_XProfile_ProfileData::get_value_byid()
    440          *
    441          * @param array $args {
    442          *     Array of optional arguments.
    443          *     @type string|bool $type Type of datebox. False if it's not a
    444          *           datebox, otherwise 'day, 'month', or 'year'. Default: false.
    445          *     @type int $user_id ID of the user whose profile values should be
    446          *           used when rendering options. Default: displayed user.
    447          * }
    448          */
    449         function bp_get_the_profile_field_options( $args = array() ) {
    450                 global $field;
    451 
    452                 $args = bp_parse_args( $args, array(
    453                         'type'    => false,
    454                         'user_id' => bp_displayed_user_id(),
    455                 ), 'get_the_profile_field_options' );
    456 
    457                 /**
    458                  * In some cases, the $field global is not an instantiation of the BP_XProfile_Field class.
    459                  * However, we have to make sure that all data originally in $field gets merged back in, after reinstantiation.
    460                  */
    461                 if ( ! method_exists( $field, 'get_children' ) ) {
    462                         $field_obj = new BP_XProfile_Field( $field->id );
    463 
    464                         foreach ( $field as $field_prop => $field_prop_value ) {
    465                                 if ( ! isset( $field_obj->{$field_prop} ) )
    466                                         $field_obj->{$field_prop} = $field_prop_value;
    467                         }
    468 
    469                         $field = $field_obj;
    470                 }
    471 
    472                 ob_start();
    473                 $field->type_obj->edit_field_options_html( $args );
    474                 $html = ob_get_contents();
    475                 ob_end_clean();
    476 
    477                 return $html;
    478         }
    479 
    480 function bp_the_profile_field_is_required() {
    481         echo bp_get_the_profile_field_is_required();
    482 }
    483         function bp_get_the_profile_field_is_required() {
    484                 global $field;
    485 
    486                 // Define locale variable(s)
    487                 $retval = false;
    488 
    489                 // Super admins can skip required check
    490                 if ( bp_current_user_can( 'bp_moderate' ) && !is_admin() )
    491                         $retval = false;
    492 
    493                 // All other users will use the field's setting
    494                 elseif ( isset( $field->is_required ) )
    495                         $retval = $field->is_required;
    496 
    497                 return apply_filters( 'bp_get_the_profile_field_is_required', (bool) $retval );
    498         }
    499 
    500 /**
    501  * Echo the visibility level of this field
    502  */
    503 function bp_the_profile_field_visibility_level() {
    504         echo bp_get_the_profile_field_visibility_level();
    505 }
    506         /**
    507          * Return the visibility level of this field
    508          */
    509         function bp_get_the_profile_field_visibility_level() {
    510                 global $field;
    511 
    512                 // On the registration page, values stored in POST should take
    513                 // precedence over default visibility, so that submitted values
    514                 // are not lost on failure
    515                 if ( bp_is_register_page() && ! empty( $_POST['field_' . $field->id . '_visibility'] ) ) {
    516                         $retval = esc_attr( $_POST['field_' . $field->id . '_visibility'] );
    517                 } else {
    518                         $retval = ! empty( $field->visibility_level ) ? $field->visibility_level : 'public';
    519                 }
    520 
    521                 return apply_filters( 'bp_get_the_profile_field_visibility_level', $retval );
    522         }
    523 
    524 /**
    525  * Echo the visibility level label of this field
    526  */
    527 function bp_the_profile_field_visibility_level_label() {
    528         echo bp_get_the_profile_field_visibility_level_label();
    529 }
    530         /**
    531          * Return the visibility level label of this field
    532          */
    533         function bp_get_the_profile_field_visibility_level_label() {
    534                 global $field;
    535 
    536                 // On the registration page, values stored in POST should take
    537                 // precedence over default visibility, so that submitted values
    538                 // are not lost on failure
    539                 if ( bp_is_register_page() && ! empty( $_POST['field_' . $field->id . '_visibility'] ) ) {
    540                         $level = esc_html( $_POST['field_' . $field->id . '_visibility'] );
    541                 } else {
    542                         $level = ! empty( $field->visibility_level ) ? $field->visibility_level : 'public';
    543                 }
    544 
    545                 $fields = bp_xprofile_get_visibility_levels();
    546 
    547                 return apply_filters( 'bp_get_the_profile_field_visibility_level_label', $fields[$level]['label'] );
    548         }
    549 
    550 
    551 function bp_unserialize_profile_field( $value ) {
    552         if ( is_serialized($value) ) {
    553                 $field_value = maybe_unserialize($value);
    554                 $field_value = implode( ', ', $field_value );
    555                 return $field_value;
    556         }
    557 
    558         return $value;
    559 }
    560 
    561 function bp_profile_field_data( $args = '' ) {
    562         echo bp_get_profile_field_data( $args );
    563 }
    564         function bp_get_profile_field_data( $args = '' ) {
    565 
    566                 $defaults = array(
    567                         'field'   => false, // Field name or ID.
    568                         'user_id' => bp_displayed_user_id()
    569                 );
    570 
    571                 $r = wp_parse_args( $args, $defaults );
    572                 extract( $r, EXTR_SKIP );
    573 
    574                 return apply_filters( 'bp_get_profile_field_data', xprofile_get_field_data( $field, $user_id ) );
    575         }
    576 
    577 function bp_profile_group_tabs() {
    578         global $bp, $group_name;
    579 
    580         if ( !$groups = wp_cache_get( 'xprofile_groups_inc_empty', 'bp' ) ) {
    581                 $groups = BP_XProfile_Group::get( array( 'fetch_fields' => true ) );
    582                 wp_cache_set( 'xprofile_groups_inc_empty', $groups, 'bp' );
    583         }
    584 
    585         if ( empty( $group_name ) )
    586                 $group_name = bp_profile_group_name(false);
    587 
    588         $tabs = array();
    589         for ( $i = 0, $count = count( $groups ); $i < $count; ++$i ) {
    590                 if ( $group_name == $groups[$i]->name )
    591                         $selected = ' class="current"';
    592                 else
    593                         $selected = '';
    594 
    595                 if ( !empty( $groups[$i]->fields ) ) {
    596                         $link = trailingslashit( bp_displayed_user_domain() . $bp->profile->slug . '/edit/group/' . $groups[$i]->id );
    597                         $tabs[] = sprintf( '<li %1$s><a href="%2$s">%3$s</a></li>', $selected, $link, esc_html( $groups[$i]->name ) );
    598                 }
    599         }
    600 
    601         $tabs = apply_filters( 'xprofile_filter_profile_group_tabs', $tabs, $groups, $group_name );
    602         foreach ( (array) $tabs as $tab )
    603                 echo $tab;
    604 
    605         do_action( 'xprofile_profile_group_tabs' );
    606 }
    607 
    608 function bp_profile_group_name( $deprecated = true ) {
    609         if ( !$deprecated ) {
    610                 return bp_get_profile_group_name();
    611         } else {
    612                 echo bp_get_profile_group_name();
    613         }
    614 }
    615         function bp_get_profile_group_name() {
    616                 if ( !$group_id = bp_action_variable( 1 ) )
    617                         $group_id = 1;
    618 
    619                 if ( !is_numeric( $group_id ) )
    620                         $group_id = 1;
    621 
    622                 if ( !$group = wp_cache_get( 'xprofile_group_' . $group_id, 'bp' ) ) {
    623                         $group = new BP_XProfile_Group($group_id);
    624                         wp_cache_set( 'xprofile_group_' . $group_id, $group, 'bp' );
    625                 }
    626 
    627                 return apply_filters( 'bp_get_profile_group_name', $group->name );
    628         }
    629 
    630 function bp_avatar_upload_form() {
    631         global $bp;
    632 
    633         if ( !(int) $bp->site_options['bp-disable-avatar-uploads'] )
    634                 bp_core_avatar_admin( null, bp_loggedin_user_domain() . $bp->profile->slug . '/change-avatar/', bp_loggedin_user_domain() . $bp->profile->slug . '/delete-avatar/' );
    635         else
    636                 _e( 'Avatar uploads are currently disabled. Why not use a <a href="http://gravatar.com" target="_blank">gravatar</a> instead?', 'buddypress' );
    637 }
    638 
    639 function bp_profile_last_updated() {
    640 
    641         $last_updated = bp_get_profile_last_updated();
    642 
    643         if ( !$last_updated ) {
    644                 _e( 'Profile not recently updated', 'buddypress' ) . '.';
    645         } else {
    646                 echo $last_updated;
    647         }
    648 }
    649         function bp_get_profile_last_updated() {
    650 
    651                 $last_updated = bp_get_user_meta( bp_displayed_user_id(), 'profile_last_updated', true );
    652 
    653                 if ( $last_updated )
    654                         return apply_filters( 'bp_get_profile_last_updated', sprintf( __('Profile updated %s', 'buddypress'), bp_core_time_since( strtotime( $last_updated ) ) ) );
    655 
    656                 return false;
    657         }
    658 
    659 function bp_current_profile_group_id() {
    660         echo bp_get_current_profile_group_id();
    661 }
    662         function bp_get_current_profile_group_id() {
    663                 if ( !$profile_group_id = bp_action_variable( 1 ) )
    664                         $profile_group_id = 1;
    665 
    666                 return apply_filters( 'bp_get_current_profile_group_id', $profile_group_id ); // admin/profile/edit/[group-id]
    667         }
    668 
    669 function bp_avatar_delete_link() {
    670         echo bp_get_avatar_delete_link();
    671 }
    672         function bp_get_avatar_delete_link() {
    673                 global $bp;
    674 
    675                 return apply_filters( 'bp_get_avatar_delete_link', wp_nonce_url( bp_displayed_user_domain() . $bp->profile->slug . '/change-avatar/delete-avatar/', 'bp_delete_avatar_link' ) );
    676         }
    677 
    678 function bp_edit_profile_button() {
    679         global $bp;
    680 
    681         bp_button( array (
    682                 'id'                => 'edit_profile',
    683                 'component'         => 'xprofile',
    684                 'must_be_logged_in' => true,
    685                 'block_self'        => true,
    686                 'link_href'         => trailingslashit( bp_displayed_user_domain() . $bp->profile->slug . '/edit' ),
    687                 'link_class'        => 'edit',
    688                 'link_text'         => __( 'Edit Profile', 'buddypress' ),
    689                 'link_title'        => __( 'Edit Profile', 'buddypress' ),
    690         ) );
    691 }
    692 
    693 /** Visibility ****************************************************************/
    694 
    695 /**
    696  * Echo the field visibility radio buttons
    697  */
    698 function bp_profile_visibility_radio_buttons( $args = '' ) {
    699         echo bp_profile_get_visibility_radio_buttons( $args );
    700 }
    701         /**
    702          * Return the field visibility radio buttons
    703          */
    704         function bp_profile_get_visibility_radio_buttons( $args = '' ) {
    705 
    706                 // Parse optional arguments
    707                 $r = bp_parse_args( $args, array(
    708                         'field_id'     => bp_get_the_profile_field_id(),
    709                         'before'       => '<ul class="radio">',
    710                         'after'        => '</ul>',
    711                         'before_radio' => '<li>',
    712                         'after_radio'  => '</li>',
    713                         'class'        => 'bp-xprofile-visibility'
    714                 ), 'xprofile_visibility_radio_buttons' );
    715 
    716                 // Empty return value, filled in below if a valid field ID is found
    717                 $retval = '';
    718 
    719                 // Only do-the-do if there's a valid field ID
    720                 if ( ! empty( $r['field_id'] ) ) :
    721 
    722                         // Start the output buffer
    723                         ob_start();
    724 
    725                         // Output anything before
    726                         echo $r['before']; ?>
    727 
    728                         <?php if ( bp_current_user_can( 'bp_xprofile_change_field_visibility' ) ) : ?>
    729 
    730                                 <?php foreach( bp_xprofile_get_visibility_levels() as $level ) : ?>
    731 
    732                                         <?php echo $r['before_radio']; ?>
    733 
    734                                         <label for="<?php esc_attr( 'see-field_' . $r['field_id'] . '_' . $level['id'] ); ?>">
    735                                                 <input type="radio" id="<?php echo esc_attr( 'see-field_' . $r['field_id'] . '_' . $level['id'] ); ?>" name="<?php echo esc_attr( 'field_' . $r['field_id'] . '_visibility' ); ?>" value="<?php echo esc_attr( $level['id'] ); ?>" <?php checked( $level['id'], bp_get_the_profile_field_visibility_level() ); ?> />
    736                                                 <span class="field-visibility-text"><?php echo esc_html( $level['label'] ); ?></span>
    737                                         </label>
    738 
    739                                         <?php echo $r['after_radio']; ?>
    740 
    741                                 <?php endforeach; ?>
    742 
    743                         <?php endif;
    744 
    745                         // Output anything after
    746                         echo $r['after'];
    747 
    748                         // Get the output buffer and empty it
    749                         $retval = ob_get_clean();
    750                 endif;
    751 
    752                 return apply_filters( 'bp_profile_get_visibility_radio_buttons', $retval, $r, $args );
    753         }
    754 
    755 /**
    756  * Output the XProfile field visibility select list for settings
    757  *
    758  * @since BuddyPress (2.0.0)
    759  */
    760 function bp_profile_settings_visibility_select( $args = '' ) {
    761         echo bp_profile_get_settings_visibility_select( $args );
    762 }
    763         /**
    764          * Return the XProfile field visibility select list for settings
    765          *
    766          * @since BuddyPress (2.0.0)
    767          */
    768         function bp_profile_get_settings_visibility_select( $args = '' ) {
    769 
    770                 // Parse optional arguments
    771                 $r = bp_parse_args( $args, array(
    772                         'field_id' => bp_get_the_profile_field_id(),
    773                         'before'   => '',
    774                         'after'    => '',
    775                         'class'    => 'bp-xprofile-visibility'
    776                 ), 'xprofile_settings_visibility_select' );
    777 
    778                 // Empty return value, filled in below if a valid field ID is found
    779                 $retval = '';
    780 
    781                 // Only do-the-do if there's a valid field ID
    782                 if ( ! empty( $r['field_id'] ) ) :
    783 
    784                         // Start the output buffer
    785                         ob_start();
    786 
    787                         // Output anything before
    788                         echo $r['before']; ?>
    789 
    790                         <?php if ( bp_current_user_can( 'bp_xprofile_change_field_visibility' ) ) : ?>
    791 
    792                                 <select class="<?php echo esc_attr( $r['class'] ); ?>" name="<?php echo esc_attr( 'field_' . $r['field_id'] ) ; ?>_visibility">
    793 
    794                                         <?php foreach ( bp_xprofile_get_visibility_levels() as $level ) : ?>
    795 
    796                                                 <option value="<?php echo esc_attr( $level['id'] ); ?>" <?php selected( $level['id'], bp_get_the_profile_field_visibility_level() ); ?>><?php echo esc_html( $level['label'] ); ?></option>
    797 
    798                                         <?php endforeach; ?>
    799 
    800                                 </select>
    801 
    802                         <?php else : ?>
    803 
    804                                 <span class="field-visibility-settings-notoggle" title="<?php esc_attr_e( "This field's visibility cannot be changed.", 'buddypress' ); ?>"><?php bp_the_profile_field_visibility_level_label(); ?></span>
    805 
    806                         <?php endif;
    807 
    808                         // Output anything after
    809                         echo $r['after'];
    810 
    811                         // Get the output buffer and empty it
    812                         $retval = ob_get_clean();
    813                 endif;
    814 
    815                 // Output the dropdown list
    816                 return apply_filters( 'bp_profile_settings_visibility_select', $retval, $r, $args );
    817         }