Skip to:
Content

BuddyPress.org

Changeset 12676


Ignore:
Timestamp:
07/02/2020 06:25:07 AM (3 years ago)
Author:
imath
Message:

BP xProfile: add a delete confirmation screen for fields

Props oztaser

Fixes #8321

Location:
trunk/src/bp-xprofile
Files:
2 edited

Legend:

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

    r12668 r12676  
    7070        'edit_field',
    7171        'delete_field',
    72         'delete_option'
     72        'do_delete_field',
     73        'delete_option',
     74        'do_delete_option'
    7375    );
    7476
     
    9799
    98100        // Delete field.
    99         } elseif ( ( false !== $field_id ) && ( 'delete_field' === $mode ) ) {
    100             xprofile_admin_delete_field( $field_id, 'field');
     101        } elseif ( ( false !== $field_id ) && ( in_array( $mode, array( 'delete_field', 'do_delete_field' ), true ) ) ) {
     102            xprofile_admin_delete_field( $field_id, 'field' );
    101103
    102104        // Delete option.
    103         } elseif ( ! empty( $option_id ) && 'delete_option' === $mode ) {
     105        } elseif ( ! empty( $option_id ) && in_array( $mode, array( 'delete_option', 'do_delete_option' ), true ) ) {
    104106            xprofile_admin_delete_field( $option_id, 'option' );
    105107
     
    611613    check_admin_referer( 'bp_xprofile_delete_field-' . $field_id, 'bp_xprofile_delete_field' );
    612614
     615    $mode = ! empty( $_GET['mode'] ) ? sanitize_key( $_GET['mode'] ) : false;
     616
    613617    // Switch type to 'option' if type is not 'field'.
    614618    // @todo trust this param.
    615619    $field_type  = ( 'field' == $field_type ) ? __( 'field', 'buddypress' ) : __( 'option', 'buddypress' );
    616     $field       = xprofile_get_field( $field_id );
    617 
    618     if ( !$field->delete( (bool) $delete_data ) ) {
    619         /* translators: %s: the field type */
    620         $message = sprintf( __( 'There was an error deleting the %s. Please try again.', 'buddypress' ), $field_type );
    621         $type    = 'error';
     620
     621    // Display the field/option delete confirmation screen.
     622    if ( in_array( $mode, array( 'delete_field', 'delete_option' ) ) ) {
     623        xprofile_admin_delete_field_screen( $field_id, $field_type );
     624
     625    // Handle the deletion of field
    622626    } else {
    623         /* translators: %s: the field type */
    624         $message = sprintf( __( 'The %s was deleted successfully!', 'buddypress' ), $field_type );
    625         $type    = 'success';
    626 
    627         /**
    628          * Fires at the end of the field deletion process, if successful.
    629          *
    630          * @since 1.0.0
    631          *
    632          * @param BP_XProfile_Field $field Current BP_XProfile_Field object.
    633          */
    634         do_action( 'xprofile_fields_deleted_field', $field );
    635     }
    636 
    637     xprofile_admin_screen( $message, $type );
    638 }
     627        $field = xprofile_get_field( $field_id );
     628
     629        if ( !$field->delete( (bool) $delete_data ) ) {
     630            /* translators: %s: the field type */
     631            $message = sprintf( __( 'There was an error deleting the %s. Please try again.', 'buddypress' ), $field_type );
     632            $type    = 'error';
     633        } else {
     634            /* translators: %s: the field type */
     635            $message = sprintf( __( 'The %s was deleted successfully!', 'buddypress' ), $field_type );
     636            $type    = 'success';
     637
     638            /**
     639             * Fires at the end of the field deletion process, if successful.
     640             *
     641             * @since 1.0.0
     642             *
     643             * @param BP_XProfile_Field $field Current BP_XProfile_Field object.
     644             */
     645            do_action( 'xprofile_fields_deleted_field', $field );
     646        }
     647
     648        xprofile_admin_screen( $message, $type );
     649    }
     650}
     651
     652/**
     653 * Display the delete confirmation screen of xprofile field/option.
     654 *
     655 * @since 7.0.0
     656 */
     657function xprofile_admin_delete_field_screen( $field_id, $field_type ) {
     658    if ( ! bp_current_user_can( 'bp_moderate' ) ) {
     659        die( '-1' );
     660    }
     661
     662    $field = xprofile_get_field( $field_id );
     663
     664    $base_url = remove_query_arg( array( 'mode', 'field_id', 'bp_xprofile_delete_field' ), $_SERVER['REQUEST_URI'] ); ?>
     665
     666    <div class="wrap">
     667        <h1><?php printf( esc_html__( 'Delete %s', 'buddypress' ), $field_type ); ?></h1>
     668        <p><?php printf( esc_html__( 'You are about to delete the following %s:', 'buddypress' ), $field_type ); ?></p>
     669
     670        <ul class="bp-xprofile-delete-group-list">
     671            <li><?php echo esc_html( $field->name ); ?></li>
     672        </ul>
     673
     674        <p><strong><?php esc_html_e( 'This action cannot be undone.', 'buddypress' ); ?></strong></p>
     675
     676        <a class="button-primary" href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'mode' => 'do_delete_field', 'field_id' => $field_id ), $base_url ), 'bp_xprofile_delete_field-' . $field_id, 'bp_xprofile_delete_field' ) ); ?>"><?php esc_html_e( 'Delete Permanently', 'buddypress' ); ?></a>
     677        <a class="button" href="<?php echo esc_attr( $base_url ); ?>"><?php esc_html_e( 'Cancel', 'buddypress' ); ?></a>
     678    </div>
     679
     680    <?php
     681}
     682
     683
    639684
    640685/**
  • trunk/src/bp-xprofile/classes/class-bp-xprofile-field.php

    r12668 r12676  
    13321332        ), $users_url );
    13331333
     1334
     1335        // Delete.
     1336        if ( $this->can_delete ) {
     1337            $delete_url = wp_nonce_url( add_query_arg( array(
     1338                'page'     => 'bp-profile-setup',
     1339                'mode'     => 'delete_field',
     1340                'field_id' => (int) $this->id
     1341            ), $users_url ), 'bp_xprofile_delete_field-' . $this->id, 'bp_xprofile_delete_field' );
     1342        }
    13341343        /**
    13351344         * Fires before XProfile Field submit metabox.
     
    13691378
    13701379                        <div id="delete-action">
    1371                             <a href="<?php echo esc_url( $cancel_url ); ?>" class="deletion"><?php esc_html_e( 'Cancel', 'buddypress' ); ?></a>
     1380                            <?php if ( ! empty( $this->id ) && isset( $delete_url ) ) : ?>
     1381                                <a href="<?php echo esc_url( $delete_url ); ?>" class="submitdelete deletion"><?php esc_html_e( 'Delete', 'buddypress' ); ?></a>
     1382                            <?php endif; ?>
     1383
     1384                            <div><a href="<?php echo esc_url( $cancel_url ); ?>" class="deletion"><?php esc_html_e( 'Cancel', 'buddypress' ); ?></a></div>
    13721385                        </div>
    13731386
Note: See TracChangeset for help on using the changeset viewer.