WordPress.org

Make WordPress Core

Ticket #15691: 15691.patch

File 15691.patch, 7.7 KB (added by boonebgorges, 3 years ago)
  • wp-admin/includes/misc.php

     
    593593</fieldset> 
    594594<?php 
    595595} 
     596 
     597/** 
     598 * Process settings submitted by the Settings API. 
     599 * 
     600 * @since 3.2.0 
     601 * 
     602 * @global array $whitelist_options A whitelist of permitted settings fields 
     603 * @param string $option_page The id of the panel that submitted the settings 
     604 */ 
     605function process_settings( $option_page ) { 
     606        global $whitelist_options; 
     607         
     608        if ( 'options' == $option_page && !isset( $_POST['option_page'] ) ) { // This is for back compat and will eventually be removed. 
     609                $unregistered = true; 
     610                check_admin_referer( 'update-options' ); 
     611        } else { 
     612                $unregistered = false; 
     613                check_admin_referer( $option_page . '-options' ); 
     614        } 
     615 
     616        if ( !isset( $whitelist_options[ $option_page ] ) ) 
     617                wp_die( __( 'Error: options page not found.' ) ); 
     618 
     619        if ( 'options' == $option_page ) { 
     620                if ( is_multisite() && ! is_super_admin() ) 
     621                        wp_die( __( 'You do not have sufficient permissions to modify unregistered settings for this site.' ) ); 
     622                $options = explode( ',', stripslashes( $_POST[ 'page_options' ] ) ); 
     623        } else { 
     624                $options = $whitelist_options[ $option_page ]; 
     625        } 
     626 
     627        // Handle custom date/time formats 
     628        if ( 'general' == $option_page ) { 
     629                if ( !empty($_POST['date_format']) && isset($_POST['date_format_custom']) && '\c\u\s\t\o\m' == stripslashes( $_POST['date_format'] ) ) 
     630                        $_POST['date_format'] = $_POST['date_format_custom']; 
     631                if ( !empty($_POST['time_format']) && isset($_POST['time_format_custom']) && '\c\u\s\t\o\m' == stripslashes( $_POST['time_format'] ) ) 
     632                        $_POST['time_format'] = $_POST['time_format_custom']; 
     633                // Map UTC+- timezones to gmt_offsets and set timezone_string to empty. 
     634                if ( !empty($_POST['timezone_string']) && preg_match('/^UTC[+-]/', $_POST['timezone_string']) ) { 
     635                        $_POST['gmt_offset'] = $_POST['timezone_string']; 
     636                        $_POST['gmt_offset'] = preg_replace('/UTC\+?/', '', $_POST['gmt_offset']); 
     637                        $_POST['timezone_string'] = ''; 
     638                } 
     639        } 
     640 
     641        if ( $options ) { 
     642                foreach ( $options as $option ) { 
     643                        if ( $unregistered ) 
     644                                _deprecated_argument( 'options.php', '2.7', sprintf( __( 'The <code>%1$s</code> setting is unregistered. Unregistered settings are deprecated. See http://codex.wordpress.org/Settings_API' ), $option, $option_page ) ); 
     645 
     646                        $option = trim($option); 
     647                        $value = null; 
     648                        if ( isset($_POST[$option]) ) 
     649                                $value = $_POST[$option]; 
     650                        if ( !is_array($value) ) 
     651                                $value = trim($value); 
     652                        $value = stripslashes_deep($value); 
     653                         
     654                        if ( is_network_admin() ) 
     655                                update_site_option( $option, $value ); 
     656                        else 
     657                                update_option( $option, $value ); 
     658                } 
     659        } 
     660 
     661        /** 
     662         *  Handle settings errors and return to the originating page 
     663         */ 
     664        // If no settings errors were registered add a general 'updated' message. 
     665        if ( !count( get_settings_errors() ) ) 
     666                add_settings_error('general', 'settings_updated', __('Settings saved.'), 'updated'); 
     667        set_transient('settings_errors', get_settings_errors(), 30); 
     668 
     669        /** 
     670         * Redirect back to the settings page that was submitted 
     671         */ 
     672        $goback = add_query_arg( 'settings-updated', 'true',  wp_get_referer() ); 
     673        wp_redirect( $goback ); 
     674        exit; 
     675} 
    596676?> 
  • wp-admin/includes/template.php

     
    11371137} 
    11381138 
    11391139/** 
     1140 * Echoes the output of get_settings_form_action() 
     1141 * 
     1142 * @since 3.2.0 
     1143 */ 
     1144function settings_form_action() { 
     1145        echo get_settings_form_action(); 
     1146} 
     1147 
     1148/** 
     1149 * Gets the proper form action for a settings screen 
     1150 * 
     1151 * On a single Site Admin, settings should be saved to options.php. On the Network Admin, settings 
     1152 * are saved by edit.php?action=pluginoptions. 
     1153 * 
     1154 * @since 3.2.0 
     1155 *  
     1156 * @return string $action The form action 
     1157 */ 
     1158function get_settings_form_action() { 
     1159        $action = is_network_admin() ? network_admin_url( 'edit.php?action=pluginoptions' ) : admin_url( 'options.php' ); 
     1160        return apply_filters( 'settings_form_action', $action ); 
     1161} 
     1162 
     1163/** 
    11401164 * Prints out all settings sections added to a particular settings page 
    11411165 * 
    11421166 * Part of the Settings API. Use this in a settings page callback function 
  • wp-admin/network/edit.php

     
    165165                exit(); 
    166166        break; 
    167167 
     168        case 'pluginoptions': 
     169                wp_reset_vars (array( 'option_page' ) ); 
     170                $whitelist_options = apply_filters( 'whitelist_options', array() ); 
     171 
     172                process_settings( $option_page ); 
     173        break; 
     174 
    168175        case 'updateblog': 
    169176                // No longer used. 
    170177        break; 
  • wp-admin/options.php

     
    9797 * If $_GET['action'] == 'update' we are saving settings sent from a settings page 
    9898 */ 
    9999if ( 'update' == $action ) { 
    100         if ( 'options' == $option_page && !isset( $_POST['option_page'] ) ) { // This is for back compat and will eventually be removed. 
    101                 $unregistered = true; 
    102                 check_admin_referer( 'update-options' ); 
    103         } else { 
    104                 $unregistered = false; 
    105                 check_admin_referer( $option_page . '-options' ); 
    106         } 
    107  
    108         if ( !isset( $whitelist_options[ $option_page ] ) ) 
    109                 wp_die( __( 'Error: options page not found.' ) ); 
    110  
    111         if ( 'options' == $option_page ) { 
    112                 if ( is_multisite() && ! is_super_admin() ) 
    113                         wp_die( __( 'You do not have sufficient permissions to modify unregistered settings for this site.' ) ); 
    114                 $options = explode( ',', stripslashes( $_POST[ 'page_options' ] ) ); 
    115         } else { 
    116                 $options = $whitelist_options[ $option_page ]; 
    117         } 
    118  
    119         // Handle custom date/time formats 
    120         if ( 'general' == $option_page ) { 
    121                 if ( !empty($_POST['date_format']) && isset($_POST['date_format_custom']) && '\c\u\s\t\o\m' == stripslashes( $_POST['date_format'] ) ) 
    122                         $_POST['date_format'] = $_POST['date_format_custom']; 
    123                 if ( !empty($_POST['time_format']) && isset($_POST['time_format_custom']) && '\c\u\s\t\o\m' == stripslashes( $_POST['time_format'] ) ) 
    124                         $_POST['time_format'] = $_POST['time_format_custom']; 
    125                 // Map UTC+- timezones to gmt_offsets and set timezone_string to empty. 
    126                 if ( !empty($_POST['timezone_string']) && preg_match('/^UTC[+-]/', $_POST['timezone_string']) ) { 
    127                         $_POST['gmt_offset'] = $_POST['timezone_string']; 
    128                         $_POST['gmt_offset'] = preg_replace('/UTC\+?/', '', $_POST['gmt_offset']); 
    129                         $_POST['timezone_string'] = ''; 
    130                 } 
    131         } 
    132  
    133         if ( $options ) { 
    134                 foreach ( $options as $option ) { 
    135                         if ( $unregistered ) 
    136                                 _deprecated_argument( 'options.php', '2.7', sprintf( __( 'The <code>%1$s</code> setting is unregistered. Unregistered settings are deprecated. See http://codex.wordpress.org/Settings_API' ), $option, $option_page ) ); 
    137  
    138                         $option = trim($option); 
    139                         $value = null; 
    140                         if ( isset($_POST[$option]) ) 
    141                                 $value = $_POST[$option]; 
    142                         if ( !is_array($value) ) 
    143                                 $value = trim($value); 
    144                         $value = stripslashes_deep($value); 
    145                         update_option($option, $value); 
    146                 } 
    147         } 
    148  
    149         /** 
    150          *  Handle settings errors and return to options page 
    151          */ 
    152         // If no settings errors were registered add a general 'updated' message. 
    153         if ( !count( get_settings_errors() ) ) 
    154                 add_settings_error('general', 'settings_updated', __('Settings saved.'), 'updated'); 
    155         set_transient('settings_errors', get_settings_errors(), 30); 
    156  
    157         /** 
    158          * Redirect back to the settings page that was submitted 
    159          */ 
    160         $goback = add_query_arg( 'settings-updated', 'true',  wp_get_referer() ); 
    161         wp_redirect( $goback ); 
    162         exit; 
     100        process_settings( $option_page ); 
    163101} 
    164102 
    165103include('./admin-header.php'); ?>