WordPress.org

Make WordPress Core

Ticket #28195: 28195.14.patch

File 28195.14.patch, 3.0 KB (added by azaozz, 3 years ago)
  • src/wp-admin/includes/ajax-actions.php

     
    25302530                wp_send_json_error(); 
    25312531        } 
    25322532 
    2533         if ( ! current_user_can( 'read_post', $post->ID ) ) { 
     2533        if ( empty( $_POST['shortcode'] ) || ! current_user_can( 'read_post', $post->ID ) ) { 
    25342534                wp_send_json_error(); 
    25352535        } 
    25362536 
    25372537        setup_postdata( $post ); 
    25382538 
    2539         $parsed = $wp_embed->run_shortcode( $_POST['content'] ); 
     2539        // If the URL cannot be embedded, return eror message with call wp_send_json_error() 
     2540        add_filter( 'embed_maybe_make_link', '_wpview_embed_error', 20, 2 ); 
     2541 
     2542        $parsed = $wp_embed->run_shortcode( $_POST['shortcode'] ); 
    25402543        $parsed = do_shortcode( $parsed ); 
    25412544 
    25422545        wp_send_json_success( $parsed ); 
  • src/wp-admin/includes/misc.php

     
    824824} 
    825825// Run later as we have to set DOING_AUTOSAVE for back-compat 
    826826add_filter( 'heartbeat_received', 'heartbeat_autosave', 500, 2 ); 
     827 
     828/** 
     829 * Send error message when an URL cannot be embedded. Used in wp_ajax_parse_embed(). 
     830 * 
     831 * @access private 
     832 * @since 4.0 
     833 */ 
     834function _wpview_embed_error( $output, $url ) { 
     835        wp_send_json_error( array( 
     836                'message' => sprintf( __( '%s failed to embed.' ), esc_url( $url ) ), 
     837        ) ); 
     838} 
  • src/wp-includes/js/mce-view.js

     
    719719                        wp.ajax.send( 'parse-embed', { 
    720720                                data: { 
    721721                                        post_ID: $( '#post_ID' ).val(), 
    722                                         content: this.shortcode 
     722                                        type: self.type, 
     723                                        shortcode: this.shortcode 
    723724                                } 
    724725                        } ) 
    725                         .done( function( content ) { 
     726                        .always( function() { 
    726727                                self.fetching = false; 
    727  
    728                                 if ( content.substring( 0, ( '<a href' ).length ) === '<a href' ) { 
     728                        } ) 
     729                        .done( function( response ) { 
     730                                if ( response ) { 
     731                                        self.parsed = response; 
     732                                        self.setHtml( response ); 
     733                                } 
     734                        } ) 
     735                        .fail( function( response ) { 
     736                                if ( response && response.message ) { 
    729737                                        if ( self.type === 'embed' ) { 
    730                                                 self.setError( self.original + ' failed to embed.', 'admin-media' ); 
     738                                                self.setError( response.message, 'admin-media' ); 
    731739                                        } else { 
    732                                                 self.setContent( self.original, null, true ); 
     740                                                self.setContent( '<p>' + self.original + '</p>', null, true ); 
    733741                                        } 
    734                                 } else { 
    735                                         self.parsed = content; 
    736                                         self.setHtml( content ); 
     742                                } else if ( response && response.statusText ) { 
     743                                        self.setError( response.statusText, 'admin-media' ); 
    737744                                } 
    738                         } ) 
    739                         .fail( function() { 
    740                                 self.fetching = false; 
    741                                 self.setError( self.original + ' failed to embed due to a server error.', 'admin-media' ); 
    742745                        } ); 
    743746                }, 
    744747                /* jshint scripturl: true */