Make WordPress Core

Ticket #27881: media-27881.3.diff

File media-27881.3.diff, 15.3 KB (added by wonderboymusic, 11 years ago)
  • src/wp-includes/media.php

     
    11961196                        unset( $attr['orderby'] );
    11971197        }
    11981198
    1199         extract( shortcode_atts( array(
     1199        $atts = shortcode_atts( array(
    12001200                'type'          => 'audio',
    12011201                'order'         => 'ASC',
    12021202                'orderby'       => 'menu_order ID',
     
    12081208                'tracknumbers' => true,
    12091209                'images'        => true,
    12101210                'artists'       => true
    1211         ), $attr, 'playlist' ) );
     1211        ), $attr, 'playlist' );
    12121212
    1213         $id = intval( $id );
    1214         if ( 'RAND' == $order ) {
    1215                 $orderby = 'none';
     1213        $id = intval( $atts['id'] );
     1214        if ( 'RAND' == $atts['order'] ) {
     1215                $atts['orderby'] = 'none';
    12161216        }
    12171217
    12181218        $args = array(
    12191219                'post_status' => 'inherit',
    12201220                'post_type' => 'attachment',
    1221                 'post_mime_type' => $type,
    1222                 'order' => $order,
    1223                 'orderby' => $orderby
     1221                'post_mime_type' => $atts['type'],
     1222                'order' => $atts['order'],
     1223                'orderby' => $atts['orderby']
    12241224        );
    12251225
    1226         if ( ! empty( $include ) ) {
    1227                 $args['include'] = $include;
     1226        if ( ! empty( $atts['include'] ) ) {
     1227                $args['include'] = $atts['include'];
    12281228                $_attachments = get_posts( $args );
    12291229
    12301230                $attachments = array();
     
    12311231                foreach ( $_attachments as $key => $val ) {
    12321232                        $attachments[$val->ID] = $_attachments[$key];
    12331233                }
    1234         } elseif ( ! empty( $exclude ) ) {
     1234        } elseif ( ! empty( $atts['exclude'] ) ) {
    12351235                $args['post_parent'] = $id;
    1236                 $args['exclude'] = $exclude;
     1236                $args['exclude'] = $atts['exclude'];
    12371237                $attachments = get_children( $args );
    12381238        } else {
    12391239                $args['post_parent'] = $id;
     
    12601260        $theme_width = empty( $content_width ) ? $default_width : ( $content_width - $outer );
    12611261        $theme_height = empty( $content_width ) ? $default_height : round( ( $default_height * $theme_width ) / $default_width );
    12621262
    1263         $data = compact( 'type' );
     1263        $data = array(
     1264                'type' => $atts['type'],
     1265                // don't pass strings to JSON, will be truthy in JS
     1266                'tracklist' => filter_var( $atts['tracklist'], FILTER_VALIDATE_BOOLEAN ),
     1267                'tracknumbers' => filter_var( $atts['tracknumbers'], FILTER_VALIDATE_BOOLEAN ),
     1268                'images' => filter_var( $atts['images'], FILTER_VALIDATE_BOOLEAN ),
     1269                'artists' => filter_var( $atts['artists'], FILTER_VALIDATE_BOOLEAN ),
     1270        );
    12641271
    1265         // don't pass strings to JSON, will be truthy in JS
    1266         foreach ( array( 'tracklist', 'tracknumbers', 'images', 'artists' ) as $key ) {
    1267                 $data[$key] = filter_var( $$key, FILTER_VALIDATE_BOOLEAN );
    1268         }
    1269 
    12701272        $tracks = array();
    12711273        foreach ( $attachments as $attachment ) {
    12721274                $url = wp_get_attachment_url( $attachment->ID );
     
    12891291                                }
    12901292                        }
    12911293
    1292                         if ( 'video' === $type ) {
     1294                        if ( 'video' === $atts['type'] ) {
    12931295                                if ( ! empty( $meta['width'] ) && ! empty( $meta['height'] ) ) {
    12941296                                        $width = $meta['width'];
    12951297                                        $height = $meta['height'];
     
    13091311                        }
    13101312                }
    13111313
    1312                 if ( $images ) {
    1313                         $id = get_post_thumbnail_id( $attachment->ID );
    1314                         if ( ! empty( $id ) ) {
    1315                                 list( $src, $width, $height ) = wp_get_attachment_image_src( $id, 'full' );
     1314                if ( $atts['images'] ) {
     1315                        $thumb_id = get_post_thumbnail_id( $attachment->ID );
     1316                        if ( ! empty( $thumb_id ) ) {
     1317                                list( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'full' );
    13161318                                $track['image'] = compact( 'src', 'width', 'height' );
    1317                                 list( $src, $width, $height ) = wp_get_attachment_image_src( $id, 'thumbnail' );
     1319                                list( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'thumbnail' );
    13181320                                $track['thumb'] = compact( 'src', 'width', 'height' );
    13191321                        } else {
    13201322                                $src = wp_mime_type_icon( $attachment->ID );
     
    13291331        }
    13301332        $data['tracks'] = $tracks;
    13311333
    1332         $safe_type = esc_attr( $type );
    1333         $safe_style = esc_attr( $style );
     1334        $safe_type = esc_attr( $atts['type'] );
     1335        $safe_style = esc_attr( $atts['style'] );
    13341336
    13351337        ob_start();
    13361338
     
    13431345                 * @param string $type  Type of playlist. Possible values are 'audio' or 'video'.
    13441346                 * @param string $style The 'theme' for the playlist. Core provides 'light' and 'dark'.
    13451347                 */
    1346                 do_action( 'wp_playlist_scripts', $type, $style );
     1348                do_action( 'wp_playlist_scripts', $atts['type'], $atts['style'] );
    13471349        } ?>
    13481350<div class="wp-playlist wp-<?php echo $safe_type ?>-playlist wp-playlist-<?php echo $safe_style ?>">
    1349         <?php if ( 'audio' === $type ): ?>
     1351        <?php if ( 'audio' === $atts['type'] ): ?>
    13501352        <div class="wp-playlist-current-item"></div>
    13511353        <?php endif ?>
    13521354        <<?php echo $safe_type ?> controls="controls" preload="none" width="<?php
     
    14821484         * @param string $content   Shortcode content.
    14831485         * @param int    $instances Unique numeric ID of this audio shortcode instance.
    14841486         */
    1485         $html = apply_filters( 'wp_audio_shortcode_override', '', $attr, $content, $instances );
    1486         if ( '' !== $html )
    1487                 return $html;
     1487        $override = apply_filters( 'wp_audio_shortcode_override', '', $attr, $content, $instances );
     1488        if ( '' !== $override ) {
     1489                return $override;
     1490        }
    14881491
    14891492        $audio = null;
    14901493
     
    14951498                'autoplay' => '',
    14961499                'preload'  => 'none'
    14971500        );
    1498         foreach ( $default_types as $type )
     1501        foreach ( $default_types as $type ) {
    14991502                $defaults_atts[$type] = '';
     1503        }
    15001504
    15011505        $atts = shortcode_atts( $defaults_atts, $attr, 'audio' );
    1502         extract( $atts );
    15031506
    15041507        $primary = false;
    1505         if ( ! empty( $src ) ) {
    1506                 $type = wp_check_filetype( $src, wp_get_mime_types() );
    1507                 if ( ! in_array( strtolower( $type['ext'] ), $default_types ) )
    1508                         return sprintf( '<a class="wp-embedded-audio" href="%s">%s</a>', esc_url( $src ), esc_html( $src ) );
     1508        if ( ! empty( $atts['src'] ) ) {
     1509                $type = wp_check_filetype( $atts['src'], wp_get_mime_types() );
     1510                if ( ! in_array( strtolower( $type['ext'] ), $default_types ) ) {
     1511                        return sprintf( '<a class="wp-embedded-audio" href="%s">%s</a>', esc_url( $atts['src'] ), esc_html( $atts['src'] ) );
     1512                }
    15091513                $primary = true;
    15101514                array_unshift( $default_types, 'src' );
    15111515        } else {
    15121516                foreach ( $default_types as $ext ) {
    1513                         if ( ! empty( $$ext ) ) {
    1514                                 $type = wp_check_filetype( $$ext, wp_get_mime_types() );
    1515                                 if ( strtolower( $type['ext'] ) === $ext )
     1517                        if ( ! empty( $atts[ $ext ] ) ) {
     1518                                $type = wp_check_filetype( $atts[ $ext ], wp_get_mime_types() );
     1519                                if ( strtolower( $type['ext'] ) === $ext ) {
    15161520                                        $primary = true;
     1521                                }
    15171522                        }
    15181523                }
    15191524        }
     
    15201525
    15211526        if ( ! $primary ) {
    15221527                $audios = get_attached_media( 'audio', $post_id );
    1523                 if ( empty( $audios ) )
     1528                if ( empty( $audios ) ) {
    15241529                        return;
     1530                }
    15251531
    15261532                $audio = reset( $audios );
    1527                 $src = wp_get_attachment_url( $audio->ID );
    1528                 if ( empty( $src ) )
     1533                $atts['src'] = wp_get_attachment_url( $audio->ID );
     1534                if ( empty( $atts['src'] ) ) {
    15291535                        return;
     1536                }
    15301537
    15311538                array_unshift( $default_types, 'src' );
    15321539        }
     
    15511558         *
    15521559         * @param string $class CSS class or list of space-separated classes.
    15531560         */
    1554         $atts = array(
     1561        $html_atts = array(
    15551562                'class'    => apply_filters( 'wp_audio_shortcode_class', 'wp-audio-shortcode' ),
    15561563                'id'       => sprintf( 'audio-%d-%d', $post_id, $instances ),
    1557                 'loop'     => $loop,
    1558                 'autoplay' => $autoplay,
    1559                 'preload'  => $preload,
     1564                'loop'     => $atts['loop'],
     1565                'autoplay' => $atts['autoplay'],
     1566                'preload'  => $atts['preload'],
    15601567                'style'    => 'width: 100%; visibility: hidden;',
    15611568        );
    15621569
    15631570        // These ones should just be omitted altogether if they are blank
    15641571        foreach ( array( 'loop', 'autoplay', 'preload' ) as $a ) {
    1565                 if ( empty( $atts[$a] ) )
    1566                         unset( $atts[$a] );
     1572                if ( empty( $html_atts[$a] ) ) {
     1573                        unset( $html_atts[$a] );
     1574                }
    15671575        }
    15681576
    15691577        $attr_strings = array();
    1570         foreach ( $atts as $k => $v ) {
     1578        foreach ( $html_atts as $k => $v ) {
    15711579                $attr_strings[] = $k . '="' . esc_attr( $v ) . '"';
    15721580        }
    15731581
    15741582        $html = '';
    1575         if ( 'mediaelement' === $library && 1 === $instances )
     1583        if ( 'mediaelement' === $library && 1 === $instances ) {
    15761584                $html .= "<!--[if lt IE 9]><script>document.createElement('audio');</script><![endif]-->\n";
     1585        }
    15771586        $html .= sprintf( '<audio %s controls="controls">', join( ' ', $attr_strings ) );
    15781587
    15791588        $fileurl = '';
    15801589        $source = '<source type="%s" src="%s" />';
    15811590        foreach ( $default_types as $fallback ) {
    1582                 if ( ! empty( $$fallback ) ) {
    1583                         if ( empty( $fileurl ) )
    1584                                 $fileurl = $$fallback;
    1585                         $type = wp_check_filetype( $$fallback, wp_get_mime_types() );
    1586                         $url = add_query_arg( '_', $instances, $$fallback );
     1591                if ( ! empty( $atts[ $fallback ] ) ) {
     1592                        if ( empty( $fileurl ) ) {
     1593                                $fileurl = $atts[ $fallback ];
     1594                        }
     1595                        $type = wp_check_filetype( $atts[ $fallback ], wp_get_mime_types() );
     1596                        $url = add_query_arg( '_', $instances, $atts[ $fallback ] );
    15871597                        $html .= sprintf( $source, $type['type'], esc_url( $url ) );
    15881598                }
    15891599        }
    15901600
    1591         if ( 'mediaelement' === $library )
     1601        if ( 'mediaelement' === $library ) {
    15921602                $html .= wp_mediaelement_fallback( $fileurl );
     1603        }
    15931604        $html .= '</audio>';
    15941605
    15951606        /**
     
    16741685         * @param string $content   Video shortcode content.
    16751686         * @param int    $instances Unique numeric ID of this video shortcode instance.
    16761687         */
    1677         $html = apply_filters( 'wp_video_shortcode_override', '', $attr, $content, $instances );
    1678         if ( '' !== $html )
    1679                 return $html;
     1688        $override = apply_filters( 'wp_video_shortcode_override', '', $attr, $content, $instances );
     1689        if ( '' !== $override ) {
     1690                return $override;
     1691        }
    16801692
    16811693        $video = null;
    16821694
     
    16911703                'height'   => 360,
    16921704        );
    16931705
    1694         foreach ( $default_types as $type )
     1706        foreach ( $default_types as $type ) {
    16951707                $defaults_atts[$type] = '';
     1708        }
    16961709
    16971710        $atts = shortcode_atts( $defaults_atts, $attr, 'video' );
    1698         extract( $atts );
    16991711
    17001712        if ( is_admin() ) {
    17011713                // shrink the video so it isn't huge in the admin
    1702                 if ( $width > $defaults_atts['width'] ) {
    1703                         $height = round( ( $height * $defaults_atts['width'] ) / $width );
    1704                         $width = $defaults_atts['width'];
     1714                if ( $atts['width'] > $defaults_atts['width'] ) {
     1715                        $atts['height'] = round( ( $atts['height'] * $defaults_atts['width'] ) / $atts['width'] );
     1716                        $atts['width'] = $defaults_atts['width'];
    17051717                }
    17061718        } else {
    17071719                // if the video is bigger than the theme
    1708                 if ( ! empty( $content_width ) && $width > $content_width ) {
    1709                         $height = round( ( $height * $content_width ) / $width );
    1710                         $width = $content_width;
     1720                if ( ! empty( $content_width ) && $atts['width'] > $content_width ) {
     1721                        $atts['height'] = round( ( $atts['height'] * $content_width ) / $atts['width'] );
     1722                        $atts['width'] = $content_width;
    17111723                }
    17121724        }
    17131725
     
    17141726        $yt_pattern = '#^https?://(:?www\.)?(:?youtube\.com/watch|youtu\.be/)#';
    17151727
    17161728        $primary = false;
    1717         if ( ! empty( $src ) ) {
    1718                 if ( ! preg_match( $yt_pattern, $src ) ) {
    1719                         $type = wp_check_filetype( $src, wp_get_mime_types() );
     1729        if ( ! empty( $atts['src'] ) ) {
     1730                if ( ! preg_match( $yt_pattern, $atts['src'] ) ) {
     1731                        $type = wp_check_filetype( $atts['src'], wp_get_mime_types() );
    17201732                        if ( ! in_array( strtolower( $type['ext'] ), $default_types ) ) {
    1721                                 return sprintf( '<a class="wp-embedded-video" href="%s">%s</a>', esc_url( $src ), esc_html( $src ) );
     1733                                return sprintf( '<a class="wp-embedded-video" href="%s">%s</a>', esc_url( $atts['src'] ), esc_html( $atts['src'] ) );
    17221734                        }
    17231735                }
    17241736                $primary = true;
     
    17251737                array_unshift( $default_types, 'src' );
    17261738        } else {
    17271739                foreach ( $default_types as $ext ) {
    1728                         if ( ! empty( $$ext ) ) {
    1729                                 $type = wp_check_filetype( $$ext, wp_get_mime_types() );
    1730                                 if ( strtolower( $type['ext'] ) === $ext )
     1740                        if ( ! empty( $atts[ $ext ] ) ) {
     1741                                $type = wp_check_filetype( $atts[ $ext ], wp_get_mime_types() );
     1742                                if ( strtolower( $type['ext'] ) === $ext ) {
    17311743                                        $primary = true;
     1744                                }
    17321745                        }
    17331746                }
    17341747        }
     
    17351748
    17361749        if ( ! $primary ) {
    17371750                $videos = get_attached_media( 'video', $post_id );
    1738                 if ( empty( $videos ) )
     1751                if ( empty( $videos ) ) {
    17391752                        return;
     1753                }
    17401754
    17411755                $video = reset( $videos );
    1742                 $src = wp_get_attachment_url( $video->ID );
    1743                 if ( empty( $src ) )
     1756                $atts['src'] = wp_get_attachment_url( $video->ID );
     1757                if ( empty( $atts['src'] ) ) {
    17441758                        return;
     1759                }
    17451760
    17461761                array_unshift( $default_types, 'src' );
    17471762        }
     
    17661781         *
    17671782         * @param string $class CSS class or list of space-separated classes.
    17681783         */
    1769         $atts = array(
     1784        $html_atts = array(
    17701785                'class'    => apply_filters( 'wp_video_shortcode_class', 'wp-video-shortcode' ),
    17711786                'id'       => sprintf( 'video-%d-%d', $post_id, $instances ),
    1772                 'width'    => absint( $width ),
    1773                 'height'   => absint( $height ),
    1774                 'poster'   => esc_url( $poster ),
    1775                 'loop'     => $loop,
    1776                 'autoplay' => $autoplay,
    1777                 'preload'  => $preload,
     1787                'width'    => absint( $atts['width'] ),
     1788                'height'   => absint( $atts['height'] ),
     1789                'poster'   => esc_url( $atts['poster'] ),
     1790                'loop'     => $atts['loop'],
     1791                'autoplay' => $atts['autoplay'],
     1792                'preload'  => $atts['preload'],
    17781793        );
    17791794
    17801795        // These ones should just be omitted altogether if they are blank
    17811796        foreach ( array( 'poster', 'loop', 'autoplay', 'preload' ) as $a ) {
    1782                 if ( empty( $atts[$a] ) )
    1783                         unset( $atts[$a] );
     1797                if ( empty( $html_atts[$a] ) ) {
     1798                        unset( $html_atts[$a] );
     1799                }
    17841800        }
    17851801
    17861802        $attr_strings = array();
    1787         foreach ( $atts as $k => $v ) {
     1803        foreach ( $html_atts as $k => $v ) {
    17881804                $attr_strings[] = $k . '="' . esc_attr( $v ) . '"';
    17891805        }
    17901806
    17911807        $html = '';
    1792         if ( 'mediaelement' === $library && 1 === $instances )
     1808        if ( 'mediaelement' === $library && 1 === $instances ) {
    17931809                $html .= "<!--[if lt IE 9]><script>document.createElement('video');</script><![endif]-->\n";
     1810        }
    17941811        $html .= sprintf( '<video %s controls="controls">', join( ' ', $attr_strings ) );
    17951812
    17961813        $fileurl = '';
    17971814        $source = '<source type="%s" src="%s" />';
    17981815        foreach ( $default_types as $fallback ) {
    1799                 if ( ! empty( $$fallback ) ) {
    1800                         if ( empty( $fileurl ) )
    1801                                 $fileurl = $$fallback;
    1802 
    1803                         if ( 'src' === $fallback && preg_match( $yt_pattern, $src ) ) {
     1816                if ( ! empty( $atts[ $fallback ] ) ) {
     1817                        if ( empty( $fileurl ) ) {
     1818                                $fileurl = $atts[ $fallback ];
     1819                        }
     1820                        if ( 'src' === $fallback && preg_match( $yt_pattern, $atts['src'] ) ) {
    18041821                                $type = array( 'type' => 'video/youtube' );
    18051822                        } else {
    1806                                 $type = wp_check_filetype( $$fallback, wp_get_mime_types() );
     1823                                $type = wp_check_filetype( $atts[ $fallback ], wp_get_mime_types() );
    18071824                        }
    1808                         $url = add_query_arg( '_', $instances, $$fallback );
     1825                        $url = add_query_arg( '_', $instances, $atts[ $fallback ] );
    18091826                        $html .= sprintf( $source, $type['type'], esc_url( $url ) );
    18101827                }
    18111828        }
    18121829
    18131830        if ( ! empty( $content ) ) {
    1814                 if ( false !== strpos( $content, "\n" ) )
     1831                if ( false !== strpos( $content, "\n" ) ) {
    18151832                        $content = str_replace( array( "\r\n", "\n", "\t" ), '', $content );
    1816 
     1833                }
    18171834                $html .= trim( $content );
    18181835        }
    18191836
    1820         if ( 'mediaelement' === $library )
     1837        if ( 'mediaelement' === $library ) {
    18211838                $html .= wp_mediaelement_fallback( $fileurl );
     1839        }
    18221840        $html .= '</video>';
    18231841
    1824         $html = sprintf( '<div style="width: %dpx; max-width: 100%%;" class="wp-video">%s</div>', $width, $html );
     1842        $output = sprintf( '<div style="width: %dpx; max-width: 100%%;" class="wp-video">%s</div>', $atts['width'], $html );
    18251843
    18261844        /**
    18271845         * Filter the output of the video shortcode.
     
    18281846         *
    18291847         * @since 3.6.0
    18301848         *
    1831          * @param string $html    Video shortcode HTML output.
     1849         * @param string $output  Video shortcode HTML output.
    18321850         * @param array  $atts    Array of video shortcode attributes.
    18331851         * @param string $video   Video file.
    18341852         * @param int    $post_id Post ID.
    18351853         * @param string $library Media library used for the video shortcode.
    18361854         */
    1837         return apply_filters( 'wp_video_shortcode', $html, $atts, $video, $post_id, $library );
     1855        return apply_filters( 'wp_video_shortcode', $output, $atts, $video, $post_id, $library );
    18381856}
    18391857add_shortcode( 'video', 'wp_video_shortcode' );
    18401858