WordPress.org

Make WordPress Core

Ticket #18623: custom-background.php-step-1.diff

File custom-background.php-step-1.diff, 15.8 KB (added by kobenland, 3 years ago)

Refactoring of custom-background.php. I'm just throwing it out there, Feedback more than welcome!

  • wp-admin/custom-background.php

     
    6969                add_action("load-$page", array(&$this, 'admin_load')); 
    7070                add_action("load-$page", array(&$this, 'take_action'), 49); 
    7171                add_action("load-$page", array(&$this, 'handle_upload'), 49); 
     72                add_action("load-$page", array(&$this, 'settings'), 50); 
     73                add_action('admin_notices', array(&$this, 'admin_notices')); 
    7274 
    7375                if ( $this->admin_header_callback ) 
    7476                        add_action("admin_head-$page", $this->admin_header_callback, 51); 
     
    99101                wp_enqueue_script('custom-background'); 
    100102                wp_enqueue_style('farbtastic'); 
    101103        } 
     104         
     105        function settings() { 
     106                if ( $this->admin_image_div_callback ) { 
     107                        call_user_func($this->admin_image_div_callback); 
     108                } else { 
     109                        add_settings_section( 'background-image', __('Background Image'), '__return_false', 'custom-background-image' ); 
     110                        add_settings_field( 'preview', __('Preview'), array(&$this, 'preview_field'), 'custom-background-image', 'background-image' ); 
     111 
     112                        if ( get_background_image() ) 
     113                                add_settings_field( 'remove-background', __('Remove Image'), array(&$this, 'remove_background_field'), 'custom-background-image', 'background-image' ); 
     114                         
     115                        if ( defined( 'BACKGROUND_IMAGE' ) ) 
     116                                add_settings_field( 'reset-background', __('Restore Original Image'), array(&$this, 'reset_background_field'), 'custom-background-image', 'background-image' ); 
     117                                 
     118                        add_settings_field( 'custom-background-upload', __('Upload Image'), array(&$this, 'background_upload_field'), 'custom-background-image', 'background-image' ); 
     119                } 
     120                 
     121                add_settings_section( 'display-options', __('Display Options'), '__return_false', $this->page ); 
     122                if ( get_background_image() ) { 
     123                        add_settings_field( 'background-position', __('Position'), array(&$this, 'background_position_field'), $this->page, 'display-options' ); 
     124                        add_settings_field( 'background-repeat', __('Repeat'), array(&$this, 'background_repeat_field'), $this->page, 'display-options' ); 
     125                        add_settings_field( 'background-attachment', __('Attachment'), array(&$this, 'background_attachment_field'), $this->page, 'display-options' ); 
     126                } 
     127                add_settings_field( 'background-color', __('Background Color'), array(&$this, 'background_color_field'), $this->page, 'display-options' ); 
     128        } 
     129         
     130        function preview_field() { 
     131                $background_styles = ''; 
     132                if ( $bgcolor = get_background_color() ) 
     133                        $background_styles .= 'background-color: #' . $bgcolor . ';'; 
     134                 
     135                if ( get_background_image() ) { 
     136                        // background-image URL must be single quote, see below 
     137                        $background_styles .= ' background-image: url(\'' . get_theme_mod('background_image_thumb', '') . '\');' 
     138                                . ' background-repeat: ' . get_theme_mod('background_repeat', 'repeat') . ';' 
     139                                . ' background-position: top ' . get_theme_mod('background_position_x', 'left'); 
     140                } 
     141                ?> 
     142                <div id="custom-background-image" style="<?php echo $background_styles; ?>"><?php // must be double quote, see above ?> 
     143                <?php if ( get_background_image() ) { ?> 
     144                <img class="custom-background-image" src="<?php echo get_theme_mod('background_image_thumb', ''); ?>" style="visibility:hidden;" alt="" /><br /> 
     145                <img class="custom-background-image" src="<?php echo get_theme_mod('background_image_thumb', ''); ?>" style="visibility:hidden;" alt="" /> 
     146                <?php } ?> 
     147                </div> 
     148                <?php 
     149        } 
     150         
     151        function remove_background_field() { 
     152                echo '<form method="post" action="">'; 
     153                                wp_nonce_field('custom-background-remove', '_wpnonce-custom-background-remove'); 
     154                                submit_button( __( 'Remove Background Image' ), 'button', 'remove-background', false ); 
     155                                echo '<br/>'; 
     156                                _e('This will remove the background image. You will not be able to restore any customizations.'); 
     157                echo '</form>'; 
     158        } 
     159         
     160        function restore_background_field() { 
     161                echo '<form method="post" action="">'; 
     162                                wp_nonce_field('custom-background-reset', '_wpnonce-custom-background-reset'); 
     163                                submit_button( __( 'Restore Original Image' ), 'button', 'reset-background', false ); 
     164                                echo '<br/>'; 
     165                                _e('This will restore the original background image. You will not be able to restore any customizations.'); 
     166                echo '</form>'; 
     167        } 
     168         
     169        function background_upload_field() { 
     170                ?> 
     171                <form enctype="multipart/form-data" id="upload-form" method="post" action=""> 
     172                <label for="upload"><?php _e('Choose an image from your computer:'); ?></label><br /> 
     173                <input type="file" id="upload" name="import" /> 
     174                <input type="hidden" name="action" value="save" /> 
     175                <?php 
     176                wp_nonce_field('custom-background-upload', '_wpnonce-custom-background-upload'); 
     177                submit_button( __( 'Upload' ), 'button', 'submit', false ); 
     178                ?> 
     179                </form> 
     180                <?php 
     181        } 
     182         
     183        function background_position_field() { 
     184                ?> 
     185                <fieldset> 
     186                        <legend class="screen-reader-text"><span><?php _e( 'Background Position' ); ?></span></legend> 
     187                        <label> 
     188                                <input name="background-position-x" type="radio" value="left"<?php checked('left', get_theme_mod('background_position_x', 'left')); ?> /> 
     189                                <?php _e('Left') ?> 
     190                        </label> 
     191                        <label> 
     192                                <input name="background-position-x" type="radio" value="center"<?php checked('center', get_theme_mod('background_position_x', 'left')); ?> /> 
     193                                <?php _e('Center') ?> 
     194                        </label> 
     195                        <label> 
     196                                <input name="background-position-x" type="radio" value="right"<?php checked('right', get_theme_mod('background_position_x', 'left')); ?> /> 
     197                                <?php _e('Right') ?> 
     198                        </label> 
     199                </fieldset> 
     200                <?php 
     201        } 
     202         
     203        function background_repeat_field() { 
     204                ?> 
     205                <fieldset> 
     206                        <legend class="screen-reader-text"><span><?php _e( 'Background Repeat' ); ?></span></legend> 
     207                        <label> 
     208                                <input type="radio" name="background-repeat" value="no-repeat"<?php checked('no-repeat', get_theme_mod('background_repeat', 'repeat')); ?> /> 
     209                                <?php _e('No Repeat'); ?> 
     210                        </label> 
     211                        <label> 
     212                                <input type="radio" name="background-repeat" value="repeat"<?php checked('repeat', get_theme_mod('background_repeat', 'repeat')); ?> /> 
     213                                <?php _e('Tile'); ?> 
     214                        </label> 
     215                        <label> 
     216                                <input type="radio" name="background-repeat" value="repeat-x"<?php checked('repeat-x', get_theme_mod('background_repeat', 'repeat')); ?> /> 
     217                                <?php _e('Tile Horizontally'); ?> 
     218                        </label> 
     219                        <label> 
     220                                <input type="radio" name="background-repeat" value="repeat-y"<?php checked('repeat-y', get_theme_mod('background_repeat', 'repeat')); ?> /> 
     221                                <?php _e('Tile Vertically'); ?> 
     222                        </label> 
     223                </fieldset> 
     224                <?php 
     225        } 
     226         
     227        function background_attachment_field() { 
     228                ?> 
     229                <fieldset> 
     230                        <legend class="screen-reader-text"><span><?php _e( 'Background Attachment' ); ?></span></legend> 
     231                        <label> 
     232                                <input name="background-attachment" type="radio" value="scroll" <?php checked('scroll', get_theme_mod('background_attachment', 'scroll')); ?> /> 
     233                                <?php _e('Scroll') ?> 
     234                        </label> 
     235                        <label> 
     236                                <input name="background-attachment" type="radio" value="fixed" <?php checked('fixed', get_theme_mod('background_attachment', 'scroll')); ?> /> 
     237                                <?php _e('Fixed') ?> 
     238                        </label> 
     239                </fieldset> 
     240                <?php 
     241        } 
     242         
     243        function background_color_field() { 
     244                ?> 
     245                <fieldset> 
     246                        <legend class="screen-reader-text"><span><?php _e( 'Background Color' ); ?></span></legend> 
     247                        <?php $show_clear = get_background_color() ? '' : ' style="display:none"'; ?> 
     248                        <input type="text" name="background-color" id="background-color" value="#<?php echo esc_attr(get_background_color()) ?>" /> 
     249                        <a class="hide-if-no-js" href="#" id="pickcolor"><?php _e('Select a Color'); ?></a> <span<?php echo $show_clear; ?> class="hide-if-no-js" id="clearcolor"> (<a href="#"><?php _e( 'Clear' ); ?></a>)</span> 
     250                        <div id="colorPickerDiv" style="z-index: 100; background:#eee; border:1px solid #ccc; position:absolute; display:none;"></div> 
     251                </fieldset> 
     252                <?php 
     253        } 
     254         
     255        function updated() { 
     256                if ( ! get_settings_errors('custom-background') ) 
     257                        add_settings_error( 'custom-background', 'background-updated',sprintf(__( 'Background updated. <a href="%s">Visit your site</a> to see how it looks.' ), home_url( '/' )), 'updated' ); 
     258        } 
     259         
     260        function admin_notices() { 
     261                settings_errors( 'custom-background' ); 
     262        } 
    102263 
    103264        /** 
    104265         * Execute custom background modification. 
     
    114275                        check_admin_referer('custom-background-reset', '_wpnonce-custom-background-reset'); 
    115276                        remove_theme_mod('background_image'); 
    116277                        remove_theme_mod('background_image_thumb'); 
    117                         $this->updated = true; 
     278                        $this->updated(); 
    118279                        return; 
    119280                } 
    120281 
     
    123284                        check_admin_referer('custom-background-remove', '_wpnonce-custom-background-remove'); 
    124285                        set_theme_mod('background_image', ''); 
    125286                        set_theme_mod('background_image_thumb', ''); 
    126                         $this->updated = true; 
     287                        $this->updated(); 
    127288                        return; 
    128289                } 
    129290 
     
    163324                                set_theme_mod('background_color', ''); 
    164325                } 
    165326 
    166                 $this->updated = true; 
     327                $this->updated(); 
    167328        } 
    168329 
    169330        /** 
     
    174335        function admin_page() { 
    175336?> 
    176337<div class="wrap" id="custom-background"> 
    177 <?php screen_icon(); ?> 
    178 <h2><?php _e('Custom Background'); ?></h2> 
    179 <?php if ( !empty($this->updated) ) { ?> 
    180 <div id="message" class="updated"> 
    181 <p><?php printf( __( 'Background updated. <a href="%s">Visit your site</a> to see how it looks.' ), home_url( '/' ) ); ?></p> 
     338        <?php screen_icon(); ?> 
     339        <h2><?php _e('Custom Background'); ?></h2> 
     340         
     341        <?php do_settings_sections( 'custom-background-image' );?> 
     342         
     343        <form method="post" action=""> 
     344        <?php 
     345        do_settings_sections( $this->page ); 
     346        wp_nonce_field( 'custom-background' ); 
     347        submit_button( null, 'primary', 'save-background-options' ); ?> 
     348        </form> 
    182349</div> 
    183 <?php } 
    184  
    185         if ( $this->admin_image_div_callback ) { 
    186                 call_user_func($this->admin_image_div_callback); 
    187         } else { 
    188 ?> 
    189 <h3><?php _e('Background Image'); ?></h3> 
    190 <table class="form-table"> 
    191 <tbody> 
    192 <tr valign="top"> 
    193 <th scope="row"><?php _e('Preview'); ?></th> 
    194 <td> 
    195 <?php 
    196 $background_styles = ''; 
    197 if ( $bgcolor = get_background_color() ) 
    198         $background_styles .= 'background-color: #' . $bgcolor . ';'; 
    199  
    200 if ( get_background_image() ) { 
    201         // background-image URL must be single quote, see below 
    202         $background_styles .= ' background-image: url(\'' . get_theme_mod('background_image_thumb', '') . '\');' 
    203                 . ' background-repeat: ' . get_theme_mod('background_repeat', 'repeat') . ';' 
    204                 . ' background-position: top ' . get_theme_mod('background_position_x', 'left'); 
    205 } 
    206 ?> 
    207 <div id="custom-background-image" style="<?php echo $background_styles; ?>"><?php // must be double quote, see above ?> 
    208 <?php if ( get_background_image() ) { ?> 
    209 <img class="custom-background-image" src="<?php echo get_theme_mod('background_image_thumb', ''); ?>" style="visibility:hidden;" alt="" /><br /> 
    210 <img class="custom-background-image" src="<?php echo get_theme_mod('background_image_thumb', ''); ?>" style="visibility:hidden;" alt="" /> 
    211 <?php } ?> 
    212 </div> 
    213 <?php } ?> 
    214 </td> 
    215 </tr> 
    216 <?php if ( get_background_image() ) : ?> 
    217 <tr valign="top"> 
    218 <th scope="row"><?php _e('Remove Image'); ?></th> 
    219 <td> 
    220 <form method="post" action=""> 
    221 <?php wp_nonce_field('custom-background-remove', '_wpnonce-custom-background-remove'); ?> 
    222 <?php submit_button( __( 'Remove Background Image' ), 'button', 'remove-background', false ); ?><br/> 
    223 <?php _e('This will remove the background image. You will not be able to restore any customizations.') ?> 
    224 </form> 
    225 </td> 
    226 </tr> 
    227 <?php endif; ?> 
    228  
    229 <?php if ( defined( 'BACKGROUND_IMAGE' ) ) : // Show only if a default background image exists ?> 
    230 <tr valign="top"> 
    231 <th scope="row"><?php _e('Restore Original Image'); ?></th> 
    232 <td> 
    233 <form method="post" action=""> 
    234 <?php wp_nonce_field('custom-background-reset', '_wpnonce-custom-background-reset'); ?> 
    235 <?php submit_button( __( 'Restore Original Image' ), 'button', 'reset-background', false ); ?><br/> 
    236 <?php _e('This will restore the original background image. You will not be able to restore any customizations.') ?> 
    237 </form> 
    238 </td> 
    239 </tr> 
    240  
    241 <?php endif; ?> 
    242 <tr valign="top"> 
    243 <th scope="row"><?php _e('Upload Image'); ?></th> 
    244 <td><form enctype="multipart/form-data" id="upload-form" method="post" action=""> 
    245 <label for="upload"><?php _e('Choose an image from your computer:'); ?></label><br /><input type="file" id="upload" name="import" /> 
    246 <input type="hidden" name="action" value="save" /> 
    247 <?php wp_nonce_field('custom-background-upload', '_wpnonce-custom-background-upload') ?> 
    248 <?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?> 
    249 </form> 
    250 </td> 
    251 </tr> 
    252 </tbody> 
    253 </table> 
    254  
    255 <h3><?php _e('Display Options') ?></h3> 
    256 <form method="post" action=""> 
    257 <table class="form-table"> 
    258 <tbody> 
    259 <?php if ( get_background_image() ) : ?> 
    260 <tr valign="top"> 
    261 <th scope="row"><?php _e( 'Position' ); ?></th> 
    262 <td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Position' ); ?></span></legend> 
    263 <label> 
    264 <input name="background-position-x" type="radio" value="left"<?php checked('left', get_theme_mod('background_position_x', 'left')); ?> /> 
    265 <?php _e('Left') ?> 
    266 </label> 
    267 <label> 
    268 <input name="background-position-x" type="radio" value="center"<?php checked('center', get_theme_mod('background_position_x', 'left')); ?> /> 
    269 <?php _e('Center') ?> 
    270 </label> 
    271 <label> 
    272 <input name="background-position-x" type="radio" value="right"<?php checked('right', get_theme_mod('background_position_x', 'left')); ?> /> 
    273 <?php _e('Right') ?> 
    274 </label> 
    275 </fieldset></td> 
    276 </tr> 
    277  
    278 <tr valign="top"> 
    279 <th scope="row"><?php _e( 'Repeat' ); ?></th> 
    280 <td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Repeat' ); ?></span></legend> 
    281 <label><input type="radio" name="background-repeat" value="no-repeat"<?php checked('no-repeat', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('No Repeat'); ?></label> 
    282         <label><input type="radio" name="background-repeat" value="repeat"<?php checked('repeat', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('Tile'); ?></label> 
    283         <label><input type="radio" name="background-repeat" value="repeat-x"<?php checked('repeat-x', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('Tile Horizontally'); ?></label> 
    284         <label><input type="radio" name="background-repeat" value="repeat-y"<?php checked('repeat-y', get_theme_mod('background_repeat', 'repeat')); ?> /> <?php _e('Tile Vertically'); ?></label> 
    285 </fieldset></td> 
    286 </tr> 
    287  
    288 <tr valign="top"> 
    289 <th scope="row"><?php _e( 'Attachment' ); ?></th> 
    290 <td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Attachment' ); ?></span></legend> 
    291 <label> 
    292 <input name="background-attachment" type="radio" value="scroll" <?php checked('scroll', get_theme_mod('background_attachment', 'scroll')); ?> /> 
    293 <?php _e('Scroll') ?> 
    294 </label> 
    295 <label> 
    296 <input name="background-attachment" type="radio" value="fixed" <?php checked('fixed', get_theme_mod('background_attachment', 'scroll')); ?> /> 
    297 <?php _e('Fixed') ?> 
    298 </label> 
    299 </fieldset></td> 
    300 </tr> 
    301 <?php endif; // get_background_image() ?> 
    302 <tr valign="top"> 
    303 <th scope="row"><?php _e( 'Background Color' ); ?></th> 
    304 <td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Color' ); ?></span></legend> 
    305 <?php $show_clear = get_background_color() ? '' : ' style="display:none"'; ?> 
    306 <input type="text" name="background-color" id="background-color" value="#<?php echo esc_attr(get_background_color()) ?>" /> 
    307 <a class="hide-if-no-js" href="#" id="pickcolor"><?php _e('Select a Color'); ?></a> <span<?php echo $show_clear; ?> class="hide-if-no-js" id="clearcolor"> (<a href="#"><?php _e( 'Clear' ); ?></a>)</span> 
    308 <div id="colorPickerDiv" style="z-index: 100; background:#eee; border:1px solid #ccc; position:absolute; display:none;"></div> 
    309 </fieldset></td> 
    310 </tr> 
    311 </tbody> 
    312 </table> 
    313  
    314 <?php wp_nonce_field('custom-background'); ?> 
    315 <?php submit_button( null, 'primary', 'save-background-options' ); ?> 
    316 </form> 
    317  
    318 </div> 
    319350<?php 
    320351        } 
    321352 
     
    363394                set_theme_mod('background_image_thumb', esc_url( $thumbnail[0] ) ); 
    364395 
    365396                do_action('wp_create_file_in_uploads', $file, $id); // For replication 
    366                 $this->updated = true; 
     397                $this->updated(); 
    367398        } 
    368399 
    369400}