Make WordPress Core

Changeset 35317


Ignore:
Timestamp:
10/21/2015 05:22:52 AM (11 years ago)
Author:
azaozz
Message:

Widgets: add a button to delete all inactive widgets simultaneously for better UX.

Props cdog.
Fixes #19159.

Location:
trunk/src/wp-admin
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/admin-ajax.php

    r34312 r35317  
    5757        'menu-locations-save', 'menu-quick-search', 'meta-box-order', 'get-permalink',
    5858        'sample-permalink', 'inline-save', 'inline-save-tax', 'find_posts', 'widgets-order',
    59         'save-widget', 'set-post-thumbnail', 'date_format', 'time_format',
     59        'save-widget', 'delete-inactive-widgets', 'set-post-thumbnail', 'date_format', 'time_format',
    6060        'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment',
    6161        'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor',
  • trunk/src/wp-admin/css/widgets.css

    r35015 r35317  
    273273}
    274274
    275 .sidebar-name .spinner {
     275.sidebar-name .spinner,
     276.remove-inactive-widgets .spinner {
    276277        float: none;
    277278        position: relative;
     
    349350.js .widgets-holder-wrap.closed .widget,
    350351.js .widgets-holder-wrap.closed .sidebar-description,
     352.js .widgets-holder-wrap.closed .remove-inactive-widgets,
    351353.js .closed br.clear {
    352354        display: none;
  • trunk/src/wp-admin/includes/ajax-actions.php

    r35168 r35317  
    19351935
    19361936/**
     1937 * Ajax handler for removing inactive widgets.
     1938 *
     1939 * @since 4.4.0
     1940 */
     1941function wp_ajax_delete_inactive_widgets() {
     1942        check_ajax_referer( 'remove-inactive-widgets', 'removeinactivewidgets' );
     1943
     1944        if ( ! current_user_can( 'edit_theme_options' ) ) {
     1945                wp_die( -1 );
     1946        }
     1947
     1948        unset( $_POST['removeinactivewidgets'], $_POST['action'] );
     1949
     1950        do_action( 'load-widgets.php' );
     1951        do_action( 'widgets.php' );
     1952        do_action( 'sidebar_admin_setup' );
     1953
     1954        $sidebars_widgets = wp_get_sidebars_widgets();
     1955
     1956        foreach ( $sidebars_widgets['wp_inactive_widgets'] as $key => $widget_id ) {
     1957                $pieces = explode( '-', $widget_id );
     1958                $multi_number = array_pop( $pieces );
     1959                $id_base = implode( '-', $pieces );
     1960                $widget = get_option( 'widget_' . $id_base );
     1961                unset( $widget[$multi_number] );
     1962                update_option( 'widget_' . $id_base, $widget );
     1963                unset( $sidebars_widgets['wp_inactive_widgets'][$key] );
     1964        }
     1965
     1966        wp_set_sidebars_widgets( $sidebars_widgets );
     1967
     1968        wp_die();
     1969}
     1970
     1971/**
    19371972 * Ajax handler for uploading attachments
    19381973 *
  • trunk/src/wp-admin/js/widgets.js

    r35015 r35317  
    8080                                widget.removeClass( 'open' );
    8181                                wpWidgets.close( widget );
     82                                e.preventDefault();
     83                        } else if ( target.attr( 'id' ) === 'inactive-widgets-control-remove' ) {
     84                                wpWidgets.removeInactiveWidgets();
    8285                                e.preventDefault();
    8386                        }
     
    388391
    389392                $.post( ajaxurl, data, function() {
     393                        $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
    390394                        $( '.spinner' ).removeClass( 'is-active' );
    391395                });
     
    432436                                } else {
    433437                                        widget.remove();
     438
     439                                        if ( sidebarId === 'wp_inactive_widgets' ) {
     440                                                $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
     441                                        }
    434442                                }
    435443                        } else {
     
    439447                                        wpWidgets.appendTitle( widget );
    440448                                        $document.trigger( 'widget-updated', [ widget ] );
    441                                 }
    442                         }
     449
     450                                        if ( sidebarId === 'wp_inactive_widgets' ) {
     451                                                $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
     452                                        }
     453                                }
     454                        }
     455
    443456                        if ( order ) {
    444457                                wpWidgets.saveOrder();
    445458                        }
    446459                });
     460        },
     461
     462        removeInactiveWidgets : function() {
     463                var $element = $( '.remove-inactive-widgets' ), a, data;
     464
     465                $( '.spinner', $element ).addClass( 'is-active' );
     466
     467                a = {
     468                        action : 'delete-inactive-widgets',
     469                        removeinactivewidgets : $( '#_wpnonce_remove_inactive_widgets' ).val()
     470                };
     471
     472                data = $.param( a );
     473
     474                $.post( ajaxurl, data, function() {
     475                        $( '#wp_inactive_widgets .widget' ).remove();
     476                        $( '#inactive-widgets-control-remove' ).prop( 'disabled' , true );
     477                        $( '.spinner', $element ).removeClass( 'is-active' );
     478                } );
    447479        },
    448480
  • trunk/src/wp-admin/widgets.php

    r35102 r35317  
    195195}
    196196
     197// Remove inactive widgets without js
     198if ( isset( $_POST['removeinactivewidgets'] ) ) {
     199        check_admin_referer( 'remove-inactive-widgets', '_wpnonce_remove_inactive_widgets' );
     200
     201        if ( $_POST['removeinactivewidgets'] ) {
     202                foreach ( $sidebars_widgets['wp_inactive_widgets'] as $key => $widget_id ) {
     203                        $pieces = explode( '-', $widget_id );
     204                        $multi_number = array_pop( $pieces );
     205                        $id_base = implode( '-', $pieces );
     206                        $widget = get_option( 'widget_' . $id_base );
     207                        unset( $widget[$multi_number] );
     208                        update_option( 'widget_' . $id_base, $widget );
     209                        unset( $sidebars_widgets['wp_inactive_widgets'][$key] );
     210                }
     211
     212                wp_set_sidebars_widgets( $sidebars_widgets );
     213        }
     214
     215        wp_redirect( admin_url( 'widgets.php?message=0' ) );
     216        exit;
     217}
     218
    197219// Output the widget form without js
    198220if ( isset($_GET['editwidget']) && $_GET['editwidget'] ) {
     
    389411                        <div class="widget-holder inactive">
    390412                                <?php wp_list_widget_controls( $registered_sidebar['id'], $registered_sidebar['name'] ); ?>
    391                                 <div class="clear"></div>
     413                                <div class="remove-inactive-widgets">
     414                                        <form action="" method="post">
     415                                                <p>
     416                                                        <?php
     417                                                        $attributes = array( 'id' => 'inactive-widgets-control-remove' );
     418
     419                                                        if ( empty($sidebars_widgets['wp_inactive_widgets']) ) {
     420                                                                $attributes['disabled'] = '';
     421                                                        }
     422
     423                                                        submit_button( __( 'Clear Inactive Widgets' ), 'delete', 'removeinactivewidgets', false, $attributes );
     424                                                        ?>
     425                                                        <span class="spinner">
     426                                                </p>
     427                                                <?php wp_nonce_field( 'remove-inactive-widgets', '_wpnonce_remove_inactive_widgets' ); ?>
     428                                        </form>
     429                                </div>
    392430                        </div>
     431                        <p class="description"><?php _e( 'This will clear all items from the inactive widgets list. You will not be able to restore any customizations.' ); ?></p>
    393432                </div>
    394433                <?php
Note: See TracChangeset for help on using the changeset viewer.