Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
02/05/2016 05:37:16 AM (5 years ago)
Author:
boonebgorges
Message:

Move bp-xprofile classes to their own files.

See #6870.

File:
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-xprofile/classes/class-bp-xprofile-user-admin.php

    r10515 r10525  
    11<?php
    22/**
    3  * BuddyPress XProfile Admin.
     3 * BuddyPress XProfile Admin Class.
    44 *
    55 * @package BuddyPress
    6  * @subpackage XProfileAdmin
    7  * @since 1.0.0
     6 * @since 2.0.0
    87 */
    98
    109// Exit if accessed directly.
    1110defined( 'ABSPATH' ) || exit;
    12 
    13 /**
    14  * Creates the administration interface menus and checks to see if the DB
    15  * tables are set up.
    16  *
    17  * @uses bp_current_user_can() returns true if the current user is a site admin, false if not.
    18  * @uses add_users_page() Adds a submenu tab to a top level tab in the admin area.
    19  *
    20  * @return bool
    21  */
    22 function xprofile_add_admin_menu() {
    23 
    24     // Bail if current user cannot moderate community.
    25     if ( ! bp_current_user_can( 'bp_moderate' ) ) {
    26         return false;
    27     }
    28 
    29     add_users_page( _x( 'Profile Fields', 'xProfile admin page title', 'buddypress' ), _x( 'Profile Fields', 'Admin Users menu', 'buddypress' ), 'manage_options', 'bp-profile-setup', 'xprofile_admin' );
    30 }
    31 add_action( bp_core_admin_hook(), 'xprofile_add_admin_menu' );
    32 
    33 /**
    34  * Handles all actions for the admin area for creating, editing and deleting
    35  * profile groups and fields.
    36  *
    37  * @param string $message Message to display.
    38  * @param string $type    Type of action to be displayed.
    39  */
    40 function xprofile_admin( $message = '', $type = 'error' ) {
    41 
    42     if ( isset( $_GET['mode'] ) && isset( $_GET['group_id'] ) && 'add_field' == $_GET['mode'] ) {
    43         xprofile_admin_manage_field( $_GET['group_id'] );
    44 
    45     } elseif ( isset( $_GET['mode'] ) && isset( $_GET['group_id'] ) && isset( $_GET['field_id'] ) && 'edit_field' == $_GET['mode'] ) {
    46         xprofile_admin_manage_field( $_GET['group_id'], $_GET['field_id'] );
    47 
    48     } elseif ( isset( $_GET['mode'] ) && isset( $_GET['field_id'] ) && 'delete_field' == $_GET['mode'] ) {
    49         xprofile_admin_delete_field( $_GET['field_id'], 'field');
    50 
    51     } elseif ( isset( $_GET['mode'] ) && isset( $_GET['option_id'] ) && 'delete_option' == $_GET['mode'] ) {
    52         xprofile_admin_delete_field( $_GET['option_id'], 'option' );
    53 
    54     } elseif ( isset( $_GET['mode'] ) && 'add_group' == $_GET['mode'] ) {
    55         xprofile_admin_manage_group();
    56 
    57     } elseif ( isset( $_GET['mode'] ) && isset( $_GET['group_id'] ) && 'delete_group' == $_GET['mode'] ) {
    58         xprofile_admin_delete_group( $_GET['group_id'] );
    59 
    60     } elseif ( isset( $_GET['mode'] ) && isset( $_GET['group_id'] ) && 'edit_group' == $_GET['mode'] ) {
    61         xprofile_admin_manage_group( $_GET['group_id'] );
    62 
    63     } else {
    64         xprofile_admin_screen( $message, $type );
    65     }
    66 }
    67 
    68 /**
    69  * Output the main XProfile management screen
    70  *
    71  * @since 2.3.0
    72  *
    73  * @param string $message Feedback message.
    74  * @param string $type    Feedback type.
    75  *
    76  * @todo Improve error message output
    77  */
    78 function xprofile_admin_screen( $message = '', $type = 'error' ) {
    79 
    80     // Validate type.
    81     $type = preg_replace( '|[^a-z]|i', '', $type );
    82 
    83     // Get all of the profile groups & fields.
    84     $groups = bp_xprofile_get_groups( array(
    85         'fetch_fields' => true
    86     ) ); ?>
    87 
    88     <div class="wrap">
    89 
    90         <h1>
    91             <?php _ex( 'Profile Fields', 'Settings page header', 'buddypress'); ?>
    92             <a id="add_group" class="add-new-h2" href="users.php?page=bp-profile-setup&amp;mode=add_group"><?php _e( 'Add New Field Group', 'buddypress' ); ?></a>
    93         </h1>
    94 
    95         <form action="" id="profile-field-form" method="post">
    96 
    97             <?php
    98 
    99             wp_nonce_field( 'bp_reorder_fields', '_wpnonce_reorder_fields'        );
    100             wp_nonce_field( 'bp_reorder_groups', '_wpnonce_reorder_groups', false );
    101 
    102             if ( !empty( $message ) ) :
    103                 $type = ( $type == 'error' ) ? 'error' : 'updated'; ?>
    104 
    105                 <div id="message" class="<?php echo $type; ?> fade">
    106                     <p><?php echo esc_html( $message ); ?></p>
    107                 </div>
    108 
    109             <?php endif; ?>
    110 
    111             <div id="tabs">
    112                 <ul id="field-group-tabs">
    113 
    114                     <?php if ( !empty( $groups ) ) : foreach ( $groups as $group ) : ?>
    115 
    116                         <li id="group_<?php echo esc_attr( $group->id ); ?>">
    117                             <a href="#tabs-<?php echo esc_attr( $group->id ); ?>" class="ui-tab">
    118                                 <?php
    119                                 /** This filter is documented in bp-xprofile/bp-xprofile-template.php */
    120                                 echo esc_html( apply_filters( 'bp_get_the_profile_group_name', $group->name ) );
    121                                 ?>
    122 
    123                                 <?php if ( !$group->can_delete ) : ?>
    124                                     <?php _e( '(Primary)', 'buddypress'); ?>
    125                                 <?php endif; ?>
    126 
    127                             </a>
    128                         </li>
    129 
    130                     <?php endforeach; endif; ?>
    131 
    132                 </ul>
    133 
    134                 <?php if ( !empty( $groups ) ) : foreach ( $groups as $group ) : ?>
    135 
    136                     <noscript>
    137                         <h3><?php
    138                         /** This filter is documented in bp-xprofile/bp-xprofile-template.php */
    139                         echo esc_html( apply_filters( 'bp_get_the_profile_group_name', $group->name ) );
    140                         ?></h3>
    141                     </noscript>
    142 
    143                     <div id="tabs-<?php echo esc_attr( $group->id ); ?>" class="tab-wrapper">
    144                         <div class="tab-toolbar">
    145                             <div class="tab-toolbar-left">
    146                                 <a class="button-primary" href="users.php?page=bp-profile-setup&amp;group_id=<?php echo esc_attr( $group->id ); ?>&amp;mode=add_field"><?php _e( 'Add New Field', 'buddypress' ); ?></a>
    147                                 <a class="button edit" href="users.php?page=bp-profile-setup&amp;mode=edit_group&amp;group_id=<?php echo esc_attr( $group->id ); ?>"><?php _e( 'Edit Group', 'buddypress' ); ?></a>
    148 
    149                                 <?php if ( $group->can_delete ) : ?>
    150 
    151                                     <div class="delete-button">
    152                                         <a class="confirm submitdelete deletion ajax-option-delete" href="users.php?page=bp-profile-setup&amp;mode=delete_group&amp;group_id=<?php echo esc_attr( $group->id ); ?>"><?php _e( 'Delete Group', 'buddypress' ); ?></a>
    153                                     </div>
    154 
    155                                 <?php endif; ?>
    156 
    157                                 <?php
    158 
    159                                 /**
    160                                  * Fires at end of action buttons in xprofile management admin.
    161                                  *
    162                                  * @since 2.2.0
    163                                  *
    164                                  * @param BP_XProfile_Group $group BP_XProfile_Group object
    165                                  *                                 for the current group.
    166                                  */
    167                                 do_action( 'xprofile_admin_group_action', $group ); ?>
    168 
    169                             </div>
    170                         </div>
    171 
    172                         <?php if ( ! empty( $group->description ) ) : ?>
    173 
    174                             <p><?php
    175                             /** This filter is documented in bp-xprofile/bp-xprofile-template.php */
    176                             echo esc_html( apply_filters( 'bp_get_the_profile_group_description', $group->description ) );
    177                             ?></p>
    178 
    179                         <?php endif; ?>
    180 
    181                         <fieldset id="<?php echo esc_attr( $group->id ); ?>" class="connectedSortable field-group">
    182                             <legend class="screen-reader-text"><?php
    183                             /** This filter is documented in bp-xprofile/bp-xprofile-template.php */
    184                             printf( esc_html__( 'Fields for "%s" Group', 'buddypress' ), apply_filters( 'bp_get_the_profile_group_name', $group->name ) );
    185                             ?></legend>
    186 
    187                             <?php
    188 
    189                             if ( !empty( $group->fields ) ) :
    190                                 foreach ( $group->fields as $field ) {
    191 
    192                                     // Load the field.
    193                                     $field = xprofile_get_field( $field->id );
    194 
    195                                     $class = '';
    196                                     if ( empty( $field->can_delete ) ) {
    197                                         $class = ' core nodrag';
    198                                     }
    199 
    200                                     /**
    201                                      * This function handles the WYSIWYG profile field
    202                                      * display for the xprofile admin setup screen.
    203                                      */
    204                                     xprofile_admin_field( $field, $group, $class );
    205 
    206                                 } // end for
    207 
    208                             else : // !$group->fields ?>
    209 
    210                                 <p class="nodrag nofields"><?php _e( 'There are no fields in this group.', 'buddypress' ); ?></p>
    211 
    212                             <?php endif; // End $group->fields. ?>
    213 
    214                         </fieldset>
    215 
    216                         <?php if ( empty( $group->can_delete ) ) : ?>
    217 
    218                             <p><?php esc_html_e( '* Fields in this group appear on the signup page.', 'buddypress' ); ?></p>
    219 
    220                         <?php endif; ?>
    221 
    222                     </div>
    223 
    224                 <?php endforeach; else : ?>
    225 
    226                     <div id="message" class="error"><p><?php _e( 'You have no groups.', 'buddypress' ); ?></p></div>
    227                     <p><a href="users.php?page=bp-profile-setup&amp;mode=add_group"><?php _e( 'Add New Group', 'buddypress' ); ?></a></p>
    228 
    229                 <?php endif; ?>
    230 
    231             </div>
    232         </form>
    233     </div>
    234 
    235 <?php
    236 }
    237 
    238 /**
    239  * Handles the adding or editing of groups.
    240  *
    241  * @param int|null $group_id Group ID to manage.
    242  */
    243 function xprofile_admin_manage_group( $group_id = null ) {
    244     global $message, $type;
    245 
    246     // Get the field group.
    247     $group = new BP_XProfile_Group( $group_id );
    248 
    249     // Updating.
    250     if ( isset( $_POST['save_group'] ) ) {
    251 
    252         // Validate $_POSTed data.
    253         if ( BP_XProfile_Group::admin_validate() ) {
    254 
    255             // Set the group name.
    256             $group->name = $_POST['group_name'];
    257 
    258             // Set the group description.
    259             if ( ! empty( $_POST['group_description'] ) ) {
    260                 $group->description = $_POST['group_description'];
    261             } else {
    262                 $group->description = '';
    263             }
    264 
    265             // Attempt to save the field group.
    266             if ( false === $group->save() ) {
    267                 $message = __( 'There was an error saving the group. Please try again.', 'buddypress' );
    268                 $type    = 'error';
    269 
    270             // Save successful.
    271             } else {
    272                 $message = __( 'The group was saved successfully.', 'buddypress' );
    273                 $type    = 'success';
    274 
    275                 // @todo remove these old options
    276                 if ( 1 == $group_id ) {
    277                     bp_update_option( 'bp-xprofile-base-group-name', $group->name );
    278                 }
    279 
    280                 /**
    281                  * Fires at the end of the group adding/saving process, if successful.
    282                  *
    283                  * @since 1.0.0
    284                  *
    285                  * @param BP_XProfile_Group $group Current BP_XProfile_Group object.
    286                  */
    287                 do_action( 'xprofile_groups_saved_group', $group );
    288             }
    289 
    290             unset( $_GET['mode'] );
    291             xprofile_admin( $message, $type );
    292 
    293         } else {
    294             $group->render_admin_form( $message );
    295         }
    296     } else {
    297         $group->render_admin_form();
    298     }
    299 }
    300 
    301 /**
    302  * Handles the deletion of profile data groups.
    303  *
    304  * @param int $group_id ID of the group to delete.
    305  */
    306 function xprofile_admin_delete_group( $group_id ) {
    307     global $message, $type;
    308 
    309     $group = new BP_XProfile_Group( $group_id );
    310 
    311     if ( !$group->delete() ) {
    312         $message = __( 'There was an error deleting the group. Please try again.', 'buddypress' );
    313         $type    = 'error';
    314     } else {
    315         $message = __( 'The group was deleted successfully.', 'buddypress' );
    316         $type    = 'success';
    317 
    318         /**
    319          * Fires at the end of group deletion process, if successful.
    320          *
    321          * @since 1.0.0
    322          *
    323          * @param BP_XProfile_Group $group Current BP_XProfile_Group object.
    324          */
    325         do_action( 'xprofile_groups_deleted_group', $group );
    326     }
    327 
    328     unset( $_GET['mode'] );
    329     xprofile_admin( $message, $type );
    330 }
    331 
    332 /**
    333  * Handles the adding or editing of profile field data for a user.
    334  *
    335  * @param int      $group_id ID of the group.
    336  * @param int|null $field_id ID of the field being managed.
    337  */
    338 function xprofile_admin_manage_field( $group_id, $field_id = null ) {
    339     global $wpdb, $message, $groups;
    340 
    341     $bp = buddypress();
    342 
    343     if ( is_null( $field_id ) ) {
    344         $field = new BP_XProfile_Field();
    345     } else {
    346         $field = xprofile_get_field( $field_id );
    347     }
    348 
    349     $field->group_id = $group_id;
    350 
    351     if ( isset( $_POST['saveField'] ) ) {
    352         if ( BP_XProfile_Field::admin_validate() ) {
    353             $field->is_required = $_POST['required'];
    354             $field->type        = $_POST['fieldtype'];
    355             $field->name        = $_POST['title'];
    356 
    357             if ( ! empty( $_POST['description'] ) ) {
    358                 $field->description = $_POST['description'];
    359             } else {
    360                 $field->description = '';
    361             }
    362 
    363             if ( ! empty( $_POST["sort_order_{$field->type}"] ) ) {
    364                 $field->order_by = $_POST["sort_order_{$field->type}"];
    365             }
    366 
    367             $field->field_order = $wpdb->get_var( $wpdb->prepare( "SELECT field_order FROM {$bp->profile->table_name_fields} WHERE id = %d", $field_id ) );
    368             if ( empty( $field->field_order ) || is_wp_error( $field->field_order ) ) {
    369                 $field->field_order = (int) $wpdb->get_var( $wpdb->prepare( "SELECT max(field_order) FROM {$bp->profile->table_name_fields} WHERE group_id = %d", $group_id ) );
    370                 $field->field_order++;
    371             }
    372 
    373             // For new profile fields, set the $field_id. For existing profile
    374             // fields, this will overwrite $field_id with the same value.
    375             $field_id = $field->save();
    376 
    377             if ( empty( $field_id ) ) {
    378                 $message = __( 'There was an error saving the field. Please try again.', 'buddypress' );
    379                 $type    = 'error';
    380             } else {
    381                 $message = __( 'The field was saved successfully.', 'buddypress' );
    382                 $type    = 'success';
    383 
    384                 // @todo remove these old options
    385                 if ( 1 == $field_id ) {
    386                     bp_update_option( 'bp-xprofile-fullname-field-name', $field->name );
    387                 }
    388 
    389                 // Set member types.
    390                 if ( isset( $_POST['has-member-types'] ) ) {
    391                     $member_types = array();
    392                     if ( isset( $_POST['member-types'] ) ) {
    393                         $member_types = stripslashes_deep( $_POST['member-types'] );
    394                     }
    395 
    396                     $field->set_member_types( $member_types );
    397                 }
    398 
    399                 // Validate default visibility.
    400                 if ( ! empty( $_POST['default-visibility'] ) && in_array( $_POST['default-visibility'], wp_list_pluck( bp_xprofile_get_visibility_levels(), 'id' ) ) ) {
    401                     bp_xprofile_update_field_meta( $field_id, 'default_visibility', $_POST['default-visibility'] );
    402                 }
    403 
    404                 // Validate custom visibility.
    405                 if ( ! empty( $_POST['allow-custom-visibility'] ) && in_array( $_POST['allow-custom-visibility'], array( 'allowed', 'disabled' ) ) ) {
    406                     bp_xprofile_update_field_meta( $field_id, 'allow_custom_visibility', $_POST['allow-custom-visibility'] );
    407                 }
    408 
    409                 // Validate signup.
    410                 if ( ! empty( $_POST['signup-position'] ) ) {
    411                     bp_xprofile_update_field_meta( $field_id, 'signup_position', (int) $_POST['signup-position'] );
    412                 } else {
    413                     bp_xprofile_delete_meta( $field_id, 'field', 'signup_position' );
    414                 }
    415 
    416                 /**
    417                  * Fires at the end of the process to save a field for a user, if successful.
    418                  *
    419                  * @since 1.0.0
    420                  *
    421                  * @param BP_XProfile_Field $field Current BP_XProfile_Field object.
    422                  */
    423                 do_action( 'xprofile_fields_saved_field', $field );
    424 
    425                 $groups = bp_xprofile_get_groups();
    426             }
    427 
    428             unset( $_GET['mode'] );
    429 
    430             xprofile_admin( $message, $type );
    431 
    432         } else {
    433             $field->render_admin_form( $message );
    434         }
    435     } else {
    436         $field->render_admin_form();
    437     }
    438 }
    439 
    440 /**
    441  * Handles the deletion of a profile field (or field option).
    442  *
    443  * @since 1.0.0
    444  * @global string $message The feedback message to show.
    445  * @global $type The type of feedback message to show.
    446  *
    447  * @param int    $field_id    The field to delete.
    448  * @param string $field_type  The type of field being deleted.
    449  * @param bool   $delete_data Should the field data be deleted too.
    450  */
    451 function xprofile_admin_delete_field( $field_id, $field_type = 'field', $delete_data = false ) {
    452     global $message, $type;
    453 
    454     // Switch type to 'option' if type is not 'field'.
    455     // @todo trust this param.
    456     $field_type  = ( 'field' == $field_type ) ? __( 'field', 'buddypress' ) : __( 'option', 'buddypress' );
    457     $field       = xprofile_get_field( $field_id );
    458 
    459     if ( !$field->delete( (bool) $delete_data ) ) {
    460         $message = sprintf( __( 'There was an error deleting the %s. Please try again.', 'buddypress' ), $field_type );
    461         $type    = 'error';
    462     } else {
    463         $message = sprintf( __( 'The %s was deleted successfully!', 'buddypress' ), $field_type );
    464         $type    = 'success';
    465 
    466         /**
    467          * Fires at the end of the field deletion process, if successful.
    468          *
    469          * @since 1.0.0
    470          *
    471          * @param BP_XProfile_Field $field Current BP_XProfile_Field object.
    472          */
    473         do_action( 'xprofile_fields_deleted_field', $field );
    474     }
    475 
    476     unset( $_GET['mode'] );
    477     xprofile_admin( $message, $type );
    478 }
    479 
    480 /**
    481  * Handles the ajax reordering of fields within a group.
    482  *
    483  * @since 1.0.0
    484  */
    485 function xprofile_ajax_reorder_fields() {
    486 
    487     // Check the nonce.
    488     check_admin_referer( 'bp_reorder_fields', '_wpnonce_reorder_fields' );
    489 
    490     if ( empty( $_POST['field_order'] ) ) {
    491         return false;
    492     }
    493 
    494     parse_str( $_POST['field_order'], $order );
    495 
    496     $field_group_id = $_POST['field_group_id'];
    497 
    498     foreach ( (array) $order['draggable_field'] as $position => $field_id ) {
    499         xprofile_update_field_position( (int) $field_id, (int) $position, (int) $field_group_id );
    500     }
    501 }
    502 add_action( 'wp_ajax_xprofile_reorder_fields', 'xprofile_ajax_reorder_fields' );
    503 
    504 /**
    505  * Handles the reordering of field groups.
    506  *
    507  * @since 1.5.0
    508  */
    509 function xprofile_ajax_reorder_field_groups() {
    510 
    511     // Check the nonce.
    512     check_admin_referer( 'bp_reorder_groups', '_wpnonce_reorder_groups' );
    513 
    514     if ( empty( $_POST['group_order'] ) ) {
    515         return false;
    516     }
    517 
    518     parse_str( $_POST['group_order'], $order );
    519 
    520     foreach ( (array) $order['group'] as $position => $field_group_id ) {
    521         xprofile_update_field_group_position( (int) $field_group_id, (int) $position );
    522     }
    523 }
    524 add_action( 'wp_ajax_xprofile_reorder_groups', 'xprofile_ajax_reorder_field_groups' );
    525 
    526 /**
    527  * Handles the WYSIWYG display of each profile field on the edit screen.
    528  *
    529  * @since 1.5.0
    530  *
    531  * @param object $admin_field Admin field.
    532  * @param object $admin_group Admin group object.
    533  * @param string $class       Classes to append to output.
    534  */
    535 function xprofile_admin_field( $admin_field, $admin_group, $class = '' ) {
    536     global $field;
    537 
    538     $field = $admin_field; ?>
    539 
    540     <fieldset id="draggable_field_<?php echo esc_attr( $field->id ); ?>"class="sortable<?php echo ' ' . $field->type; if ( !empty( $class ) ) echo ' ' . $class; ?>">
    541         <legend>
    542             <span>
    543                 <?php bp_the_profile_field_name(); ?>
    544 
    545                 <?php if ( empty( $field->can_delete )                                    ) : ?><?php esc_html_e( '(Primary)',  'buddypress' ); endif; ?>
    546                 <?php bp_the_profile_field_required_label(); ?>
    547                 <?php if ( bp_xprofile_get_meta( $field->id, 'field', 'signup_position' ) ) : ?><?php esc_html_e( '(Sign-up)',  'buddypress' ); endif; ?>
    548                 <?php if ( bp_get_member_types() ) : echo $field->get_member_type_label(); endif; ?>
    549 
    550                 <?php
    551 
    552                 /**
    553                  * Fires at end of legend above the name field in base xprofile group.
    554                  *
    555                  * @since 2.2.0
    556                  *
    557                  * @param BP_XProfile_Field $field Current BP_XProfile_Field
    558                  *                                 object being rendered.
    559                  */
    560                 do_action( 'xprofile_admin_field_name_legend', $field ); ?>
    561             </span>
    562         </legend>
    563         <div class="field-wrapper">
    564 
    565             <?php
    566             if ( in_array( $field->type, array_keys( bp_xprofile_get_field_types() ) ) ) {
    567                 $field_type = bp_xprofile_create_field_type( $field->type );
    568                 $field_type->admin_field_html();
    569             } else {
    570 
    571                 /**
    572                  * Fires after the input if the current field is not in default field types.
    573                  *
    574                  * @since 1.5.0
    575                  *
    576                  * @param BP_XProfile_Field $field Current BP_XProfile_Field
    577                  *                                 object being rendered.
    578                  * @param int               $value Integer 1.
    579                  */
    580                 do_action( 'xprofile_admin_field', $field, 1 );
    581             }
    582             ?>
    583 
    584             <?php if ( $field->description ) : ?>
    585 
    586                 <p class="description"><?php echo esc_attr( $field->description ); ?></p>
    587 
    588             <?php endif; ?>
    589 
    590             <div class="actions">
    591                 <a class="button edit" href="users.php?page=bp-profile-setup&amp;group_id=<?php echo esc_attr( $admin_group->id ); ?>&amp;field_id=<?php echo esc_attr( $field->id ); ?>&amp;mode=edit_field"><?php _e( 'Edit', 'buddypress' ); ?></a>
    592 
    593                 <?php if ( $field->can_delete ) : ?>
    594 
    595                     <div class="delete-button">
    596                         <a class="confirm submit-delete deletion" href="users.php?page=bp-profile-setup&amp;field_id=<?php echo esc_attr( $field->id ); ?>&amp;mode=delete_field"><?php _e( 'Delete', 'buddypress' ); ?></a>
    597                     </div>
    598 
    599                 <?php endif; ?>
    600 
    601                 <?php
    602 
    603                 /**
    604                  * Fires at end of field management links in xprofile management admin.
    605                  *
    606                  * @since 2.2.0
    607                  *
    608                  * @param BP_XProfile_Group $group BP_XProfile_Group object
    609                  *                                 for the current group.
    610                  */
    611                 do_action( 'xprofile_admin_field_action', $field ); ?>
    612 
    613             </div>
    614         </div>
    615     </fieldset>
    616 
    617 <?php
    618 }
    619 
    620 /**
    621  * Print <option> elements containing the xprofile field types.
    622  *
    623  * @since 2.0.0
    624  *
    625  * @param string $select_field_type The name of the field type that should be selected.
    626  *                                  Will defaults to "textbox" if NULL is passed.
    627  */
    628 function bp_xprofile_admin_form_field_types( $select_field_type ) {
    629     $categories = array();
    630 
    631     if ( is_null( $select_field_type ) ) {
    632         $select_field_type = 'textbox';
    633     }
    634 
    635     // Sort each field type into its category.
    636     foreach ( bp_xprofile_get_field_types() as $field_name => $field_class ) {
    637         $field_type_obj = new $field_class;
    638         $the_category   = $field_type_obj->category;
    639 
    640         // Fallback to a catch-all if category not set.
    641         if ( ! $the_category ) {
    642             $the_category = _x( 'Other', 'xprofile field type category', 'buddypress' );
    643         }
    644 
    645         if ( isset( $categories[$the_category] ) ) {
    646             $categories[$the_category][] = array( $field_name, $field_type_obj );
    647         } else {
    648             $categories[$the_category] = array( array( $field_name, $field_type_obj ) );
    649         }
    650     }
    651 
    652     // Sort the categories alphabetically. ksort()'s SORT_NATURAL is only in PHP >= 5.4 :((.
    653     uksort( $categories, 'strnatcmp' );
    654 
    655     // Loop through each category and output form <options>.
    656     foreach ( $categories as $category => $fields ) {
    657         printf( '<optgroup label="%1$s">', esc_attr( $category ) );  // Already i18n'd in each profile type class.
    658 
    659         // Sort these fields types alphabetically.
    660         uasort( $fields, create_function( '$a, $b', 'return strnatcmp( $a[1]->name, $b[1]->name );' ) );
    661 
    662         foreach ( $fields as $field_type_obj ) {
    663             $field_name     = $field_type_obj[0];
    664             $field_type_obj = $field_type_obj[1];
    665 
    666             printf( '<option value="%1$s" %2$s>%3$s</option>', esc_attr( $field_name ), selected( $select_field_type, $field_name, false ), esc_html( $field_type_obj->name ) );
    667         }
    668 
    669         printf( '</optgroup>' );
    670     }
    671 }
    67211
    67312if ( ! class_exists( 'BP_XProfile_User_Admin' ) ) :
     
    1139478}
    1140479endif; // End class_exists check.
    1141 
    1142 // Load the xprofile user admin.
    1143 add_action( 'bp_init', array( 'BP_XProfile_User_Admin', 'register_xprofile_user_admin' ), 11 );
Note: See TracChangeset for help on using the changeset viewer.