WordPress.org

Make WordPress Core

Ticket #25939: core.25939.0.patch

File core.25939.0.patch, 6.2 KB (added by bordoni, 5 years ago)
  • new file src/wp-admin/js/conditional-options.js

    diff --git a/src/wp-admin/js/conditional-options.js b/src/wp-admin/js/conditional-options.js
    new file mode 100644
    index 0000000..7fae12f
    - +  
     1/**
     2 * This file will allow usage of the /wp-admin/options.php without hitting the `max_input_vars`
     3 *
     4 * Options will be saved only if there was a change to the field, which also improves performance.
     5 */
     6(function( $ ) {
     7        $(document).ready( function() {
     8                $( 'body.options-php .all-options' ).on( 'change keydown', function(){
     9                        var $this = $( this );
     10
     11                        // If the field has a name skip it
     12                        if ( $this.attr( 'name' ) == $this.data( 'name' ) ) {
     13                                return;
     14                        }
     15
     16                        // Now apply the actual Name to the field
     17                        $this.attr( 'name', $this.data( 'name' ) );
     18                });
     19        });
     20})( jQuery );
  • src/wp-admin/options.php

    diff --git a/src/wp-admin/options.php b/src/wp-admin/options.php
    index e2bfa90..1ab8e97 100644
    a b if ( 'update' == $action ) { 
    211211                                if ( ! is_array( $value ) )
    212212                                        $value = trim( $value );
    213213                                $value = wp_unslash( $value );
     214
     215                                update_option( $option, $value );
    214216                        }
    215                         update_option( $option, $value );
    216217                }
    217218
    218219                // Switch translation in case WPLANG was changed.
    if ( 'update' == $action ) { 
    235236        /**
    236237         * Redirect back to the settings page that was submitted
    237238         */
    238         $goback = add_query_arg( 'settings-updated', 'true',  wp_get_referer() );
     239        $goback = add_query_arg( 'settings-updated', 'true', wp_get_referer() );
    239240        wp_redirect( $goback );
    240241        exit;
    241242}
    242243
     244wp_enqueue_script( 'conditional-options' );
     245
    243246include( ABSPATH . 'wp-admin/admin-header.php' ); ?>
    244247
    245248<div class="wrap">
    246   <h1><?php esc_html_e( 'All Settings' ); ?></h1>
    247   <form name="form" action="options.php" method="post" id="all-options">
    248   <?php wp_nonce_field('options-options') ?>
    249   <input type="hidden" name="action" value="update" />
    250   <input type="hidden" name="option_page" value="options" />
    251   <table class="form-table">
    252 <?php
    253 $options = $wpdb->get_results( "SELECT * FROM $wpdb->options ORDER BY option_name" );
    254 
    255 foreach ( (array) $options as $option ) :
    256         $disabled = false;
    257         if ( $option->option_name == '' )
    258                 continue;
    259         if ( is_serialized( $option->option_value ) ) {
    260                 if ( is_serialized_string( $option->option_value ) ) {
    261                         // This is a serialized string, so we should display it.
    262                         $value = maybe_unserialize( $option->option_value );
    263                         $options_to_update[] = $option->option_name;
    264                         $class = 'all-options';
    265                 } else {
    266                         $value = 'SERIALIZED DATA';
    267                         $disabled = true;
    268                         $class = 'all-options disabled';
    269                 }
    270         } else {
    271                 $value = $option->option_value;
    272                 $options_to_update[] = $option->option_name;
    273                 $class = 'all-options';
    274         }
    275         $name = esc_attr( $option->option_name );
    276         ?>
    277 <tr>
    278         <th scope="row"><label for="<?php echo $name ?>"><?php echo esc_html( $option->option_name ); ?></label></th>
    279 <td>
    280 <?php if ( strpos( $value, "\n" ) !== false ) : ?>
    281         <textarea class="<?php echo $class ?>" name="<?php echo $name ?>" id="<?php echo $name ?>" cols="30" rows="5"><?php
    282                 echo esc_textarea( $value );
    283         ?></textarea>
    284         <?php else: ?>
    285                 <input class="regular-text <?php echo $class ?>" type="text" name="<?php echo $name ?>" id="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>"<?php disabled( $disabled, true ) ?> />
    286         <?php endif ?></td>
    287 </tr>
    288 <?php endforeach; ?>
    289   </table>
    290 
    291 <input type="hidden" name="page_options" value="<?php echo esc_attr( implode( ',', $options_to_update ) ); ?>" />
    292 
    293 <?php submit_button( __( 'Save Changes' ), 'primary', 'Update' ); ?>
    294 
    295   </form>
     249        <h1><?php esc_html_e( 'All Settings' ); ?></h1>
     250        <form name="form" action="options.php" method="post" id="all-options">
     251                <?php wp_nonce_field( 'options-options' ); ?>
     252                <input type="hidden" name="action" value="update" />
     253                <input type="hidden" name="option_page" value="options" />
     254
     255                <table class="form-table">
     256                        <?php
     257                        $options = $wpdb->get_results( "SELECT * FROM $wpdb->options ORDER BY option_name" );
     258
     259                        foreach ( (array) $options as $option ) :
     260                        $disabled = false;
     261
     262                        // Leave if the option name is empty
     263                        if ( $option->option_name == '' ){
     264                                continue;
     265                        }
     266
     267                        if ( is_serialized( $option->option_value ) ) {
     268                                if ( is_serialized_string( $option->option_value ) ) {
     269                                        // This is a serialized string, so we should display it.
     270                                        $value = maybe_unserialize( $option->option_value );
     271                                        $options_to_update[] = $option->option_name;
     272                                        $class = 'all-options';
     273                                } else {
     274                                        $value = 'SERIALIZED DATA';
     275                                        $disabled = true;
     276                                        $class = 'all-options disabled';
     277                                }
     278                        } else {
     279                                $value = $option->option_value;
     280                                $options_to_update[] = $option->option_name;
     281                                $class = 'all-options';
     282                        }
     283                        $name = esc_attr( $option->option_name );
     284                        ?>
     285                        <tr>
     286                                <th scope="row">
     287                                        <label for="<?php echo $name ?>"><?php echo esc_html( $option->option_name ); ?></label>
     288                                </th>
     289                                <td>
     290                                        <?php if ( strpos( $value, "\n" ) !== false ) { ?>
     291                                                <textarea class="<?php echo $class ?>" data-name="<?php echo $name ?>" id="<?php echo $name ?>" cols="30" rows="5"><?php echo esc_textarea( $value ); ?></textarea>
     292                                        <?php } else { ?>
     293                                                <input class="regular-text <?php echo $class ?>" type="text" data-name="<?php echo $name ?>" id="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>"<?php disabled( $disabled, true ) ?> />
     294                                        <?php } ?>
     295                                </td>
     296                        </tr>
     297                        <?php endforeach; ?>
     298                </table>
     299
     300                <input type="hidden" name="page_options" value="<?php echo esc_attr( implode( ',', $options_to_update ) ); ?>" />
     301
     302                <?php submit_button( __( 'Save Changes' ), 'primary', 'Update' ); ?>
     303
     304        </form>
    296305</div>
    297306
    298307<?php
  • src/wp-includes/script-loader.php

    diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php
    index 2ac34ed..c208b6c 100644
    a b function wp_default_scripts( &$scripts ) { 
    650650                $scripts->add( 'media-gallery', "/wp-admin/js/media-gallery$suffix.js", array('jquery'), false, 1 );
    651651
    652652                $scripts->add( 'svg-painter', '/wp-admin/js/svg-painter.js', array( 'jquery' ), false, 1 );
     653
     654                $scripts->add( 'conditional-options', '/wp-admin/js/conditional-options.js', array( 'jquery' ), false, 1 );
    653655        }
    654656}
    655657