Make WordPress Core


Ignore:
Timestamp:
02/12/2015 01:32:26 AM (10 years ago)
Author:
dd32
Message:

Prevent IE9 and lower displaying the download file dialogue when attempting
to upload using the html4 Plupload handler.

The HTML4 Plupload handler uses a hidden iframe to POST the upload form, and
unfortunately Internet Explorer 9 doesn't support the application/json
content-type which wp_send_json_success() and requires text/html instead.

This partially reverts [30354], keeping the better error messages.

Merges [31429] to the 4.1 branch.
Fixes #31037.

Location:
branches/4.1
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.1

  • branches/4.1/src/wp-admin/includes/ajax-actions.php

    r30895 r31430  
    18331833function wp_ajax_upload_attachment() {
    18341834    check_ajax_referer( 'media-form' );
     1835    /*
     1836     * This function does not use wp_send_json_success() / wp_send_json_error()
     1837     * as the html4 Plupload handler requires a text/html content-type for older IE.
     1838     * See https://core.trac.wordpress.org/ticket/31037
     1839     */
    18351840
    18361841    if ( ! current_user_can( 'upload_files' ) ) {
    1837         wp_send_json_error( array(
    1838             'message'  => __( "You don't have permission to upload files." ),
    1839             'filename' => $_FILES['async-upload']['name'],
     1842        echo wp_json_encode( array(
     1843            'success' => false,
     1844            'data'    => array(
     1845                'message'  => __( "You don't have permission to upload files." ),
     1846                'filename' => $_FILES['async-upload']['name'],
     1847            )
    18401848        ) );
     1849
     1850        wp_die();
    18411851    }
    18421852
     
    18441854        $post_id = $_REQUEST['post_id'];
    18451855        if ( ! current_user_can( 'edit_post', $post_id ) ) {
    1846             wp_send_json_error( array(
    1847                 'message'  => __( "You don't have permission to attach files to this post." ),
    1848                 'filename' => $_FILES['async-upload']['name'],
     1856            echo wp_json_encode( array(
     1857                'success' => false,
     1858                'data'    => array(
     1859                    'message'  => __( "You don't have permission to attach files to this post." ),
     1860                    'filename' => $_FILES['async-upload']['name'],
     1861                )
    18491862            ) );
     1863
     1864            wp_die();
    18501865        }
    18511866    } else {
     
    18591874        $wp_filetype = wp_check_filetype_and_ext( $_FILES['async-upload']['tmp_name'], $_FILES['async-upload']['name'], false );
    18601875        if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) ) {
    1861             wp_send_json_error( array(
    1862                 'message'  => __( 'The uploaded file is not a valid image. Please try again.' ),
     1876            echo wp_json_encode( array(
     1877                'success' => false,
     1878                'data'    => array(
     1879                    'message'  => __( 'The uploaded file is not a valid image. Please try again.' ),
     1880                    'filename' => $_FILES['async-upload']['name'],
     1881                )
     1882            ) );
     1883
     1884            wp_die();
     1885        }
     1886    }
     1887
     1888    $attachment_id = media_handle_upload( 'async-upload', $post_id, $post_data );
     1889
     1890    if ( is_wp_error( $attachment_id ) ) {
     1891        echo wp_json_encode( array(
     1892            'success' => false,
     1893            'data'    => array(
     1894                'message'  => $attachment_id->get_error_message(),
    18631895                'filename' => $_FILES['async-upload']['name'],
    1864             ) );
    1865         }
    1866     }
    1867 
    1868     $attachment_id = media_handle_upload( 'async-upload', $post_id, $post_data );
    1869 
    1870     if ( is_wp_error( $attachment_id ) ) {
    1871         wp_send_json_error( array(
    1872             'message'  => $attachment_id->get_error_message(),
    1873             'filename' => $_FILES['async-upload']['name'],
     1896            )
    18741897        ) );
     1898
     1899        wp_die();
    18751900    }
    18761901
     
    18861911        wp_die();
    18871912
    1888     wp_send_json_success( $attachment );
     1913    echo wp_json_encode( array(
     1914        'success' => true,
     1915        'data'    => $attachment,
     1916    ) );
     1917
     1918    wp_die();
    18891919}
    18901920
Note: See TracChangeset for help on using the changeset viewer.