WordPress.org

Make WordPress Core

Ticket #19159: 19159.6.diff

File 19159.6.diff, 6.8 KB (added by cdog, 5 years ago)
  • wp-admin/admin-ajax.php

     
    5656        'hidden-columns', 'update-welcome-panel', 'menu-get-metabox', 'wp-link-ajax',
    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',
    6262        'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 'get-revision-diffs',
  • wp-admin/css/widgets.css

     
    272272        margin-bottom: 0;
    273273}
    274274
    275 .sidebar-name .spinner {
     275.sidebar-name .spinner,
     276.remove-inactive-widgets .spinner {
    276277        float: none;
    277278        position: relative;
    278279        top: -2px;
     
    348349
    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;
    353355}
  • wp-admin/includes/ajax-actions.php

     
    19341934}
    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 *
    19391974 * @since 3.3.0
  • wp-admin/js/widgets.js

     
    8080                                widget.removeClass( 'open' );
    8181                                wpWidgets.close( widget );
    8282                                e.preventDefault();
     83                        } else if ( target.attr( 'id' ) === 'inactive-widgets-control-remove' ) {
     84                                wpWidgets.removeInactiveWidgets();
     85                                e.preventDefault();
    8386                        }
    8487                });
    8588
     
    387390                });
    388391
    389392                $.post( ajaxurl, data, function() {
     393                        $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
    390394                        $( '.spinner' ).removeClass( 'is-active' );
    391395                });
    392396        },
     
    431435                                        });
    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 {
    436444                                $( '.spinner' ).removeClass( 'is-active' );
     
    438446                                        $( 'div.widget-content', widget ).html( r );
    439447                                        wpWidgets.appendTitle( widget );
    440448                                        $document.trigger( 'widget-updated', [ widget ] );
     449
     450                                        if (sidebarId === 'wp_inactive_widgets') {
     451                                                $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length );
     452                                        }
    441453                                }
    442454                        }
     455
    443456                        if ( order ) {
    444457                                wpWidgets.saveOrder();
    445458                        }
    446459                });
    447460        },
    448461
     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                } );
     479        },
     480
    449481        appendTitle : function(widget) {
    450482                var title = $('input[id*="-title"]', widget).val() || '';
    451483
  • wp-admin/widgets.php

     
    194194        exit;
    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'] ) {
    199221        $widget_id = $_GET['editwidget'];
     
    388410                <div class="<?php echo esc_attr( $wrap_class ); ?>">
    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
    395434