WordPress.org

Make WordPress Core

Ticket #15920: 15920.2.diff

File 15920.2.diff, 7.5 KB (added by nacin, 7 years ago)

Patch includes better REQUEST_URI reset.

  • wp-admin/includes/class-wp-ms-themes-list-table.php

     
    7878                $current = get_site_transient( 'update_themes' );
    7979
    8080                foreach ( (array) $themes['all'] as $key => $theme ) {
    81                         $theme_key = esc_html( $theme['Stylesheet'] );
     81                        $theme_key = $theme['Stylesheet'];
    8282
    8383                        if ( isset( $allowed_themes [ $theme_key ] ) )  {
    8484                                $themes['all'][$key]['enabled'] = true;
     
    276276                        'delete' => ''
    277277                );
    278278
    279                 $theme_key = esc_html( $theme['Stylesheet'] );
     279                $theme_key = $theme['Stylesheet'];
    280280
    281281                if ( empty( $theme['enabled'] ) )
    282282                        $actions['enable'] = '<a href="' . esc_url( wp_nonce_url($url . 'action=enable&amp;theme=' . $theme_key . '&amp;paged=' . $page . '&amp;s=' . $s, 'enable-theme_' . $theme_key) ) . '" title="' . esc_attr__('Enable this theme') . '" class="edit">' . ( $this->is_site_themes ? __( 'Enable' ) : __( 'Network Enable' ) ) . '</a>';
     
    285285
    286286                if ( current_user_can('edit_themes') )
    287287                        $actions['edit'] = '<a href="' . esc_url('theme-editor.php?theme=' . $theme['Name'] ) . '" title="' . esc_attr__('Open this theme in the Theme Editor') . '" class="edit">' . __('Edit') . '</a>';
    288                        
    289                 if ( empty( $theme['enabled'] ) && current_user_can( 'delete_themes' ) && ! $this->is_site_themes )
     288
     289                if ( empty( $theme['enabled'] ) && current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $theme_key != get_option( 'stylesheet' ) && $theme_key != get_option( 'template' ) )
    290290                        $actions['delete'] = '<a href="' . esc_url( wp_nonce_url( 'themes.php?action=delete-selected&amp;checked[]=' . $theme_key . '&amp;theme_status=' . $context . '&amp;paged=' . $page . '&amp;s=' . $s, 'bulk-themes' ) ) . '" title="' . esc_attr__( 'Delete this theme' ) . '" class="delete">' . __( 'Delete' ) . '</a>';
    291291
    292292                $actions = apply_filters( 'theme_action_links', array_filter( $actions ), $theme_key, $theme, $context );
  • wp-admin/network/themes.php

     
    2828$s = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
    2929
    3030// Clean up request URI from temporary args for screen options/paging uri's to work as expected.
    31 $_SERVER['REQUEST_URI'] = remove_query_arg(array('enable', 'disable', 'enable-selected', 'disable-selected'), $_SERVER['REQUEST_URI']);
     31$temp_args = array( 'enabled', 'disabled', 'deleted', 'error', 'enabled', 'disabled', 'deleted', 'error' );
     32$_SERVER['REQUEST_URI'] = remove_query_arg( $temp_args, $_SERVER['REQUEST_URI'] );
     33$referer = remove_query_arg( $temp_args, wp_get_referer() );
    3234
    3335if ( $action ) {
    3436        $allowed_themes = get_site_option( 'allowedthemes' );   
     
    3739                        check_admin_referer('enable-theme_' . $_GET['theme']);
    3840                        $allowed_themes[ $_GET['theme'] ] = true;
    3941                        update_site_option( 'allowedthemes', $allowed_themes );
    40                         wp_redirect( wp_get_referer() ); // @todo add_query_arg for update message
    41                         exit;                   
     42                        wp_redirect( add_query_arg( 'enabled', '1', $referer ) );
     43                        exit;
    4244                        break;
    4345                case 'disable':
    4446                        check_admin_referer('disable-theme_' . $_GET['theme']);
    4547                        unset( $allowed_themes[ $_GET['theme'] ] );
    4648                        update_site_option( 'allowedthemes', $allowed_themes );
    47                         wp_redirect( wp_get_referer() ); // @todo add_query_arg for update message
     49                        wp_redirect( add_query_arg( 'disabled', '1', $referer ) );
    4850                        exit;
    4951                        break;
    5052                case 'enable-selected':
    5153                        check_admin_referer('bulk-themes');
    5254                        $themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
    5355                        if ( empty($themes) ) {
    54                                 wp_redirect( wp_get_referer() );
     56                                wp_redirect( add_query_arg( 'error', 'none', $referer ) );
    5557                                exit;
    56                         }                                               
     58                        }
    5759                        foreach( (array) $themes as $theme )
    5860                                $allowed_themes[ $theme ] = true;
    5961                        update_site_option( 'allowedthemes', $allowed_themes );
     62                        wp_redirect( add_query_arg( 'enabled', count( $themes ), $referer ) );
     63                        exit;
    6064                        break;
    6165                case 'disable-selected':
    6266                        check_admin_referer('bulk-themes');
    6367                        $themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
    6468                        if ( empty($themes) ) {
    65                                 wp_redirect( wp_get_referer() );
     69                                wp_redirect( add_query_arg( 'error', 'none', $referer ) );
    6670                                exit;
    67                         }                                               
     71                        }
    6872                        foreach( (array) $themes as $theme )
    6973                                unset( $allowed_themes[ $theme ] );
    7074                        update_site_option( 'allowedthemes', $allowed_themes );
     75                        wp_redirect( add_query_arg( 'disabled', count( $themes ), $referer ) );
     76                        exit;
    7177                        break;
    7278                case 'delete-selected':
    7379                        if ( ! current_user_can( 'delete_themes' ) )
     
    7581                        check_admin_referer( 'bulk-themes' );
    7682
    7783                        $themes = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array();
     84
     85                        if ( isset( $themes[ get_option( 'template' ) ] ) )
     86                                unset( $themes[ get_option( 'template' ) ] );
     87                        if ( isset( $themes[ get_option( 'stylesheet' ) ] ) )
     88                                unset( $themes[ get_option( 'stylesheet' ) ] );
     89
    7890                        if ( empty( $themes ) ) {
    79                                 wp_redirect( wp_get_referer() );
     91                                wp_redirect( add_query_arg( 'error', 'none', $referer ) );
    8092                                exit;
    8193                        }
    8294
     
    93105                        }
    94106                       
    95107                        if ( empty( $themes ) ) {
    96                                 wp_redirect( add_query_arg( 'error', 'main', wp_get_referer() ) );
     108                                wp_redirect( add_query_arg( 'error', 'main', $referer ) );
    97109                                exit;
    98110                        }
    99111
     
    149161
    150162                        foreach ( $themes as $theme )
    151163                                $delete_result = delete_theme( $theme );
    152                         wp_redirect( network_admin_url( 'themes.php?deleted=true' ) );
     164                        wp_redirect( add_query_arg( 'deleted', count( $themes ), $referer ) );
    153165                        exit;
    154166                        break;
    155167        }
     
    174186
    175187require_once(ABSPATH . 'wp-admin/admin-header.php');
    176188
    177 if ( isset( $_GET['deleted'] ) ) : ?>
    178 <div class="updated"><p><?php _e('Theme deleted.') ?></p></div><?php
    179 elseif ( isset( $_GET['error'] ) && 'main' == $_GET['error'] ) : ?>
    180 <div class="error"><p><?php _e( 'You cannot delete a theme while it is active on the main site.' ); ?></p></div><?php
    181 endif;
    182189?>
    183190
    184191<div class="wrap">
     
    188195        printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', esc_html( $s ) ); ?>
    189196</h2>
    190197
     198<?php
     199if ( isset( $_GET['enabled'] ) ) {
     200        $_GET['enabled'] = absint( $_GET['enabled'] );
     201        echo '<div id="message" class="updated"><p>' . sprintf( _n( 'Theme enabled.', '%s themes enabled.', $_GET['enabled'] ), number_format_i18n( $_GET['enabled'] ) ) . '</p></div>';
     202} elseif ( isset( $_GET['disabled'] ) ) {
     203        $_GET['disabled'] = absint( $_GET['disabled'] );
     204        echo '<div id="message" class="updated"><p>' . sprintf( _n( 'Theme disabled.', '%s themes disabled.', $_GET['disabled'] ), number_format_i18n( $_GET['disabled'] ) ) . '</p></div>';
     205} elseif ( isset( $_GET['deleted'] ) ) {
     206        $_GET['disabled'] = absint( $_GET['deleted'] );
     207        echo '<div id="message" class="updated"><p>' . sprintf( _n( 'Theme deleted.', '%s themes deleted.', $_GET['deleted'] ), number_format_i18n( $_GET['deleted'] ) ) . '</p></div>';
     208} elseif ( isset( $_GET['error'] ) && 'none' == $_GET['error'] ) {
     209        echo '<div id="message" class="error"><p>' . __( 'No theme selected.' ) . '</p></div>';
     210} elseif ( isset( $_GET['error'] ) && 'main' == $_GET['error'] ) {
     211        echo '<div class="error"><p>' . __( 'You cannot delete a theme while it is active on the main site.' ) . '</p></div>';
     212}
     213
     214?>
     215
    191216<form method="get" action="">
    192217<?php $wp_list_table->search_box( __( 'Search Installed Themes' ), 'theme' ); ?>
    193218</form>