WordPress.org

Make WordPress Core

Ticket #19840: 19840.3.diff

File 19840.3.diff, 13.3 KB (added by aaroncampbell, 4 years ago)
  • wp-admin/includes/media.php

     
    386386        return "<a href='" . esc_url( get_upload_iframe_src($type) ) . "' id='{$id}-add_{$type}' class='thickbox add_$type' title='" . esc_attr( $title ) . "'><img src='" . esc_url( admin_url( $icon ) ) . "' alt='$title' onclick='return false;' /></a>"; 
    387387} 
    388388 
    389 function get_upload_iframe_src( $type = null ) { 
     389function get_upload_iframe_src( $args = array() ) { 
    390390        global $post_ID; 
     391        $defaults = array( 'type' => '' ); 
     392        // Backwards compat for first parameter being type 
     393        if ( is_string( $args ) ) 
     394                $args = array( 'type' => $args ); 
    391395 
     396        $args = wp_parse_args( $args, $defaults ); 
     397 
    392398        $uploading_iframe_ID = (int) $post_ID; 
    393399        $upload_iframe_src = add_query_arg( 'post_id', $uploading_iframe_ID, admin_url('media-upload.php') ); 
    394400 
    395         if ( $type && 'media' != $type ) 
    396                 $upload_iframe_src = add_query_arg('type', $type, $upload_iframe_src); 
     401        if ( $args['type'] && 'media' != $args['type'] ) 
     402                $upload_iframe_src = add_query_arg('type', $args['type'], $upload_iframe_src); 
    397403 
    398         $upload_iframe_src = apply_filters($type . '_upload_iframe_src', $upload_iframe_src); 
     404        if ( $args['tab'] ) 
     405                $upload_iframe_src = add_query_arg('tab', $args['tab'], $upload_iframe_src); 
    399406 
     407        $upload_iframe_src = apply_filters($args['type'] . '_upload_iframe_src', $upload_iframe_src); 
     408 
    400409        return add_query_arg('TB_iframe', true, $upload_iframe_src); 
    401410} 
    402411 
  • wp-admin/js/custom-background.dev.js

     
    1010                jQuery('#clearcolor').hide(); 
    1111} 
    1212 
     13function send_to_editor( data ) { 
     14        data = jQuery.parseJSON(data); 
     15        jQuery.post(ajaxurl, { action: 'set-background-image', attachment_id: data.id, size: data.size }, function(){ 
     16                tb_remove(); 
     17                window.location.reload(); 
     18        }); 
     19} 
     20 
    1321jQuery(document).ready(function() { 
    1422        jQuery('#pickcolor').click(function() { 
    1523                jQuery('#colorPickerDiv').show(); 
  • wp-admin/custom-background.php

     
    5353        function __construct($admin_header_callback = '', $admin_image_div_callback = '') { 
    5454                $this->admin_header_callback = $admin_header_callback; 
    5555                $this->admin_image_div_callback = $admin_image_div_callback; 
     56                add_action('wp_ajax_set-background-image', array($this, 'wp_set_background_image')); 
    5657        } 
    5758 
    5859        /** 
     
    6970                add_action("load-$page", array(&$this, 'admin_load')); 
    7071                add_action("load-$page", array(&$this, 'take_action'), 49); 
    7172                add_action("load-$page", array(&$this, 'handle_upload'), 49); 
     73                add_filter('attachment_fields_to_edit', array(&$this, 'attachment_fields_to_edit'), 10, 2); 
     74                add_filter('image_send_to_editor', array(&$this, 'image_send_to_editor'), 10, 7); 
     75                add_filter('media_upload_tabs', array(&$this, 'filter_upload_tabs')); 
    7276 
    7377                if ( $this->admin_header_callback ) 
    7478                        add_action("admin_head-$page", $this->admin_header_callback, 51); 
     
    96100                        '<p>' . __( '<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>' ) . '</p>' 
    97101                ); 
    98102 
     103                add_thickbox(); 
     104                wp_enqueue_script('media-upload'); 
    99105                wp_enqueue_script('custom-background'); 
    100106                wp_enqueue_style('farbtastic'); 
    101107        } 
     
    246252<input type="hidden" name="action" value="save" /> 
    247253<?php wp_nonce_field('custom-background-upload', '_wpnonce-custom-background-upload') ?> 
    248254<?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?> 
    249 </form> 
     255<?php 
     256        $image_library_url = get_upload_iframe_src( array( 'type' => 'image', 'tab' => 'library' )); 
     257        $image_library_url = remove_query_arg('TB_iframe', $image_library_url); 
     258        $image_library_url = add_query_arg( array( 'context' => 'custom-background', 'TB_iframe' => 1 ), $image_library_url ); 
     259?> 
     260        </form> 
     261        <span class="howto"><?php _ex( 'or', 'Custom Background: Choose an image from your computer - or - Choose from image library' ); ?></span> <a class="thickbox" href="<?php echo $image_library_url; ?>"><?php _e( 'Choose from image library' ); ?></a> 
    250262</td> 
    251263</tr> 
    252264</tbody> 
     
    366378                $this->updated = true; 
    367379        } 
    368380 
     381        function attachment_fields_to_edit( $form_fields, $post ) { 
     382                if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-background' ) { 
     383                        $form_fields = array( 'image-size' => $form_fields['image-size'] ); // Reset 
     384                        $button = get_submit_button( __( 'Use as background image' ), 'button', "send[{$post->ID}]", false ); 
     385                        $form_fields['buttons'] = array( 'tr' => '<tr class="submit"><td></td><td>'.$button.'</td></tr>' ); 
     386                        $form_fields['context'] = array( 'input' => 'hidden', 'value' => 'custom-background' ); 
     387                } 
     388 
     389                return $form_fields; 
     390        } 
     391 
     392        function image_send_to_editor( $html, $id, $caption = '', $title = '', $align = '', $url = '', $size ) { 
     393                if ( isset( $_REQUEST['attachments'][$id]['context'] ) && $_REQUEST['attachments'][$id]['context'] == 'custom-background' ) 
     394                        return json_encode( array( 'id' => $id, 'size' => $size ) ); 
     395 
     396                return $html; 
     397        } 
     398 
     399        function filter_upload_tabs ( $tabs ){ 
     400                if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-background' ) 
     401                        return array( 'library' => __('Media Library') ); 
     402 
     403                return $tabs; 
     404        } 
     405 
     406        public function wp_set_background_image() { 
     407                if ( ! current_user_can('edit_theme_options') || ! isset( $_POST['attachment_id'] ) ) exit; 
     408                $attachment_id = absint($_POST['attachment_id']); 
     409                $sizes = array_keys(apply_filters( 'image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')) )); 
     410                $size = 'thumbnail'; 
     411                if ( in_array( $_POST['size'], $sizes ) ) 
     412                        $size = esc_attr( $_POST['size'] ); 
     413 
     414                update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) ); 
     415                $url = wp_get_attachment_image_src($attachment_id, $size); 
     416                $thumbnail = wp_get_attachment_image_src($attachment_id, 'thumbnail'); 
     417                set_theme_mod('background_image', esc_url($url[0])); 
     418                set_theme_mod('background_image_thumb', esc_url($thumbnail[0])); 
     419                exit; 
     420        } 
    369421} 
  • wp-admin/custom-header.php

     
    9090                add_action("admin_head-$page", array(&$this, 'take_action'), 50); 
    9191                add_action("admin_head-$page", array(&$this, 'js'), 50); 
    9292                add_action("admin_head-$page", $this->admin_header_callback, 51); 
     93 
     94                add_filter('attachment_fields_to_edit', array(&$this, 'attachment_fields_to_edit'), 10, 2); 
     95                add_filter('media_upload_tabs', array(&$this, 'filter_upload_tabs')); 
     96                add_filter('image_send_to_editor', array(&$this, 'image_send_to_editor'), 10, 2); 
    9397        } 
    9498 
    9599        /** 
     
    140144        function js_includes() { 
    141145                $step = $this->step(); 
    142146 
    143                 if ( ( 1 == $step || 3 == $step ) && $this->header_text() ) 
    144                         wp_enqueue_script('farbtastic'); 
    145                 elseif ( 2 == $step ) 
     147                if ( ( 1 == $step || 3 == $step ) ) { 
     148                        add_thickbox(); 
     149                        if ( $this->header_text() ) 
     150                                wp_enqueue_script('farbtastic'); 
     151                } elseif ( 2 == $step ) { 
    146152                        wp_enqueue_script('imgareaselect'); 
     153                } 
    147154        } 
    148155 
    149156        /** 
     
    325332         */ 
    326333        function js() { 
    327334                $step = $this->step(); 
    328                 if ( ( 1 == $step || 3 == $step ) && $this->header_text() ) 
    329                         $this->js_1(); 
    330                 elseif ( 2 == $step ) 
     335                if ( ( 1 == $step || 3 == $step ) ) { 
     336                        $this->js_0(); 
     337                        if ( $this->header_text() ) 
     338                                $this->js_1(); 
     339                } elseif ( 2 == $step ) { 
    331340                        $this->js_2(); 
     341                } 
    332342        } 
    333343 
    334344        /** 
     
    336346         * 
    337347         * @since 2.6.0 
    338348         */ 
     349        function js_0() { ?> 
     350<script type="text/javascript"> 
     351/* <![CDATA[ */ 
     352        step2_url = '<?php echo add_query_arg( array( 'page' => 'custom-header', 'step' => 2, '_wpnonce-custom-header-upload' => wp_create_nonce('custom-header-upload') ), admin_url('themes.php') ); ?>'; 
     353        function send_to_editor( file_id ) { 
     354                window.location = step2_url + '&file=' + file_id; 
     355        } 
     356/* ]]> */ 
     357</script> 
     358<?php 
     359        } 
     360 
     361        /** 
     362         * Display Javascript based on Step 1 and 3 if header text is active. 
     363         * 
     364         * @since 2.6.0 
     365         */ 
    339366        function js_1() { ?> 
    340367<script type="text/javascript"> 
    341368/* <![CDATA[ */ 
     
    581608                <?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?> 
    582609        </p> 
    583610        </form> 
     611        <?php 
     612                $image_library_url = get_upload_iframe_src( array( 'type' => 'image', 'tab' => 'library' )); 
     613                $image_library_url = remove_query_arg('TB_iframe', $image_library_url); 
     614                $image_library_url = add_query_arg( array( 'context' => 'custom-header', 'TB_iframe' => 1 ), $image_library_url ); 
     615        ?> 
     616        <span class="howto"><?php _ex( 'or', 'Custom Header: Choose an image from your computer - or - Choose from image library' ); ?></span> <a class="thickbox" href="<?php echo $image_library_url; ?>"><?php _e( 'Choose from image library' ); ?></a> 
    584617</td> 
    585618</tr> 
    586619<?php endif; ?> 
     
    698731                if ( ! current_theme_supports( 'custom-header-uploads' ) ) 
    699732                        wp_die( __( 'Cheatin&#8217; uh?' ) ); 
    700733 
    701                 $overrides = array('test_form' => false); 
    702                 $file = wp_handle_upload($_FILES['import'], $overrides); 
     734                if ( empty( $_POST ) && isset( $_GET['file'] ) ) { 
     735                        $id = absint($_GET['file']); 
     736                        $file = get_attached_file( $id, true ); 
     737                        $url = wp_get_attachment_image_src( $id, 'full'); 
     738                        $url = $url[0]; 
     739                } else if ( isset( $_POST ) ) { 
     740                        extract($this->step_2_manage_upload()); 
     741                } 
    703742 
    704                 if ( isset($file['error']) ) 
    705                         wp_die( $file['error'],  __( 'Image Upload Error' ) ); 
    706  
    707                 $url = $file['url']; 
    708                 $type = $file['type']; 
    709                 $file = $file['file']; 
    710                 $filename = basename($file); 
    711  
    712                 // Construct the object array 
    713                 $object = array( 
    714                 'post_title' => $filename, 
    715                 'post_content' => $url, 
    716                 'post_mime_type' => $type, 
    717                 'guid' => $url, 
    718                 'context' => 'custom-header' 
    719                 ); 
    720  
    721                 // Save the data 
    722                 $id = wp_insert_attachment($object, $file); 
    723  
    724743                list($width, $height, $type, $attr) = getimagesize( $file ); 
    725744 
    726745                $header_support = get_theme_support( 'custom-header' ); 
     
    777796        <input type="hidden" name="height" id="height" value="<?php echo esc_attr( $height ); ?>"/> 
    778797        <input type="hidden" name="attachment_id" id="attachment_id" value="<?php echo esc_attr( $id ); ?>" /> 
    779798        <input type="hidden" name="oitar" id="oitar" value="<?php echo esc_attr( $oitar ); ?>" /> 
     799        <?php if ( empty( $_POST ) && isset( $_GET['file'] ) ) { ?> 
     800        <input type="hidden" name="new-attachment" value="true" /> 
     801        <?php } ?> 
    780802        <?php wp_nonce_field( 'custom-header-crop-image' ) ?> 
    781803 
    782804        <?php submit_button( __( 'Crop and Publish' ) ); ?> 
     
    786808                <?php 
    787809        } 
    788810 
     811 
     812        function step_2_manage_upload() { 
     813                $overrides = array('test_form' => false); 
     814                $file = wp_handle_upload($_FILES['import'], $overrides); 
     815 
     816                if ( isset($file['error']) ) 
     817                        wp_die( $file['error'],  __( 'Image Upload Error' ) ); 
     818 
     819                $url = $file['url']; 
     820                $type = $file['type']; 
     821                $file = $file['file']; 
     822                $filename = basename($file); 
     823 
     824                // Construct the object array 
     825                $object = array( 
     826                'post_title' => $filename, 
     827                'post_content' => $url, 
     828                'post_mime_type' => $type, 
     829                'guid' => $url, 
     830                'context' => 'custom-header' 
     831                ); 
     832 
     833                // Save the data 
     834                $id = wp_insert_attachment($object, $file); 
     835                return compact( 'id', 'file', 'filename', 'url', 'type' ); 
     836        } 
     837 
    789838        /** 
    790839         * Display third step of custom header image page. 
    791840         * 
     
    851900                        'guid' => $url, 
    852901                        'context' => 'custom-header' 
    853902                ); 
     903                if ( isset( $_POST['new-attachment'] ) && $_POST['new-attachment'] ) 
     904                        unset($object['ID']); 
    854905 
    855906                // Update the attachment 
    856                 wp_insert_attachment($object, $cropped); 
     907                $attachment_id = wp_insert_attachment($object, $cropped); 
    857908                wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $cropped ) ); 
    858909                update_post_meta( $attachment_id, '_wp_attachment_is_custom_header', get_option('stylesheet' ) ); 
    859910 
     
    870921 
    871922                // cleanup 
    872923                $medium = str_replace(basename($original), 'midsize-'.basename($original), $original); 
    873                 @unlink( apply_filters( 'wp_delete_file', $medium ) ); 
    874                 @unlink( apply_filters( 'wp_delete_file', $original ) ); 
     924                if ( file_exists( $medium ) ) 
     925                        @unlink( apply_filters( 'wp_delete_file', $medium ) ); 
     926                if ( empty ( $_POST['new-attachment'] ) ) 
     927                        @unlink( apply_filters( 'wp_delete_file', $original ) ); 
    875928 
    876929                return $this->finished(); 
    877930        } 
     
    903956                        $this->step_3(); 
    904957        } 
    905958 
     959        function attachment_fields_to_edit( $form_fields, $post ) { 
     960                if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-header' ) { 
     961                        $form_fields = array(); // Reset 
     962                        $button = get_submit_button( __( 'Use as header image' ), 'button', "send[{$post->ID}]", false ); 
     963                        $form_fields['buttons'] = array( 'tr' => '<tr class="submit"><td></td><td>'.$button.'</td></tr>' ); 
     964                        $form_fields['context'] = array( 'input' => 'hidden', 'value' => 'custom-header' ); 
     965                } 
     966 
     967                return $form_fields; 
     968        } 
     969 
     970        function image_send_to_editor( $html, $id ) { 
     971                if ( isset( $_REQUEST['attachments'][$id]['context'] ) && $_REQUEST['attachments'][$id]['context'] == 'custom-header' ) 
     972                        return $id; 
     973 
     974                return $html; 
     975        } 
     976 
     977        function filter_upload_tabs( $tabs ) { 
     978                if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-header' ) 
     979                        return array( 'library' => __('Media Library') ); 
     980 
     981                return $tabs; 
     982        } 
     983 
    906984}