WordPress.org

Make WordPress Core

Ticket #19840: 19840.12.diff

File 19840.12.diff, 14.8 KB (added by aaroncampbell, 6 years ago)
  • wp-includes/script-loader.php

     
    419419                ) );
    420420
    421421                $scripts->add( 'custom-background', "/wp-admin/js/custom-background$suffix.js", array('farbtastic'), false, 1 );
     422
     423                $scripts->add( 'custom-header', "/wp-admin/js/custom-header$suffix.js", array(), false, 1 );
    422424        }
    423425}
    424426
  • wp-admin/includes/post.php

     
    11521152        if ( empty( $post_id ) )
    11531153                $post_id = $post_ID;
    11541154
    1155         $set_thumbnail_link = '<p class="hide-if-no-js"><a title="' . esc_attr__( 'Set featured image' ) . '" href="' . esc_url( get_upload_iframe_src('image', $post_id) ) . '" id="set-post-thumbnail" class="thickbox">%s</a></p>';
     1155        $set_thumbnail_link = '<p class="hide-if-no-js"><a title="' . esc_attr__( 'Set featured image' ) . '" href="' . esc_url( get_upload_iframe_src( array( 'type'=>'image', 'post_id'=>$post_id ) ) ) . '" id="set-post-thumbnail" class="thickbox">%s</a></p>';
    11561156        $content = sprintf($set_thumbnail_link, esc_html__( 'Set featured image' ));
    11571157
    11581158        if ( $thumbnail_id && get_post( $thumbnail_id ) ) {
  • wp-admin/includes/media.php

     
    403403        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>";
    404404}
    405405
    406 function get_upload_iframe_src( $type = null, $post_id = null ) {
     406function get_upload_iframe_src( $args = array() ) {
    407407        global $post_ID;
    408408
    409         if ( empty( $post_id ) )
    410                 $post_id = $post_ID;
     409        $defaults = array( 'type' => '', 'post_id' => $post_ID );
     410        // Backwards compat for first parameter being type
     411        if ( is_string( $args ) )
     412                $args = array(
     413                        'type' => $args,
     414                        'post_id'=> $post_ID
     415                );
    411416
    412         $uploading_iframe_ID = (int) $post_id;
    413         $upload_iframe_src = add_query_arg( 'post_id', $uploading_iframe_ID, admin_url('media-upload.php') );
     417        $args = wp_parse_args( $args, $defaults );
    414418
    415         if ( $type && 'media' != $type )
    416                 $upload_iframe_src = add_query_arg('type', $type, $upload_iframe_src);
     419        $upload_iframe_src = add_query_arg( 'post_id', (int) $args['post_id'], admin_url('media-upload.php') );
    417420
    418         $upload_iframe_src = apply_filters($type . '_upload_iframe_src', $upload_iframe_src);
     421        if ( $args['type'] && 'media' != $args['type'] )
     422                $upload_iframe_src = add_query_arg('type', $args['type'], $upload_iframe_src);
    419423
     424        if ( ! empty( $args['tab'] ) )
     425                $upload_iframe_src = add_query_arg('tab', $args['tab'], $upload_iframe_src);
     426
     427        $upload_iframe_src = apply_filters($args['type'] . '_upload_iframe_src', $upload_iframe_src);
     428
    420429        return add_query_arg('TB_iframe', true, $upload_iframe_src);
    421430}
    422431
     
    497506        if ( isset($send_id) ) {
    498507                $attachment = stripslashes_deep( $_POST['attachments'][$send_id] );
    499508
    500                 $html = $attachment['post_title'];
     509                $html = isset( $attachment['post_title'] ) ? $attachment['post_title'] : '';
    501510                if ( !empty($attachment['url']) ) {
    502511                        $rel = '';
    503512                        if ( strpos($attachment['url'], 'attachment_id') || get_attachment_link($send_id) == $attachment['url'] )
  • wp-admin/js/custom-header.dev.js

     
     1function WPSetAsBackground(id){
     2        jQuery.post(ajaxurl, {
     3                action: 'set-background-image',
     4                attachment_id: id,
     5                size: jQuery('input[name="attachments[' + id + '][image-size]"]').filter(':checked').val()
     6        }, function(){
     7                win = window.dialogArguments || opener || parent || top;
     8                win.tb_remove();
     9                win.location.reload();
     10        });
     11}
  • wp-admin/custom-header.php

     
    9292                add_action("admin_head-$page", array(&$this, 'take_action'), 50);
    9393                add_action("admin_head-$page", array(&$this, 'js'), 50);
    9494                add_action("admin_head-$page", $this->admin_header_callback, 51);
     95
     96                add_filter( 'attachment_fields_to_edit', array( $this, 'attachment_fields_to_edit' ), 10, 2 );
     97                add_filter( 'media_upload_tabs', array( $this, 'filter_upload_tabs' ) );
    9598        }
    9699
    97100        /**
     
    142145        function js_includes() {
    143146                $step = $this->step();
    144147
    145                 if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) )
    146                         wp_enqueue_script('farbtastic');
    147                 elseif ( 2 == $step )
     148                if ( ( 1 == $step || 3 == $step ) ) {
     149                        add_thickbox();
     150                        wp_enqueue_script( 'media-upload' );
     151                        wp_enqueue_script( 'custom-header' );
     152                        if ( current_theme_supports( 'custom-header', 'header-text' ) )
     153                                wp_enqueue_script('farbtastic');
     154                } elseif ( 2 == $step ) {
    148155                        wp_enqueue_script('imgareaselect');
     156                }
    149157        }
    150158
    151159        /**
     
    395403                <?php if ( display_header_text() ) { ?>
    396404                pickColor('#<?php echo get_header_textcolor(); ?>');
    397405                <?php } else { ?>
    398                 toggle_text();         
     406                toggle_text();
    399407                <?php } ?>
    400408        });
    401409})(jQuery);
     
    553561                <?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?>
    554562        </p>
    555563        </form>
     564        <?php
     565                $image_library_url = get_upload_iframe_src( array( 'type' => 'image', 'tab' => 'library' ) );
     566                $image_library_url = remove_query_arg( 'TB_iframe', $image_library_url );
     567                $image_library_url = add_query_arg( array( 'context' => 'custom-header', 'TB_iframe' => 1 ), $image_library_url );
     568        ?>
     569        <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>
    556570</td>
    557571</tr>
    558572<?php endif; ?>
     
    674688                if ( ! current_theme_supports( 'custom-header', 'uploads' ) )
    675689                        wp_die( __( 'Cheatin&#8217; uh?' ) );
    676690
    677                 $overrides = array('test_form' => false);
    678                 $file = wp_handle_upload($_FILES['import'], $overrides);
     691                if ( empty( $_POST ) && isset( $_GET['file'] ) ) {
     692                        $id = absint( $_GET['file'] );
     693                        $file = get_attached_file( $id, true );
     694                        $url = wp_get_attachment_image_src( $id, 'full');
     695                        $url = $url[0];
     696                } elseif ( isset( $_POST ) ) {
     697                        extract($this->step_2_manage_upload());
     698                }
    679699
    680                 if ( isset($file['error']) )
    681                         wp_die( $file['error'],  __( 'Image Upload Error' ) );
    682 
    683                 $url = $file['url'];
    684                 $type = $file['type'];
    685                 $file = $file['file'];
    686                 $filename = basename($file);
    687 
    688                 // Construct the object array
    689                 $object = array(
    690                 'post_title' => $filename,
    691                 'post_content' => $url,
    692                 'post_mime_type' => $type,
    693                 'guid' => $url,
    694                 'context' => 'custom-header'
    695                 );
    696 
    697                 // Save the data
    698                 $id = wp_insert_attachment($object, $file);
    699 
    700700                list($width, $height, $type, $attr) = getimagesize( $file );
    701701
    702702                $max_width = 0;
     
    753753        <input type="hidden" name="height" id="height" value="<?php echo esc_attr( $height ); ?>"/>
    754754        <input type="hidden" name="attachment_id" id="attachment_id" value="<?php echo esc_attr( $id ); ?>" />
    755755        <input type="hidden" name="oitar" id="oitar" value="<?php echo esc_attr( $oitar ); ?>" />
     756        <?php if ( empty( $_POST ) && isset( $_GET['file'] ) ) { ?>
     757        <input type="hidden" name="new-attachment" value="true" />
     758        <?php } ?>
    756759        <?php wp_nonce_field( 'custom-header-crop-image' ) ?>
    757760
    758761        <?php submit_button( __( 'Crop and Publish' ) ); ?>
     
    762765                <?php
    763766        }
    764767
     768
     769        function step_2_manage_upload() {
     770                $overrides = array('test_form' => false);
     771                $file = wp_handle_upload($_FILES['import'], $overrides);
     772
     773                if ( isset($file['error']) )
     774                        wp_die( $file['error'],  __( 'Image Upload Error' ) );
     775
     776                $url = $file['url'];
     777                $type = $file['type'];
     778                $file = $file['file'];
     779                $filename = basename($file);
     780
     781                // Construct the object array
     782                $object = array(
     783                        'post_title'     => $filename,
     784                        'post_content'   => $url,
     785                        'post_mime_type' => $type,
     786                        'guid'           => $url,
     787                        'context'        => 'custom-header'
     788                );
     789
     790                // Save the data
     791                $id = wp_insert_attachment( $object, $file );
     792                return compact( 'id', 'file', 'filename', 'url', 'type' );
     793        }
     794
    765795        /**
    766796         * Display third step of custom header image page.
    767797         *
     
    826856                        'guid' => $url,
    827857                        'context' => 'custom-header'
    828858                );
     859                if ( isset( $_POST['new-attachment'] ) && $_POST['new-attachment'] )
     860                        unset($object['ID']);
    829861
    830862                // Update the attachment
    831                 wp_insert_attachment($object, $cropped);
     863                $attachment_id = wp_insert_attachment( $object, $cropped );
    832864                wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $cropped ) );
    833865                update_post_meta( $attachment_id, '_wp_attachment_is_custom_header', get_option('stylesheet' ) );
    834866
     
    845877
    846878                // cleanup
    847879                $medium = str_replace(basename($original), 'midsize-'.basename($original), $original);
    848                 @unlink( apply_filters( 'wp_delete_file', $medium ) );
    849                 @unlink( apply_filters( 'wp_delete_file', $original ) );
     880                if ( file_exists( $medium ) )
     881                        @unlink( apply_filters( 'wp_delete_file', $medium ) );
     882                if ( empty ( $_POST['new-attachment'] ) )
     883                        @unlink( apply_filters( 'wp_delete_file', $original ) );
    850884
    851885                return $this->finished();
    852886        }
     
    870904                if ( ! current_user_can('edit_theme_options') )
    871905                        wp_die(__('You do not have permission to customize headers.'));
    872906                $step = $this->step();
    873                 if ( 1 == $step || ! $_POST )
    874                         $this->step_1();
    875                 elseif ( 2 == $step )
     907                if ( 2 == $step && wp_verify_nonce( $_REQUEST['_wpnonce-custom-header-upload'], 'custom-header-upload' ) )
    876908                        $this->step_2();
    877                 elseif ( 3 == $step )
     909                elseif ( 3 == $step && wp_verify_nonce( $_REQUEST['_wpnonce'], 'custom-header-crop-image' ) )
    878910                        $this->step_3();
     911                else
     912                        $this->step_1();
    879913        }
    880914
     915        function attachment_fields_to_edit( $form_fields, $post ) {
     916                if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-header' ) {
     917                        $form_fields = array();
     918                        $href = rawurlencode(add_query_arg(array(
     919                                'page' => 'custom-header',
     920                                'step' => 2,
     921                                '_wpnonce-custom-header-upload' => wp_create_nonce('custom-header-upload'),
     922                                'file' => $post->ID
     923                        ), admin_url('themes.php')));
     924
     925                        $form_fields['buttons'] = array( 'tr' => '<tr class="submit"><td></td><td><a href="javascript: ( window.dialogArguments || opener || parent || top ).location.href=\'' . $href . '\';">' . _( 'Set as header' ) . '</a></td></tr>' );
     926                        $form_fields['context'] = array( 'input' => 'hidden', 'value' => 'custom-header' );
     927                }
     928
     929                return $form_fields;
     930        }
     931
     932        function filter_upload_tabs( $tabs ) {
     933                if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-header' )
     934                        return array( 'library' => __('Media Library') );
     935
     936                return $tabs;
     937        }
     938
    881939}
  • wp-admin/custom-background.php

     
    5555                $this->admin_image_div_callback = $admin_image_div_callback;
    5656
    5757                add_action( 'admin_menu', array( $this, 'init' ) );
     58                add_action( 'wp_ajax_set-background-image', array( $this, 'wp_set_background_image' ) );
    5859        }
    5960
    6061        /**
     
    7172                add_action("load-$page", array(&$this, 'admin_load'));
    7273                add_action("load-$page", array(&$this, 'take_action'), 49);
    7374                add_action("load-$page", array(&$this, 'handle_upload'), 49);
     75                add_filter( 'attachment_fields_to_edit', array( $this, 'attachment_fields_to_edit' ), 10, 2 );
     76                add_filter( 'media_upload_tabs', array( $this, 'filter_upload_tabs' ) );
    7477
    7578                if ( $this->admin_header_callback )
    7679                        add_action("admin_head-$page", $this->admin_header_callback, 51);
     
    98101                        '<p>' . __( '<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>' ) . '</p>'
    99102                );
    100103
     104                add_thickbox();
     105                wp_enqueue_script('media-upload');
    101106                wp_enqueue_script('custom-background');
    102107                wp_enqueue_style('farbtastic');
    103108        }
     
    126131                        set_theme_mod('background_image', '');
    127132                        set_theme_mod('background_image_thumb', '');
    128133                        $this->updated = true;
     134                        wp_safe_redirect( $_POST['_wp_http_referer'] );
    129135                        return;
    130136                }
    131137
     
    248254<input type="hidden" name="action" value="save" />
    249255<?php wp_nonce_field('custom-background-upload', '_wpnonce-custom-background-upload') ?>
    250256<?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?>
    251 </form>
     257<?php
     258        $image_library_url = get_upload_iframe_src( array( 'type' => 'image', 'tab' => 'library' ) );
     259        $image_library_url = remove_query_arg( 'TB_iframe', $image_library_url );
     260        $image_library_url = add_query_arg( array( 'context' => 'custom-background', 'TB_iframe' => 1 ), $image_library_url );
     261?>
     262        </form>
     263        <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>
    252264</td>
    253265</tr>
    254266</tbody>
     
    368380                $this->updated = true;
    369381        }
    370382
     383        function attachment_fields_to_edit( $form_fields, $post ) {
     384                if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-background' ) {
     385                        $form_fields = array( 'image-size' => $form_fields['image-size'] );
     386                        $form_fields['buttons'] = array( 'tr' => '<tr class="submit"><td></td><td><a href="javascript: WPSetAsBackground(' . $post->ID . ');">' . _( 'Set as background' ) . '</a></td></tr>' );
     387                        $form_fields['context'] = array( 'input' => 'hidden', 'value' => 'custom-background' );
     388                }
     389
     390                return $form_fields;
     391        }
     392
     393        function filter_upload_tabs ( $tabs ){
     394                if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-background' )
     395                        return array( 'library' => __('Media Library') );
     396
     397                return $tabs;
     398        }
     399
     400        public function wp_set_background_image() {
     401                if ( ! current_user_can('edit_theme_options') || ! isset( $_POST['attachment_id'] ) ) exit;
     402                $attachment_id = absint($_POST['attachment_id']);
     403                $sizes = array_keys(apply_filters( 'image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')) ));
     404                $size = 'thumbnail';
     405                if ( in_array( $_POST['size'], $sizes ) )
     406                        $size = esc_attr( $_POST['size'] );
     407
     408                update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) );
     409                $url = wp_get_attachment_image_src( $attachment_id, $size );
     410                $thumbnail = wp_get_attachment_image_src( $attachment_id, 'thumbnail' );
     411                set_theme_mod( 'background_image', esc_url( $url[0] ) );
     412                set_theme_mod( 'background_image_thumb', esc_url( $thumbnail[0] ) );
     413                exit;
     414        }
    371415}