From deaf8bd758cb02803649bceb9b8efa023f63f4ed Mon Sep 17 00:00:00 2001 From: ryan Date: Fri, 23 Oct 2009 19:33:24 +0000 Subject: [PATCH] Allow non-admins to use Vimeo and allow regex in oEmbed URL formats. Props Viper007Bond. see #10337 git-svn-id: http://svn.automattic.com/wordpress/trunk@12096 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/class-oembed.php | 36 ++++++++++++++++++------------------ wp-includes/media.php | 7 ++++--- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/wp-includes/class-oembed.php b/wp-includes/class-oembed.php index 2c058a3b94..6f31ba4c19 100644 --- a/wp-includes/class-oembed.php +++ b/wp-includes/class-oembed.php @@ -33,21 +33,18 @@ class WP_oEmbed { * @uses apply_filters() Filters a list of pre-defined oEmbed providers. */ function __construct() { - // List out some popular sites, mainly ones that don't have discovery tags in their - // The WP_Embed class disables discovery for non-unfiltered_html users, - // so only providers in this array will be used for them. + // List out some popular sites that support oEmbed. + // The WP_Embed class disables discovery for non-unfiltered_html users, so only providers in this array will be used for them. + // Add to this list using the wp_oembed_add_provider() function $this->providers = apply_filters( 'oembed_providers', array( - 'http://*.youtube.com/watch*' => 'http://www.youtube.com/oembed', - 'http://youtube.com/watch*' => 'http://www.youtube.com/oembed', - 'http://blip.tv/file/*' => 'http://blip.tv/oembed/', - 'http://*.flickr.com/*' => 'http://www.flickr.com/services/oembed/', - 'http://www.hulu.com/watch/*' => 'http://www.hulu.com/api/oembed.{format}', - 'http://*.viddler.com/*' => 'http://lab.viddler.com/services/oembed/', - 'http://qik.com/*' => 'http://qik.com/api/oembed.{format}', - 'http://*.revision3.com/*' => 'http://revision3.com/api/oembed/', - - // Vimeo uses the discovery , so leave this commented to use it as a discovery test - //'http://www.vimeo.com/*' => 'http://www.vimeo.com/api/oembed.{format}', + 'http://www.youtube.com/watch*' => array( 'http://www.youtube.com/oembed', false ), + 'http://blip.tv/file/*' => array( 'http://blip.tv/oembed/', false ), + '#http://(www\.)?vimeo\.com/.*#i' => array( 'http://www.vimeo.com/api/oembed.{format}', true ), + 'http://*.flickr.com/*' => array( 'http://www.flickr.com/services/oembed/', false ), + 'http://www.hulu.com/watch/*' => array( 'http://www.hulu.com/api/oembed.{format}', false ), + 'http://*.viddler.com/*' => array( 'http://lab.viddler.com/services/oembed/', false ), + 'http://qik.com/*' => array( 'http://qik.com/api/oembed.{format}', false ), + 'http://*.revision3.com/*' => array( 'http://revision3.com/api/oembed/', false ), ) ); } @@ -68,11 +65,14 @@ class WP_oEmbed { if ( !isset($args['discover']) ) $args['discover'] = true; - foreach ( $this->providers as $matchmask => $providerurl ) { - // Turn the asterisk-type provider URLs into regex - $regex = '#' . str_replace( '___wildcard___', '(.+)', preg_quote( str_replace( '*', '___wildcard___', $matchmask ), '#' ) ) . '#i'; + foreach ( $this->providers as $matchmask => $data ) { + list( $providerurl, $regex ) = $data; - if ( preg_match( $regex, $url ) ) { + // Turn the asterisk-type provider URLs into regex + if ( !$regex ) + $matchmask = '#' . str_replace( '___wildcard___', '(.+)', preg_quote( str_replace( '*', '___wildcard___', $matchmask ), '#' ) ) . '#i'; + + if ( preg_match( $matchmask, $url ) ) { $provider = str_replace( '{format}', 'json', $providerurl ); // JSON is easier to deal with than XML break; } diff --git a/wp-includes/media.php b/wp-includes/media.php index 96e736cac9..8cbd7d002a 100644 --- a/wp-includes/media.php +++ b/wp-includes/media.php @@ -1262,11 +1262,12 @@ function wp_oembed_get( $url, $args = '' ) { * * @uses _wp_oembed_get_object() * - * @param string $format The format of URL that this provider can handle. Use asterisks as wildcards. + * @param string $format The format of URL that this provider can handle. You can use asterisks as wildcards. * @param string $provider The URL to the oEmbed provider. + * @param boolean $regex Whether the $format parameter is in a regex format or not. */ -function wp_oembed_add_provider( $format, $provider ) { +function wp_oembed_add_provider( $format, $provider, $regex = false ) { require_once( 'class-oembed.php' ); $oembed = _wp_oembed_get_object(); - $oembed->providers[$format] = $provider; + $oembed->providers[$format] = array( $provider, $regex ); }