Skip to:
Content

BuddyPress.org

Changeset 12886


Ignore:
Timestamp:
04/16/2021 05:32:04 AM (5 months ago)
Author:
imath
Message:

Use drag and drop into the xProfile Admin UI to to set signup fields

  • Create a new "Signup Fields" tab to list signup fields. By default this tab will include the primary field (Name).
  • The install process has been adapted to make sure this is the case.
  • An upgrade task is migrating fields into the primary group as signup fields.
  • Make it possible to drag fields from any group into the "Signup Fields" one.
  • Make it possible to use drag and drop to reorder signup fields from the corresponding tab.
  • Include a link on each field entry (except the primary one) to remove the field from this "Signup Fields" field group.

Props johnjamesjacoby, boonebgorges, DJPaul, Offereins

See #6347

Location:
trunk/src
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/admin/bp-core-admin-functions.php

    r12780 r12886  
    587587
    588588        case 'bp-profile-overview':
    589             $retval = __( 'Your users will distinguish themselves through their profile page. Create relevant profile fields that will show on each users profile.', 'buddypress' ) . '<br /><br />' . __( 'Note: Any fields in the first group will appear on the signup page.', 'buddypress' );
     589            $retval = __( 'Your users will distinguish themselves through their profile page. Create relevant profile fields that will show on each users profile.', 'buddypress' ) . '<br /><br />' . __( 'Note: Drag fields from other groups and drop them on the "Signup Fields" tab to include them into your registration form.', 'buddypress' );
    590590            break;
    591591
  • trunk/src/bp-core/admin/bp-core-admin-schema.php

    r12617 r12886  
    390390        if ( ! $wpdb->get_var( "SELECT id FROM {$bp_prefix}bp_xprofile_meta WHERE id = 1" ) ) {
    391391            $insert_sql[] = "INSERT INTO {$bp_prefix}bp_xprofile_meta ( object_id, object_type, meta_key, meta_value ) VALUES ( 1, 'field', 'allow_custom_visibility', 'disabled' );";
     392            $insert_sql[] = "INSERT INTO {$bp_prefix}bp_xprofile_meta ( object_id, object_type, meta_key, meta_value ) VALUES ( 1, 'field', 'signup_position', 1 );";
    392393        }
    393394    }
  • trunk/src/bp-core/bp-core-update.php

    r12851 r12886  
    599599 *
    600600 * - Edit the `new_avatar` activity type's component to `members`.
     601 * - Upgrade Primary xProfile Group's fields to signup fields.
    601602 *
    602603 * @since 8.0.0
     
    622623        )
    623624    );
     625
     626    if ( bp_get_signup_allowed() ) {
     627        // Get the Primary Group's fields.
     628        $signup_fields = $wpdb->get_col( "SELECT id FROM {$bp_prefix}bp_xprofile_fields WHERE group_id = 1 ORDER BY field_order ASC" );
     629
     630        // Migrate potential signup fields.
     631        if ( $signup_fields ) {
     632            $signup_position = 0;
     633            foreach ( $signup_fields as $signup_field_id ) {
     634                $signup_position += 1;
     635
     636                $wpdb->insert(
     637                    $bp_prefix . 'bp_xprofile_meta',
     638                    array(
     639                        'object_id'   => $signup_field_id,
     640                        'object_type' => 'field',
     641                        'meta_key'    => 'signup_position',
     642                        'meta_value'  => $signup_position,
     643                    ),
     644                    array(
     645                        '%d',
     646                        '%s',
     647                        '%s',
     648                        '%d',
     649                    )
     650                );
     651            }
     652        }
     653    }
    624654}
    625655
  • trunk/src/bp-xprofile/admin/css/admin-rtl.css

    r12660 r12886  
    6161    border-bottom: 1px solid transparent;
    6262    color: #000;
     63}
     64
     65li#signup-group a:focus {
     66    box-shadow: none;
    6367}
    6468
  • trunk/src/bp-xprofile/admin/css/admin.css

    r12660 r12886  
    6161    border-bottom: 1px solid transparent;
    6262    color: #000;
     63}
     64
     65li#signup-group a:focus {
     66    box-shadow: none;
    6367}
    6468
  • trunk/src/bp-xprofile/admin/js/admin.js

    r12868 r12886  
    9797
    9898    // Show/hides metaboxes according to selected field type supports.
    99     jQuery( '#field-type-visibiliy-metabox, #field-type-required-metabox, #field-type-autolink-metabox, #field-type-member-types' ).show();
     99    jQuery( '#field-type-visibiliy-metabox, #field-type-required-metabox, #field-type-autolink-metabox, #field-type-member-types, #field-signup-position-metabox' ).show();
    100100    if ( -1 !== XProfileAdmin.hide_required_metabox.indexOf( forWhat ) ) {
    101101        jQuery( '#field-type-required-metabox' ).hide();
     102    }
     103
     104    if ( -1 !== XProfileAdmin.hide_signup_position_metabox.indexOf( forWhat ) ) {
     105        jQuery( '#field-signup-position-metabox' ).hide();
    102106    }
    103107
     
    208212
    209213jQuery( function() {
     214    var isMovingToSignups = false;
    210215
    211216    // Set focus in Field Title, if we're on the right page.
     
    249254        axis: 'x',
    250255        opacity: 1,
    251         items: 'li',
     256        items: 'li:not(.not-sortable)',
    252257        tolerance: 'intersect',
    253258
     
    271276
    272277        update: function() {
     278            if ( isMovingToSignups ) {
     279                return false;
     280            }
     281
    273282            jQuery.post( ajaxurl, {
    274283                action: 'xprofile_reorder_fields',
     
    349358            drop: function( ev, ui ) {
    350359                var $item = jQuery(this), // The tab
    351                     $list = jQuery( $item.find( 'a' ).attr( 'href' ) ).find( '.connectedSortable' ); // The tab body
     360                    $list = jQuery( $item.find( 'a' ).attr( 'href' ) ).find( '.connectedSortable' ), // The tab body
     361                    dropInGroup = function( fieldId ) {
     362                        var fieldOrder, postData = {
     363                            action: 'xprofile_reorder_fields',
     364                            'cookie': encodeURIComponent(document.cookie),
     365                            '_wpnonce_reorder_fields': jQuery( 'input#_wpnonce_reorder_fields' ).val()
     366                        };
     367
     368                        // Select new tab as current.
     369                        $tabs.tabs( 'option', 'active', $tab_items.index( $item ) );
     370
     371                        // Refresh $list variable.
     372                        $list = jQuery( $item.find( 'a' ).attr( 'href' ) ).find( '.connectedSortable' );
     373                        jQuery($list).find( 'p.nofields' ).hide( 'slow' );
     374
     375                        jQuery.extend( postData, {
     376                            'field_group_id': jQuery( $list ).attr( 'id' ),
     377                            'group_tab': jQuery( $item ).prop( 'id' )
     378                        } );
     379
     380                        // Set serialized data
     381                        fieldOrder = jQuery( $list ).sortable( 'serialize' );
     382
     383                        if ( fieldId ) {
     384                            var serializedField = fieldId.replace( 'draggable_field_', 'draggable_signup_field[]=' );
     385                            if ( fieldOrder ) {
     386                                fieldOrder += '&' + serializedField;
     387                            } else {
     388                                fieldOrder = serializedField;
     389                            }
     390
     391                            jQuery.extend( postData, {
     392                                'new_signup_field_id': serializedField
     393                            } );
     394                        } else {
     395                            // Show new placement.
     396                            jQuery( this ).appendTo( $list ).show( 'slow' ).animate( { opacity: '1' }, 500 );
     397
     398                            // Refresh $list variable.
     399                            $list = jQuery( $item.find( 'a' ).attr( 'href' ) ).find( '.connectedSortable' );
     400
     401                            // Reset serialized data.
     402                            fieldOrder = jQuery( $list ).sortable( 'serialize' );
     403
     404                            jQuery.extend( postData, {
     405                                'field_group_id': jQuery( $list ).attr( 'id' )
     406                            } );
     407                        }
     408
     409                        jQuery.extend( postData, {
     410                            'field_order': fieldOrder
     411                        } );
     412
     413                        // Ajax update field locations and orders.
     414                        jQuery.post( ajaxurl, postData, function( response ) {
     415                            if ( response.data && response.data.signup_field ) {
     416                                jQuery( $list ).append( response.data.signup_field );
     417
     418                                if ( response.data.field_id ) {
     419                                    jQuery( '#draggable_field_' + response.data.field_id + ' legend' ).append(
     420                                        jQuery( '<span></span>' ).addClass( 'bp-signup-field-label' ).html( XProfileAdmin.signup_info )
     421                                    );
     422                                }
     423                            }
     424                        }, 'json' ).always( function() {
     425                            isMovingToSignups = false;
     426                        } );
     427                    };
    352428
    353429                // Remove helper class.
    354430                jQuery($item).removeClass( 'drop-candidate' );
    355431
    356                 // Hide field, change selected tab, and show new placement.
    357                 ui.draggable.hide( 'slow', function() {
    358 
    359                     // Select new tab as current.
    360                     $tabs.tabs( 'option', 'active', $tab_items.index( $item ) );
    361 
    362                     // Show new placement.
    363                     jQuery(this).appendTo($list).show( 'slow' ).animate( {opacity: '1'}, 500 );
    364 
    365                     // Refresh $list variable.
    366                     $list = jQuery( $item.find( 'a' ).attr( 'href' ) ).find( '.connectedSortable' );
    367                     jQuery($list).find( 'p.nofields' ).hide( 'slow' );
    368 
    369                     // Ajax update field locations and orders.
    370                     jQuery.post( ajaxurl, {
    371                         action: 'xprofile_reorder_fields',
    372                         'cookie': encodeURIComponent(document.cookie),
    373                         '_wpnonce_reorder_fields': jQuery( 'input#_wpnonce_reorder_fields' ).val(),
    374                         'field_order': jQuery( $list ).sortable( 'serialize' ),
    375                         'field_group_id': jQuery( $list ).attr( 'id' )
    376                     },
    377                     function() {} );
    378                 });
     432                if ( 'signup-group' === jQuery( $item ).prop( 'id' ) ) {
     433                    // Simply add the field to signup ones.
     434                    dropInGroup( ui.draggable.prop( 'id' ) );
     435
     436                } else if ( ! ui.draggable.prop( 'id' ).match( /draggable_signup_field_([0-9]+)/ ) ) {
     437                    // Hide field, change selected tab, and show new placement.
     438                    ui.draggable.hide( 'slow', dropInGroup );
     439                }
    379440            },
    380441            over: function() {
     442                isMovingToSignups = true;
    381443                jQuery(this).addClass( 'drop-candidate' );
    382444            },
    383445            out: function() {
    384446                jQuery(this).removeClass( 'drop-candidate' );
     447                isMovingToSignups = false;
    385448            }
    386449        });
    387450    }
     451
     452    jQuery( '#signup-fields' ).on( 'click', '.removal', function( e ) {
     453        e.preventDefault();
     454
     455        var fieldId = jQuery( e.target ).attr( 'href' ).replace( '#remove_field-', '' ),
     456            container = jQuery( e.target ).closest( '#draggable_signup_field_' + fieldId );
     457
     458        if ( ! fieldId ) {
     459            return false;
     460        }
     461
     462        // Ajax update field locations and orders.
     463        jQuery.post( ajaxurl, {
     464            action: 'xprofile_remove_signup_field',
     465            'cookie': encodeURIComponent(document.cookie),
     466            '_wpnonce_reorder_fields': jQuery( 'input#_wpnonce_reorder_fields' ).val(),
     467            'signup_field_id': fieldId
     468        }, function( response ) {
     469            if ( response.success ) {
     470                jQuery( container ).remove();
     471                jQuery( '#draggable_field_' + fieldId + ' .bp-signup-field-label' ).remove();
     472            }
     473        }, 'json' );
     474    } );
    388475});
  • trunk/src/bp-xprofile/bp-xprofile-admin.php

    r12881 r12886  
    189189                    <?php endforeach; endif; ?>
    190190
     191                    <?php if ( bp_get_signup_allowed() ) : ?>
     192                        <li id="signup-group" class="not-sortable last">
     193                            <a href="#tabs-signup-group" class="ui-tab">
     194                                <?php esc_html_e( 'Signup Fields', 'buddypress' ); ?>
     195                            </a>
     196                        </li>
     197                    <?php endif; ?>
     198
    191199                </ul>
    192200
     
    295303                        </fieldset>
    296304
    297                         <?php if ( empty( $group->can_delete ) ) : ?>
    298 
    299                             <p><?php esc_html_e( '* Fields in this group appear on the signup page.', 'buddypress' ); ?></p>
    300 
    301                         <?php endif; ?>
    302 
    303305                    </div>
    304306
     
    310312                <?php endif; ?>
    311313
     314                <?php
     315                // List fields to use into the signup form.
     316                if ( bp_get_signup_allowed() ) {
     317                    $signup_groups = bp_xprofile_get_groups(
     318                        array(
     319                            'fetch_fields'       => true,
     320                            'signup_fields_only' => true,
     321                        )
     322                    );
     323                    $has_signup_fields   = false;
     324                    $signup_fields       = array();
     325                    $signup_fields_order = bp_xprofile_get_signup_field_ids();
     326                    ?>
     327                    <div id="tabs-signup-group"" class="tab-wrapper">
     328                        <div class="tab-toolbar">
     329                            <p class="description"><?php esc_html_e( 'Drag fields from other groups and drop them on the above tab to include them into your registration form.', 'buddypress' ); ?></a>
     330                        </div>
     331                        <fieldset id="signup-fields" class="connectedSortable field-group" aria-live="polite" aria-atomic="true" aria-relevant="all">
     332                            <legend class="screen-reader-text">
     333                                <?php esc_html_e( 'Fields to use into the registration form', 'buddypress' );?>
     334                            </legend>
     335
     336                            <?php
     337                            if ( ! empty( $signup_groups ) ) {
     338                                foreach ( $signup_groups as $signup_group ) {
     339                                    if ( ! empty( $signup_group->fields ) ) {
     340                                        $has_signup_fields = true;
     341
     342                                        foreach ( $signup_group->fields as $signup_field ) {
     343                                            // Load the field.
     344                                            $_signup_field = xprofile_get_field( $signup_field, null, false );
     345
     346                                            /**
     347                                             * This function handles the WYSIWYG profile field
     348                                             * display for the xprofile admin setup screen.
     349                                             */
     350                                            $signup_fields[ $_signup_field->id ] = bp_xprofile_admin_get_signup_field( $_signup_field, $signup_group, '' );
     351                                        }
     352                                    }
     353                                }
     354
     355                                // Output signup fields according to their signup position.
     356                                foreach ( $signup_fields_order as $ordered_signup_field_id ) {
     357                                    if ( ! isset( $signup_fields[ $ordered_signup_field_id ] ) ) {
     358                                        continue;
     359                                    }
     360
     361                                    echo $signup_fields[ $ordered_signup_field_id ];
     362                                }
     363                            }
     364
     365                            if ( ! $has_signup_fields ) {
     366                                ?>
     367                                <p class="nodrag nofields"><?php esc_html_e( 'There are no registration fields set. The registration form uses the primary group by default.', 'buddypress' ); ?></p>
     368                                <?php
     369                            }
     370                            ?>
     371                        </fieldset>
     372
     373                        <p><?php esc_html_e( '* Fields in this group appear on the registration page.', 'buddypress' ); ?></p>
     374                    </div>
     375                    <?php
     376                }
     377                ?>
    312378            </div>
    313379        </form>
    314380    </div>
    315 
    316381<?php
    317382}
     
    581646
    582647                // Validate signup.
    583                 if ( ! empty( $_POST['signup-position'] ) ) {
    584                     bp_xprofile_update_field_meta( $field_id, 'signup_position', (int) $_POST['signup-position'] );
    585                 } else {
    586                     bp_xprofile_delete_meta( $field_id, 'field', 'signup_position' );
     648                if ( $field->field_type_supports( 'signup_position' ) ) {
     649                    if ( ! empty( $_POST['signup-position'] ) ) {
     650                        bp_xprofile_update_field_meta( $field_id, 'signup_position', (int) $_POST['signup-position'] );
     651                    } else {
     652                        bp_xprofile_delete_meta( $field_id, 'field', 'signup_position' );
     653                    }
    587654                }
    588655
     
    736803 *
    737804 * @since 1.0.0
     805 * @since 8.0.0 Returns a JSON object.
    738806 */
    739807function xprofile_ajax_reorder_fields() {
    740 
    741808    // Check the nonce.
    742809    check_admin_referer( 'bp_reorder_fields', '_wpnonce_reorder_fields' );
    743810
    744811    if ( empty( $_POST['field_order'] ) ) {
    745         return false;
    746     }
    747 
    748     parse_str( $_POST['field_order'], $order );
     812        return wp_send_json_error();
     813    }
    749814
    750815    $field_group_id = $_POST['field_group_id'];
    751 
    752     foreach ( (array) $order['draggable_field'] as $position => $field_id ) {
    753         xprofile_update_field_position( (int) $field_id, (int) $position, (int) $field_group_id );
     816    $group_tab      = '';
     817
     818    if ( isset( $_POST['group_tab'] ) && $_POST['group_tab'] ) {
     819        $group_tab = wp_unslash( $_POST['group_tab'] );
     820    }
     821
     822    if ( 'signup-fields' === $field_group_id ) {
     823        parse_str( $_POST['field_order'], $order );
     824        $fields = (array) $order['draggable_signup_field'];
     825        $fields = array_map( 'intval', $fields );
     826
     827        if ( isset( $_POST['new_signup_field_id'] ) && $_POST['new_signup_field_id'] ) {
     828            parse_str( $_POST['new_signup_field_id'], $signup_field );
     829            $signup_fields = (array) $signup_field['draggable_signup_field'];
     830        }
     831
     832        // Adding a new field to the registration form.
     833        if ( 'signup-group' === $group_tab ) {
     834            $field_id = (int) reset( $signup_fields );
     835
     836            // Load the field.
     837            $field = xprofile_get_field( $field_id, null, false );
     838
     839            if ( $field instanceof BP_XProfile_Field ) {
     840                // The field doesn't support the feature, stop right away!
     841                if ( ! $field->field_type_supports( 'signup_position' ) ) {
     842                    wp_send_json_error(
     843                        array(
     844                            'message' => __( 'This field cannot be inserted into the registration form.', 'buddypress' ),
     845                        )
     846                    );
     847                }
     848
     849                $signup_position = bp_xprofile_get_meta( $field->id, 'field', 'signup_position' );
     850
     851                if ( ! $signup_position ) {
     852                    $position = array_search( $field->id, $fields, true );
     853                    if ( false !== $position ) {
     854                        $position += 1;
     855                    } else {
     856                        $position = 1;
     857                    }
     858
     859                    // Set the signup position.
     860                    bp_xprofile_update_field_meta( $field->id, 'signup_position', $position );
     861
     862                    // Get the real Group object.
     863                    $group = xprofile_get_field_group( $field->id );
     864
     865                    // Gets the HTML Output of the signup field.
     866                    $signup_field = bp_xprofile_admin_get_signup_field( $field, $group );
     867
     868                    /**
     869                     * Fires once a signup field has been inserted.
     870                     *
     871                     * @since 8.0.0
     872                     */
     873                    do_action( 'bp_xprofile_inserted_signup_field' );
     874
     875                    // Send the signup field to output.
     876                    wp_send_json_success(
     877                        array(
     878                            'signup_field' => $signup_field,
     879                            'field_id'     => $field->id,
     880                        )
     881                    );
     882                } else {
     883                    wp_send_json_error(
     884                        array(
     885                            'message' => __( 'This field has been already added to the registration form.', 'buddypress' ),
     886                        )
     887                    );
     888                }
     889
     890            } else {
     891                wp_send_json_error();
     892            }
     893        } else {
     894            // it's a sort operation.
     895            foreach ( $fields as $position => $field_id ) {
     896                bp_xprofile_update_field_meta( (int) $field_id, 'signup_position', (int) $position + 1 );
     897            }
     898
     899            /**
     900             * Fires once the signup fields have been reordered.
     901             *
     902             * @since 8.0.0
     903             */
     904            do_action( 'bp_xprofile_reordered_signup_fields' );
     905
     906            wp_send_json_success();
     907        }
     908    } else {
     909        /**
     910         * @todo there's something going wrong here.
     911         * moving a field to another tab when there's only the fullname field fails.
     912         */
     913        parse_str( $_POST['field_order'], $order );
     914        $fields = (array) $order['draggable_field'];
     915
     916        foreach ( $fields as $position => $field_id ) {
     917            xprofile_update_field_position( (int) $field_id, (int) $position, (int) $field_group_id );
     918        }
     919
     920        wp_send_json_success();
    754921    }
    755922}
    756923add_action( 'wp_ajax_xprofile_reorder_fields', 'xprofile_ajax_reorder_fields' );
     924
     925/**
     926 * Removes a field from signup fields.
     927 *
     928 * @since 8.0.0
     929 */
     930function bp_xprofile_ajax_remove_signup_field() {
     931    // Check the nonce.
     932    check_admin_referer( 'bp_reorder_fields', '_wpnonce_reorder_fields' );
     933
     934    if ( ! isset( $_POST['signup_field_id'] ) || ! $_POST['signup_field_id'] ) {
     935        return wp_send_json_error();
     936    }
     937
     938    $signup_field_id = (int) wp_unslash( $_POST['signup_field_id'] );
     939
     940    // Validate the field ID.
     941    $signup_position = bp_xprofile_get_meta( $signup_field_id, 'field', 'signup_position' );
     942
     943    if ( ! $signup_position ) {
     944        wp_send_json_error();
     945    }
     946
     947    bp_xprofile_delete_meta( $signup_field_id, 'field', 'signup_position' );
     948
     949    /**
     950     * Fires when a signup field is removed from the signup form.
     951     *
     952     * @since 8.0.0
     953     */
     954    do_action( 'bp_xprofile_removed_signup_field' );
     955
     956    wp_send_json_success();
     957}
     958add_action( 'wp_ajax_xprofile_remove_signup_field', 'bp_xprofile_ajax_remove_signup_field' );
    757959
    758960/**
     
    782984 *
    783985 * @since 1.5.0
     986 * @since 8.0.0 Adds the `$is_signup` parameter.
    784987 *
    785988 * @param BP_XProfile_Field   $admin_field Admin field.
    786989 * @param object $admin_group Admin group object.
    787990 * @param string $class       Classes to append to output.
    788  */
    789 function xprofile_admin_field( $admin_field, $admin_group, $class = '' ) {
     991 * @param bool   $is_signup   Whether the admin field output is made inside the signup group.
     992 */
     993function xprofile_admin_field( $admin_field, $admin_group, $class = '', $is_signup = false ) {
    790994    global $field;
    791995
    792     $field = $admin_field;
     996    $field       = $admin_field;
     997    $fieldset_id = sprintf( 'draggable_field_%d', $field->id );
    793998
    794999    // Users admin URL.
     
    8101015            'field_id' => (int) $field->id
    8111016        ), $url . '#tabs-' . (int) $field->group_id );
    812     } ?>
    813 
    814     <fieldset id="draggable_field_<?php echo esc_attr( $field->id ); ?>" class="sortable<?php echo ' ' . $field->type; if ( !empty( $class ) ) echo ' ' . $class; ?>">
     1017    }
     1018
     1019    // Avoid duplicate IDs into the signup group.
     1020    if ( $is_signup ) {
     1021        $fieldset_id = sprintf( 'draggable_signup_field_%d', $field->id );
     1022    }
     1023    ?>
     1024
     1025    <fieldset id="<?php echo esc_attr( $fieldset_id ); ?>" class="sortable<?php echo ' ' . $field->type; if ( !empty( $class ) ) echo ' ' . $class; ?>">
    8151026        <legend>
    8161027            <span>
    8171028                <?php bp_the_profile_field_name(); ?>
    8181029
    819                 <?php if ( empty( $field->can_delete )                                    ) : ?><?php esc_html_e( '(Primary)', 'buddypress' ); endif; ?>
     1030                <?php if ( empty( $field->can_delete ) ) : ?><?php esc_html_e( '(Primary)', 'buddypress' ); endif; ?>
    8201031                <?php bp_the_profile_field_required_label(); ?>
    821                 <?php if ( bp_xprofile_get_meta( $field->id, 'field', 'signup_position' ) ) : ?><?php esc_html_e( '(Sign-up)', 'buddypress' ); endif; ?>
     1032                <?php if ( bp_get_signup_allowed() && $field->get_signup_position() ) : ?>
     1033                    <span class="bp-signup-field-label"><?php esc_html_e( '(Sign-up)', 'buddypress' );?></span>
     1034                <?php endif; ?>
    8221035                <?php if ( bp_get_member_types() ) : echo $field->get_member_type_label(); endif; ?>
    8231036
     
    8651078                <a class="button edit" href="<?php echo esc_url( $field_edit_url ); ?>"><?php _ex( 'Edit', 'Edit field link', 'buddypress' ); ?></a>
    8661079
    867                 <?php if ( $field->can_delete ) : ?>
     1080                <?php if ( $field->can_delete && ! $is_signup ) : ?>
    8681081
    8691082                    <div class="delete-button">
    8701083                        <a class="confirm submit-delete deletion" href="<?php echo esc_url( wp_nonce_url( $field_delete_url, 'bp_xprofile_delete_field-' . $field->id, 'bp_xprofile_delete_field' ) ); ?>"><?php _ex( 'Delete', 'Delete field link', 'buddypress' ); ?></a>
     1084                    </div>
     1085
     1086                <?php endif; ?>
     1087
     1088                <?php if ( $field->can_delete && $is_signup ) : ?>
     1089
     1090                    <div class="delete-button">
     1091                        <a class="submit-delete removal" href="<?php echo esc_attr( sprintf( '#remove_field-%d', $field->id ) ); ?>"><?php echo esc_html_x( 'Remove', 'Remove field link', 'buddypress' ); ?></a>
    8711092                    </div>
    8721093
     
    8881109        </div>
    8891110    </fieldset>
    890 
    8911111<?php
     1112}
     1113
     1114/**
     1115 * Handles the WYSIWYG display of signup profile fields on the edit screen.
     1116 *
     1117 * @since 8.0.0
     1118 *
     1119 * @param BP_XProfile_Field   $signup_field The field to use into the signup form.
     1120 * @param object $field_group The real field group object.
     1121 * @param string $class       Classes to append to output.
     1122 * @param bool   $echo        Whether to return or display the HTML output.
     1123 * @return string The HTML output.
     1124 */
     1125function bp_xprofile_admin_get_signup_field( $signup_field, $field_group = null, $class = '', $echo = false ) {
     1126    add_filter( 'bp_get_the_profile_field_input_name', 'bp_get_the_profile_signup_field_input_name' );
     1127
     1128    if ( ! $echo ) {
     1129        // Set up an output buffer.
     1130        ob_start();
     1131        xprofile_admin_field( $signup_field, $field_group, $class, true );
     1132        $output = ob_get_contents();
     1133        ob_end_clean();
     1134    } else {
     1135        xprofile_admin_field( $signup_field, $field_group, $class, true );
     1136    }
     1137
     1138    remove_filter( 'bp_get_the_profile_field_input_name', 'bp_get_the_profile_signup_field_input_name' );
     1139
     1140    if ( ! $echo ) {
     1141        return $output;
     1142    }
    8921143}
    8931144
  • trunk/src/bp-xprofile/bp-xprofile-cache.php

    r12869 r12886  
    315315}
    316316add_action( 'profile_update', 'bp_xprofile_reset_user_mid_cache', 10, 1 );
     317
     318/**
     319 * Resets the signup field IDs cache.
     320 *
     321 * @since 8.0.0
     322 */
     323function bp_xprofile_reset_signup_field_cache() {
     324    wp_cache_delete( 'signup_fields', 'bp_xprofile' );
     325}
     326add_action( 'bp_xprofile_inserted_signup_field', 'bp_xprofile_reset_signup_field_cache' );
     327add_action( 'bp_xprofile_reordered_signup_fields', 'bp_xprofile_reset_signup_field_cache' );
     328add_action( 'bp_xprofile_removed_signup_field', 'bp_xprofile_reset_signup_field_cache' );
  • trunk/src/bp-xprofile/bp-xprofile-cssjs.php

    r12868 r12886  
    5858            'hide_required_metabox'                => array(),
    5959            'hide_member_types_metabox'            => array(),
     60            'hide_signup_position_metabox'         => array(),
    6061            'text'                                 => array(
    6162                'defaultValue' => __( 'Default Value', 'buddypress' ),
    6263                'deleteLabel'  => __( 'Delete', 'buddypress' ),
    6364            ),
     65            'signup_info'                          => _x( '(Sign-up)', 'xProfile Group Admin Screen Signup field information', 'buddypress' ),
    6466        );
    6567
Note: See TracChangeset for help on using the changeset viewer.