WordPress.org

Make WordPress Core

Ticket #5316: 5316.diff

File 5316.diff, 8.8 KB (added by DD32, 6 years ago)

patch against trunk options.php

  • wp-admin/options.php

     
    55$this_file = 'options.php'; 
    66$parent_file = 'options-general.php'; 
    77 
    8 wp_reset_vars(array('action')); 
     8wp_reset_vars(array('action','option')); 
    99 
    1010if ( !current_user_can('manage_options') ) 
    1111        wp_die(__('Cheatin’ uh?')); 
    1212 
    13 switch($action) { 
    14  
    15 case 'update': 
    16         $any_changed = 0; 
    17  
    18         check_admin_referer('update-options'); 
    19  
    20         if ( !$_POST['page_options'] ) { 
    21                 foreach ( (array) $_POST as $key => $value) { 
    22                         if ( !in_array($key, array('_wpnonce', '_wp_http_referer')) ) 
    23                                 $options[] = $key; 
     13switch( $action ){ 
     14        case 'update': 
     15                check_admin_referer('update-options'); 
     16         
     17                if ( !$_POST['page_options'] ) { 
     18                        foreach ( (array) $_POST as $key => $value) { 
     19                                if ( !in_array($key, array('_wpnonce', '_wp_http_referer', 'delete', 'Update', 'action')) ) 
     20                                        $options[] = $key; 
     21                        } 
     22                } else { 
     23                        $options = explode(',', stripslashes($_POST['page_options'])); 
    2424                } 
    25         } else { 
    26                 $options = explode(',', stripslashes($_POST['page_options'])); 
    27         } 
    28  
    29         if ($options) { 
    30                 foreach ($options as $option) { 
    31                         $option = trim($option); 
    32                         $value = $_POST[$option]; 
    33                         if(!is_array($value))   $value = trim($value); 
    34                         $value = stripslashes_deep($value); 
    35                         update_option($option, $value); 
     25         
     26                if ($options) { 
     27                        foreach ($options as $option) { 
     28                                $option = trim($option); 
     29                                $value = $_POST[$option]; 
     30                                if( !is_array($value)) 
     31                                        $value = trim($value); 
     32                                $value = stripslashes_deep($value); 
     33                                update_option($option, $value); 
     34                        } 
    3635                } 
     36                $goback = wp_get_referer(); 
     37                $goback = add_query_arg('updated', 'true', $goback); 
     38                $goback = remove_query_arg('deleted', $goback); 
     39                 
     40                if( isset($_POST['delete']) ){ 
     41                        //Delete stuff 
     42                        $deleted_options = array(); 
     43                        foreach( (array) $_POST['delete'] as $group){ 
     44                                foreach($group as $option => $val){ 
     45                                        if( 'on' != $val ) //Just some extra added stuff 
     46                                                continue; 
     47                                        delete_option($option); 
     48                                        $deleted_options[] = $option; 
     49                                } 
     50                        } 
     51                        $goback = add_query_arg('deleted', implode(',',$deleted_options), $goback); 
     52                } 
     53                 
     54                wp_redirect($goback); 
     55                break; 
     56        case 'view': 
     57                check_admin_referer('view-option'); 
     58                include('admin-header.php'); ?> 
     59                <div class="wrap"> 
     60                        <h2><?php printf(__('Viewing Option: %s'),$option); ?></h2> 
     61                        <pre><?php 
     62                                $option_value = get_option($option); 
     63                                print_r($option_value); 
     64                        ?></pre> 
     65                </div> 
     66                <?php 
     67                include('admin-footer.php'); 
     68                break; 
     69        default: 
     70                wp_enqueue_script('jquery'); 
     71                add_action('admin_head','option_head'); 
     72                function option_head(){ ?> 
     73<script type="text/javascript"> 
     74        function toggleSection(section) { 
     75                jQuery("input:checkbox[@name^='delete[" + section + "]']").each( function(){ this.checked = !this.checked; } ); 
     76                return false; 
    3777        } 
    38  
    39         $goback = add_query_arg('updated', 'true', wp_get_referer()); 
    40         wp_redirect($goback); 
    41     break; 
    42  
    43 default: 
     78        function submitForm(){ 
     79                var deleteItems = jQuery("input:checkbox:checked"); 
     80                if( deleteItems.size() == 0) 
     81                        return true; 
     82                var messagePrompt = "<?php _e('Are you sure you wish to delete the following options?'); ?>"; 
     83                deleteItems.each( function() { messagePrompt += "\n" + this.title; }); 
     84                return confirm(messagePrompt); 
     85        } 
     86</script> 
     87<?php 
     88        } 
     89         
    4490        include('admin-header.php'); ?> 
    45  
     91        <?php 
     92                if( isset($_GET['deleted']) ) 
     93                        echo '<div id="deleted" class="updated fade"><p>' . sprintf(__('The following options were <strong>deleted</strong>: <em>%s</em>'),str_replace(',',', ',$_GET['deleted'])) . '</p></div>'; 
     94        ?> 
    4695<div class="wrap"> 
    47   <h2><?php _e('All Options'); ?></h2> 
    48   <form name="form" action="options.php" method="post" id="all-options"> 
    49   <?php wp_nonce_field('update-options') ?> 
    50   <input type="hidden" name="action" value="update" /> 
     96        <form name="form" action="options.php" method="post" id="all-options" onsubmit="return submitForm();"> 
     97        <?php wp_nonce_field('update-options'); ?> 
     98        <input type="hidden" name="action" value="update" /> 
    5199        <p class="submit"><input type="submit" name="Update" value="<?php _e('Update Options &raquo;') ?>" /></p> 
    52   <table width="98%"> 
     100        <table width="98%"> 
    53101<?php 
    54 $options = $wpdb->get_results("SELECT * FROM $wpdb->options ORDER BY option_name"); 
     102global $wpdb; 
     103$raw_options = $wpdb->get_results("SELECT * FROM $wpdb->options ORDER BY option_name"); 
    55104 
    56 foreach ( (array) $options as $option) : 
    57         $disabled = ''; 
    58         $option->option_name = attribute_escape($option->option_name); 
    59         if ( is_serialized($option->option_value) ) { 
    60                 if ( is_serialized_string($option->option_value) ) { 
    61                         // this is a serialized string, so we should display it 
    62                         $value = maybe_unserialize($option->option_value); 
     105$groupedOptions = array('general'=>array()); 
     106//Group options. 
     107foreach( (array) $raw_options as $option ){ 
     108        $group = substr($option->option_name,0,strpos($option->option_name,'_')); 
     109        if( empty($group) )  
     110                $group = 'general'; 
     111        $groupedOptions[ $group ][] = $option; 
     112} 
     113 
     114//Only have group options if there is > 3 options. 
     115$wp_options = array('default', 'wp'); 
     116foreach ( (array) $groupedOptions as $group => $options){ 
     117        if( count($options) < 3 || in_array($group, $wp_options) ){ 
     118                $groupedOptions['general'] = array_merge($groupedOptions['general'], $options); 
     119                unset( $groupedOptions[$group] ); 
     120        } 
     121} 
     122 
     123foreach ( (array) $groupedOptions as $group => $options){ 
     124        //Sort the options alphabetically by option name. 
     125        usort($options, create_function('$a, $b', 'return strcasecmp($a->option_name, $b->option_name);')); 
     126         
     127        echo "<tr><td colspan='3'><h2>'" . ucwords($group) ."' " .  __('Options') . "</h2></td></tr>"; 
     128        echo '<tr><th style="text-align:left">' . __('Delete?') . '</th><th colspan="2">&nbsp;</th></tr>'; 
     129         
     130        foreach ( (array) $options as $option){ 
     131                $disabled = ''; 
     132                $serialized_view = ''; 
     133                $option->option_name = attribute_escape($option->option_name); 
     134                if ( is_serialized($option->option_value) ) { 
     135                        if ( is_serialized_string($option->option_value) ) { 
     136                                // this is a serialized string, so we should display it 
     137                                $value = maybe_unserialize($option->option_value); 
     138                                $options_to_update[] = $option->option_name; 
     139                                $class = 'all-options'; 
     140                        } else { 
     141                                $value = __('SERIALIZED DATA'); 
     142                                $disabled = ' disabled="disabled"'; 
     143                                $class = 'all-options disabled'; 
     144                                $serialized_view = sprintf(' <a href="%s">%s</a>',  
     145                                                                                        wp_nonce_url('options.php?action=view&option=' . urlencode($option->option_name), 'view-option'), 
     146                                                                                        __('View &raquo;')); 
     147                        } 
     148                } else { 
     149                        $value = $option->option_value; 
    63150                        $options_to_update[] = $option->option_name; 
    64151                        $class = 'all-options'; 
    65                 } else { 
    66                         $value = 'SERIALIZED DATA'; 
    67                         $disabled = ' disabled="disabled"'; 
    68                         $class = 'all-options disabled'; 
    69152                } 
    70         } else { 
    71                 $value = $option->option_value; 
    72                 $options_to_update[] = $option->option_name; 
    73                 $class = 'all-options'; 
     153                echo " 
     154        <tr> 
     155                <td class='delete'><input type='checkbox' name='delete[$group][$option->option_name]' title='$option->option_name' /></td> 
     156                <th scope='row'><label for='$option->option_name'>$option->option_name</label></th> 
     157        <td>"; 
     158         
     159                if (strpos($value, "\n") !== false) 
     160                        echo "<textarea class='$class' name='$option->option_name' id='$option->option_name' cols='30' rows='5'>" . wp_specialchars($value) . "</textarea>$serialized_view"; 
     161                else 
     162                        echo "<input class='$class' type='text' name='$option->option_name' id='$option->option_name' size='30' value='" . attribute_escape($value) . "'$disabled />$serialized_view"; 
     163                echo "</td>"; 
     164                echo "</tr>"; 
    74165        } 
    75         echo " 
    76 <tr> 
    77         <th scope='row'><label for='$option->option_name'>$option->option_name</label></th> 
    78 <td>"; 
    79  
    80         if (strpos($value, "\n") !== false) echo "<textarea class='$class' name='$option->option_name' id='$option->option_name' cols='30' rows='5'>" . wp_specialchars($value) . "</textarea>"; 
    81         else echo "<input class='$class' type='text' name='$option->option_name' id='$option->option_name' size='30' value='" . attribute_escape($value) . "'$disabled />"; 
    82  
    83         echo "</td> 
    84 </tr>"; 
    85 endforeach; 
     166        //Group footer 
     167        echo "<tr><td><a href='#' onclick='return toggleSection(\"$group\");'>" . __('Invert Selection') . "</a></td><td colspan='2'>&nbsp;</td></tr>"; 
     168} 
    86169?> 
    87   </table> 
    88 <?php $options_to_update = implode(',', $options_to_update); ?> 
    89 <p class="submit"><input type="hidden" name="page_options" value="<?php echo $options_to_update; ?>" /><input type="submit" name="Update" value="<?php _e('Update Options &raquo;') ?>" /></p> 
    90   </form> 
     170        </table> 
     171        <p class="submit"> 
     172                <input type="hidden" name="page_options" value="<?php echo implode(',', $options_to_update); ?>" /> 
     173                <input type="submit" name="Update" value="<?php _e('Update Options &raquo;') ?>" /> 
     174        </p> 
     175        </form> 
    91176</div> 
    92  
    93  
    94177<?php 
    95 break; 
    96 } // end switch 
    97  
    98 include('admin-footer.php'); 
    99 ?> 
     178        include('admin-footer.php'); 
     179}//End switch 
     180?> 
     181 No newline at end of file