WordPress 3.4
[autoinstalls/wordpress.git] / wp-admin / custom-background.php
index 168c65e33f5fe6c36978f937d3e5acf89eb7cb57..8fb1399b3b87ebd6c4a320cf6585e79e49964e90 100644 (file)
@@ -53,6 +53,9 @@ class Custom_Background {
        function __construct($admin_header_callback = '', $admin_image_div_callback = '') {
                $this->admin_header_callback = $admin_header_callback;
                $this->admin_image_div_callback = $admin_image_div_callback;
+
+               add_action( 'admin_menu', array( $this, 'init' ) );
+               add_action( 'wp_ajax_set-background-image', array( $this, 'wp_set_background_image' ) );
        }
 
        /**
@@ -70,6 +73,12 @@ class Custom_Background {
                add_action("load-$page", array(&$this, 'take_action'), 49);
                add_action("load-$page", array(&$this, 'handle_upload'), 49);
 
+               if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-background' ) {
+                       add_filter( 'attachment_fields_to_edit', array( $this, 'attachment_fields_to_edit' ), 10, 2 );
+                       add_filter( 'media_upload_tabs', array( $this, 'filter_upload_tabs' ) );
+                       add_filter( 'media_upload_mime_type_links', '__return_empty_array' );
+               }
+
                if ( $this->admin_header_callback )
                        add_action("admin_head-$page", $this->admin_header_callback, 51);
        }
@@ -96,6 +105,8 @@ class Custom_Background {
                        '<p>' . __( '<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>' ) . '</p>'
                );
 
+               add_thickbox();
+               wp_enqueue_script('media-upload');
                wp_enqueue_script('custom-background');
                wp_enqueue_style('farbtastic');
        }
@@ -124,6 +135,7 @@ class Custom_Background {
                        set_theme_mod('background_image', '');
                        set_theme_mod('background_image_thumb', '');
                        $this->updated = true;
+                       wp_safe_redirect( $_POST['_wp_http_referer'] );
                        return;
                }
 
@@ -199,15 +211,15 @@ if ( $bgcolor = get_background_color() )
 
 if ( get_background_image() ) {
        // background-image URL must be single quote, see below
-       $background_styles .= ' background-image: url(\'' . get_theme_mod('background_image_thumb', '') . '\');'
+       $background_styles .= ' background-image: url(\'' . set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ) . '\');'
                . ' background-repeat: ' . get_theme_mod('background_repeat', 'repeat') . ';'
                . ' background-position: top ' . get_theme_mod('background_position_x', 'left');
 }
 ?>
 <div id="custom-background-image" style="<?php echo $background_styles; ?>"><?php // must be double quote, see above ?>
 <?php if ( get_background_image() ) { ?>
-<img class="custom-background-image" src="<?php echo get_theme_mod('background_image_thumb', ''); ?>" style="visibility:hidden;" alt="" /><br />
-<img class="custom-background-image" src="<?php echo get_theme_mod('background_image_thumb', ''); ?>" style="visibility:hidden;" alt="" />
+<img class="custom-background-image" src="<?php echo set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ); ?>" style="visibility:hidden;" alt="" /><br />
+<img class="custom-background-image" src="<?php echo set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ); ?>" style="visibility:hidden;" alt="" />
 <?php } ?>
 </div>
 <?php } ?>
@@ -226,7 +238,8 @@ if ( get_background_image() ) {
 </tr>
 <?php endif; ?>
 
-<?php if ( defined( 'BACKGROUND_IMAGE' ) ) : // Show only if a default background image exists ?>
+<?php $default_image = get_theme_support( 'custom-background', 'default-image' ); ?>
+<?php if ( $default_image && get_background_image() != $default_image ) : ?>
 <tr valign="top">
 <th scope="row"><?php _e('Restore Original Image'); ?></th>
 <td>
@@ -240,13 +253,25 @@ if ( get_background_image() ) {
 
 <?php endif; ?>
 <tr valign="top">
-<th scope="row"><?php _e('Upload Image'); ?></th>
+<th scope="row"><?php _e('Select Image'); ?></th>
 <td><form enctype="multipart/form-data" id="upload-form" method="post" action="">
-<label for="upload"><?php _e('Choose an image from your computer:'); ?></label><br /><input type="file" id="upload" name="import" />
-<input type="hidden" name="action" value="save" />
-<?php wp_nonce_field('custom-background-upload', '_wpnonce-custom-background-upload') ?>
-<?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?>
-</form>
+       <p>
+               <label for="upload"><?php _e( 'Choose an image from your computer:' ); ?></label><br />
+               <input type="file" id="upload" name="import" />
+               <input type="hidden" name="action" value="save" />
+               <?php wp_nonce_field( 'custom-background-upload', '_wpnonce-custom-background-upload' ); ?>
+               <?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?>
+       </p>
+       <?php
+               $image_library_url = get_upload_iframe_src( 'image', null, 'library' );
+               $image_library_url = remove_query_arg( 'TB_iframe', $image_library_url );
+               $image_library_url = add_query_arg( array( 'context' => 'custom-background', 'TB_iframe' => 1 ), $image_library_url );
+       ?>
+       <p>
+               <label for="choose-from-library-link"><?php _e( 'Or choose an image from your media library:' ); ?></label><br />
+               <a id="choose-from-library-link" class="button thickbox" href="<?php echo esc_url( $image_library_url ); ?>"><?php _e( 'Choose Image' ); ?></a>
+       </p>
+       </form>
 </td>
 </tr>
 </tbody>
@@ -302,9 +327,10 @@ if ( get_background_image() ) {
 <tr valign="top">
 <th scope="row"><?php _e( 'Background Color' ); ?></th>
 <td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Color' ); ?></span></legend>
-<?php $show_clear = get_background_color() ? '' : ' style="display:none"'; ?>
+<?php $show_clear = get_theme_mod('background_color') ? '' : ' style="display:none"'; ?>
 <input type="text" name="background-color" id="background-color" value="#<?php echo esc_attr(get_background_color()) ?>" />
-<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>
+<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 current_theme_supports( 'custom-background', 'default-color' ) ? _e( 'Default' ) : _e( 'Clear' ); ?></a>)</span>
+<input type="hidden" id="defaultcolor" value="<?php if ( current_theme_supports( 'custom-background', 'default-color' ) ) echo '#' . esc_attr( get_theme_support( 'custom-background', 'default-color' ) ); ?>" />
 <div id="colorPickerDiv" style="z-index: 100; background:#eee; border:1px solid #ccc; position:absolute; display:none;"></div>
 </fieldset></td>
 </tr>
@@ -357,14 +383,50 @@ if ( get_background_image() ) {
                wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
                update_post_meta( $id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) );
 
-               set_theme_mod('background_image', esc_url($url));
+               set_theme_mod('background_image', esc_url_raw($url));
 
                $thumbnail = wp_get_attachment_image_src( $id, 'thumbnail' );
-               set_theme_mod('background_image_thumb', esc_url( $thumbnail[0] ) );
+               set_theme_mod('background_image_thumb', esc_url_raw( $thumbnail[0] ) );
 
                do_action('wp_create_file_in_uploads', $file, $id); // For replication
                $this->updated = true;
        }
 
+       /**
+        * Replace default attachment actions with "Set as background" link.
+        *
+        * @since 3.4.0
+        */
+       function attachment_fields_to_edit( $form_fields, $post ) {
+               $form_fields = array( 'image-size' => $form_fields['image-size'] );
+               $form_fields['buttons'] = array( 'tr' => '<tr class="submit"><td></td><td><a data-attachment-id="' . $post->ID . '" class="wp-set-background">' . __( 'Set as background' ) . '</a></td></tr>' );
+               $form_fields['context'] = array( 'input' => 'hidden', 'value' => 'custom-background' );
+
+               return $form_fields;
+       }
+
+       /**
+        * Leave only "Media Library" tab in the uploader window.
+        *
+        * @since 3.4.0
+        */
+       function filter_upload_tabs() {
+               return array( 'library' => __('Media Library') );
+       }
+
+       public function wp_set_background_image() {
+               if ( ! current_user_can('edit_theme_options') || ! isset( $_POST['attachment_id'] ) ) exit;
+               $attachment_id = absint($_POST['attachment_id']);
+               $sizes = array_keys(apply_filters( 'image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')) ));
+               $size = 'thumbnail';
+               if ( in_array( $_POST['size'], $sizes ) )
+                       $size = esc_attr( $_POST['size'] );
+
+               update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) );
+               $url = wp_get_attachment_image_src( $attachment_id, $size );
+               $thumbnail = wp_get_attachment_image_src( $attachment_id, 'thumbnail' );
+               set_theme_mod( 'background_image', esc_url_raw( $url[0] ) );
+               set_theme_mod( 'background_image_thumb', esc_url_raw( $thumbnail[0] ) );
+               exit;
+       }
 }
-?>