WordPress.org

Make WordPress Core

Ticket #5316: 5316.diff

File 5316.diff, 8.8 KB (added by DD32, 11 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