diff options
Diffstat (limited to 'plugins/jetpack/modules/shortcodes/googlemaps.php')
-rw-r--r-- | plugins/jetpack/modules/shortcodes/googlemaps.php | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/plugins/jetpack/modules/shortcodes/googlemaps.php b/plugins/jetpack/modules/shortcodes/googlemaps.php index deadac38..b7ee9c30 100644 --- a/plugins/jetpack/modules/shortcodes/googlemaps.php +++ b/plugins/jetpack/modules/shortcodes/googlemaps.php @@ -10,20 +10,33 @@ function jetpack_googlemaps_embed_to_short_code( $content ) { return $content; // IE and TinyMCE format things differently + // <iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="<a href="https://maps.google.co.uk/maps/ms?msa=0&amp;msid=206216869547772496318.0004bf5f0ff25aea47bd9&amp;hl=en&amp;ie=UTF8&amp;t=m&amp;ll=50.91917,-1.398808&amp;spn=0.013225,0.011794&amp;output=embed"></iframe><br">https://maps.google.co.uk/maps/ms?msa=0&amp;msid=206216869547772496318.0004bf5f0ff25aea47bd9&amp;hl=en&amp;ie=UTF8&amp;t=m&amp;ll=50.91917,-1.398808&amp;spn=0.013225,0.011794&amp;output=embed"></iframe><br</a> /><small>View <a href="<a href="https://maps.google.co.uk/maps/ms?msa=0&amp;msid=206216869547772496318.0004bf5f0ff25aea47bd9&amp;hl=en&amp;ie=UTF8&amp;t=m&amp;ll=50.91917,-1.398808&amp;spn=0.013225,0.011794&amp;source=embed">https://maps.google.co.uk/maps/ms?msa=0&amp;msid=206216869547772496318.0004bf5f0ff25aea47bd9&amp;hl=en&amp;ie=UTF8&amp;t=m&amp;ll=50.91917,-1.398808&amp;spn=0.013225,0.011794&amp;source=embed</a>" style="color:#0000FF;text-align:left">OARA Membership Discount Map</a> in a larger map</small> if ( strpos( $content, 'src="<a href="' ) !== false ) { - $content = preg_replace_callback( '!<iframe width="(\d+)" height="(\d+)" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="<a href="http://.*\.google\.(.*)/(.*)\?(.+)"></iframe><br">http://.*\.google\..*/(.*)\?(.+)"></iframe><br</a> /><small>(.*)</small>!i', 'jetpack_googlemaps_embed_to_short_code_callback', $content ); + $content = preg_replace_callback( '#<iframe\s[^&]*?(?:&(?!gt;)[^&]*?)*?src="<a href="https?://.*?\.google\.(.*?)/(.*?)\?(.+?)"[^&]*?(?:&(?!gt;)[^&]*?)*?>\s*</iframe><br">[^"]*?">\s*</iframe><br</a>\s*/>\s*<small>.*?</small>#i', 'jetpack_googlemaps_embed_to_short_code_callback', $content ); return $content; } - $content = preg_replace_callback( '!\<iframe width="(\d+)" height="(\d+)" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://.*\.google\.(.*)/(.*)\?(.+)"\>\</iframe\>\<br /\>\<small\>(.*)\</small\>!i', 'jetpack_googlemaps_embed_to_short_code_callback', $content ); + $content = preg_replace_callback( '!\<iframe\s[^>]*?src="https?://.*?\.google\.(.*?)/(.*?)\?(.+?)"[^>]*?\>\s*\</iframe\>\s*(?:\<br\s*/?\>)?\s*\<small\>.*?\</small\>!i', 'jetpack_googlemaps_embed_to_short_code_callback', $content ); - $content = preg_replace_callback( '!<iframe width="(\d+)" height="(\d+)" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://.*\.google\.(.*)/(.*)\?(.+)"></iframe><br /><small>(.*)</small>!i', 'jetpack_googlemaps_embed_to_short_code_callback', $content ); + $content = preg_replace_callback( '#<iframe\s[^&]*?(?:&(?!gt;)[^&]*?)*?src="https?://.*?\.google\.(.*?)/(.*?)\?(.+?)"[^&]*?(?:&(?!gt;)[^&]*?)*?>\s*</iframe>\s*(?:<br\s*/?>)?\s*<small>.*?</small>#i', 'jetpack_googlemaps_embed_to_short_code_callback', $content ); return $content; } function jetpack_googlemaps_embed_to_short_code_callback( $match ) { - $url = "http://maps.google.{$match[3]}/{$match[4]}?{$match[5]}&w={$match[1]}&h={$match[2]}"; + if ( preg_match( '/\bwidth=[\'"](\d+)/', $match[0], $width ) ) { + $width = (int) $width[1]; + } else { + $width = 425; + } + + if ( preg_match( '/\bheight=[\'"](\d+)/', $match[0], $height ) ) { + $height = (int) $height[1]; + } else { + $height = 350; + } + + $url = "https://maps.google.{$match[1]}/{$match[2]}?{$match[3]}&w={$width}&h={$height}"; do_action( 'jetpack_embed_to_shortcode', 'googlemaps', $url ); @@ -41,7 +54,7 @@ function jetpack_googlemaps_shortcode( $atts ) { $width = 425; $height = 350; - if ( preg_match( '!^http://maps\.google(\.co|\.com)?(\.[a-z]+)?/.*?(\?.+)!i', $params, $match ) ) { + if ( preg_match( '!^https?://maps\.google(\.co|\.com)?(\.[a-z]+)?/.*?(\?.+)!i', $params, $match ) ) { $params = str_replace( '&amp;', '&', $params ); $params = str_replace( '&', '&', $params ); parse_str( $params, $arg ); |