Automattic /
jetpack
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | /** |
||
| 4 | * Dailymotion code |
||
| 5 | * */ |
||
| 6 | |||
| 7 | /** |
||
| 8 | * Original codes: |
||
| 9 | * |
||
| 10 | * <embed height="270" type="application/x-shockwave-flash" width="480" src="http://www.dailymotion.com/swf/video/xekmrq?additionalInfos=0" wmode="opaque" pluginspage="http://www.macromedia.com/go/getflashplayer" allowscriptaccess="never" allownetworking="internal" /> |
||
| 11 | * |
||
| 12 | * <object width="480" height="240"><param name="movie" value="http://www.dailymotion.com/swf/video/xen4ms_ghinzu-cold-love-mirror-mirror_music?additionalInfos=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param> |
||
| 13 | * <embed type="application/x-shockwave-flash" src="http://www.dailymotion.com/swf/video/xen4ms_ghinzu-cold-love-mirror-mirror_music?additionalInfos=0" width="480" height="240" allowfullscreen="true" allowscriptaccess="always"></embed> |
||
| 14 | * </object><br /><b><a href="http://www.dailymotion.com/video/xen4ms_ghinzu-cold-love-mirror-mirror_music">Ghinzu - Cold Love (Mirror Mirror)</a></b><br /><i>Uploaded by <a href="http://www.dailymotion.com/GhinzuTV">GhinzuTV</a>. - <a href="http://www.dailymotion.com/us/channel/music">Watch more music videos, in HD!</a></i> |
||
| 15 | * |
||
| 16 | * Code as of 01.01.11: |
||
| 17 | * <object width="560" height="421"><param name="movie" value="http://www.dailymotion.com/swf/video/xaose5?width=560&theme=denim&foreground=%2392ADE0&highlight=%23A2ACBF&background=%23202226&start=&animatedTitle=&iframe=0&additionalInfos=0&autoPlay=0&hideInfos=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed type="application/x-shockwave-flash" src="http://www.dailymotion.com/swf/video/xaose5?width=560&theme=denim&foreground=%2392ADE0&highlight=%23A2ACBF&background=%23202226&start=&animatedTitle=&iframe=0&additionalInfos=0&autoPlay=0&hideInfos=0" width="560" height="421" allowfullscreen="true" allowscriptaccess="always"></embed></object><br /><b><a href="http://www.dailymotion.com/video/x29zm17_funny-videos-of-cats-and-babies-compilation-2015_fun">Funny cats and babies!</a></b><br /><i>Uploaded by <a href="http://www.dailymotion.com/GilLavie">GilLavie</a>. - <a target="_self" href="http://www.dailymotion.com/channel/funny/featured/1">Find more funny videos.</a></i> |
||
| 18 | * movie param enforces anti-xss protection |
||
| 19 | * |
||
| 20 | * Scroll down for the new <iframe> embed code handler. |
||
| 21 | */ |
||
| 22 | |||
| 23 | function dailymotion_embed_to_shortcode( $content ) { |
||
| 24 | if ( false === stripos( $content, 'www.dailymotion.com/swf/' ) ) { |
||
| 25 | return $content; |
||
| 26 | } |
||
| 27 | |||
| 28 | $regexp = '!<object.*>\s*(<param.*></param>\s*)*<embed((?:\s+\w+="[^"]*")*)\s+src="http(?:\:|�*58;)//(www\.dailymotion\.com/swf/[^"]*)"((?:\s+\w+="[^"]*")*)\s*(?:/>|>\s*</embed>)\s*</object><br /><b><a .*>.*</a></b><br /><i>.*</i>!'; |
||
| 29 | $regexp_ent = str_replace( '&#0*58;', '&#0*58;|�*58;', htmlspecialchars( $regexp, ENT_NOQUOTES ) ); |
||
| 30 | |||
| 31 | foreach ( array( 'regexp', 'regexp_ent' ) as $reg ) { |
||
| 32 | if ( ! preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) ) { |
||
| 33 | continue; |
||
| 34 | } |
||
| 35 | |||
| 36 | foreach ( $matches as $match ) { |
||
| 37 | $src = html_entity_decode( $match[3] ); |
||
| 38 | $params = $match[2] . $match[4]; |
||
| 39 | |||
| 40 | if ( 'regexp_ent' == $reg ) { |
||
| 41 | $src = html_entity_decode( $src ); |
||
| 42 | $params = html_entity_decode( $params ); |
||
| 43 | } |
||
| 44 | |||
| 45 | $params = wp_kses_hair( $params, array( 'http' ) ); |
||
| 46 | |||
| 47 | if ( ! isset( $params['type'] ) || 'application/x-shockwave-flash' != $params['type']['value'] ) { |
||
| 48 | continue; |
||
| 49 | } |
||
| 50 | |||
| 51 | $id = basename( substr( $src, strlen( 'www.dailymotion.com/swf' ) ) ); |
||
| 52 | $id = preg_replace( '/[^a-z0-9].*$/i', '', $id ); |
||
| 53 | |||
| 54 | $content = str_replace( $match[0], "[dailymotion id=$id]", $content ); |
||
| 55 | /** This action is documented in modules/shortcodes/youtube.php */ |
||
| 56 | do_action( 'jetpack_embed_to_shortcode', 'dailymotion', $id ); |
||
| 57 | } |
||
| 58 | } |
||
| 59 | return $content; |
||
| 60 | } |
||
| 61 | add_filter( 'pre_kses', 'dailymotion_embed_to_shortcode' ); |
||
| 62 | |||
| 63 | /** |
||
| 64 | * DailyMotion shortcode |
||
| 65 | * |
||
| 66 | * The documented shortcode is: |
||
| 67 | * [dailymotion id=x8oma9] |
||
| 68 | * |
||
| 69 | * Possibilities, according to the old parsing regexp: |
||
| 70 | * [dailymotion x8oma9] |
||
| 71 | * [dailymotion=x8oma9] |
||
| 72 | * |
||
| 73 | * Hypothetical option, according to the old shortcode function is |
||
| 74 | * [dailymotion id=1&title=2&user=3&video=4] |
||
| 75 | * |
||
| 76 | * The new style is now: |
||
| 77 | * [dailymotion id=x8oma9 title=2 user=3 video=4] |
||
| 78 | * |
||
| 79 | * Supported parameters for player customization: width, height, |
||
| 80 | * autoplay, endscreen-enable, mute, sharing-enabled, start, subtitles-default, |
||
| 81 | * ui-highlight, ui-logo, ui-start-screen-info, ui-theme |
||
| 82 | * see https://developer.dailymotion.com/player#player-parameters |
||
| 83 | * @todo: Update code to sniff for iframe embeds and convert those to shortcodes. |
||
| 84 | * |
||
| 85 | * @param array $atts |
||
| 86 | * @return string html |
||
| 87 | * |
||
| 88 | */ |
||
| 89 | |||
| 90 | function dailymotion_shortcode( $atts ) { |
||
| 91 | global $content_width; |
||
| 92 | |||
| 93 | if ( isset( $atts[0] ) ) { |
||
| 94 | $id = ltrim( $atts[0], '=' ); |
||
| 95 | $atts['id'] = $id; |
||
| 96 | |||
| 97 | } else { |
||
| 98 | $params = shortcode_new_to_old_params( $atts ); |
||
| 99 | parse_str( $params, $atts_new ); |
||
| 100 | |||
| 101 | foreach ( $atts_new as $k => $v ) { |
||
| 102 | $atts[ $k ] = $v; |
||
| 103 | } |
||
| 104 | } |
||
| 105 | |||
| 106 | $atts = shortcode_atts( |
||
| 107 | array( |
||
| 108 | 'id' => '', // string |
||
| 109 | 'width' => '', // int |
||
| 110 | 'height' => '', // int |
||
| 111 | 'title' => '', // string |
||
| 112 | 'user' => '', // string |
||
| 113 | 'video' => '', // string |
||
| 114 | 'autoplay' => 0, // int |
||
| 115 | 'endscreen-enable' => 1, // int |
||
| 116 | 'mute' => 0, // int |
||
| 117 | 'sharing-enable' => 1, // int |
||
| 118 | 'start' => '', // int |
||
| 119 | 'subtitles-default' => '', // string |
||
| 120 | 'ui-highlight' => '', // string |
||
| 121 | 'ui-logo' => 1, // int |
||
| 122 | 'ui-start-screen-info' => 0, // int |
||
| 123 | 'ui-theme' => '', // string |
||
| 124 | ), $atts, 'dailymotion' |
||
| 125 | ); |
||
| 126 | |||
| 127 | if ( isset( $atts['id'] ) && ! empty( $atts['id'] ) ) { |
||
| 128 | $id = urlencode( $atts['id'] ); |
||
| 129 | } else { |
||
| 130 | return '<!--Dailymotion error: bad or missing ID-->'; |
||
| 131 | } |
||
| 132 | |||
| 133 | /*set width and height using provided parameters if any */ |
||
| 134 | $width = isset( $atts['width'] ) ? intval( $atts['width'] ) : 0 ; |
||
| 135 | $height = isset( $atts['height'] ) ? intval( $atts['height'] ) : 0 ; |
||
| 136 | |||
| 137 | if ( ! $width && ! $height ) { |
||
| 138 | if ( ! empty( $content_width ) ) { |
||
| 139 | $width = absint( $content_width ); |
||
| 140 | } else { |
||
| 141 | $width = 425; |
||
| 142 | } |
||
| 143 | $height = $width / 425 * 334; |
||
| 144 | } elseif ( ! $height ) { |
||
| 145 | $height = $width / 425 * 334; |
||
| 146 | } elseif ( ! $width ) { |
||
| 147 | $width = $height / 334 * 425; |
||
| 148 | } |
||
| 149 | |||
| 150 | /** |
||
| 151 | * Let's add parameters if needed. |
||
| 152 | * |
||
| 153 | * @see https://developer.dailymotion.com/player |
||
| 154 | */ |
||
| 155 | $player_params = array(); |
||
| 156 | |||
| 157 | View Code Duplication | if ( isset( $atts['autoplay'] ) && '1' === $atts['autoplay'] ) { |
|
| 158 | $player_params['autoplay'] = '1'; |
||
| 159 | } |
||
| 160 | if ( isset( $atts['endscreen-enable'] ) && '0' === $atts['endscreen-enable'] ) { |
||
| 161 | $player_params['endscreen-enable'] = '0'; |
||
| 162 | } |
||
| 163 | View Code Duplication | if ( isset( $atts['mute'] ) && '1' === $atts['mute'] ) { |
|
| 164 | $player_params['mute'] = '1'; |
||
| 165 | } |
||
| 166 | if ( isset( $atts['sharing-enable'] ) && '0' === $atts['sharing-enable'] ) { |
||
| 167 | $player_params['sharing-enable'] = '0'; |
||
| 168 | } |
||
| 169 | if ( isset( $atts['start'] ) && ! empty( $atts['start'] ) ) { |
||
| 170 | $player_params['start'] = abs( intval( $atts['start'] ) ); |
||
| 171 | } |
||
| 172 | View Code Duplication | if ( isset( $atts['subtitles-default'] ) && ! empty( $atts['subtitles-default'] ) ) { |
|
| 173 | $player_params['subtitles-default'] = esc_attr( $atts['subtitles-default'] ); |
||
| 174 | } |
||
| 175 | View Code Duplication | if ( isset( $atts['ui-highlight'] ) && ! empty( $atts['ui-highlight'] ) ) { |
|
| 176 | $player_params['ui-highlight'] = esc_attr( $atts['ui-highlight'] ); |
||
| 177 | } |
||
| 178 | if ( isset( $atts['ui-logo'] ) && '0' === $atts['ui-logo'] ) { |
||
| 179 | $player_params['ui-logo'] = '0'; |
||
| 180 | } |
||
| 181 | if ( isset( $atts['ui-start-screen-info'] ) && '0' === $atts['ui-start-screen-info'] ) { |
||
| 182 | $player_params['ui-start-screen-info'] = '0'; |
||
| 183 | } |
||
| 184 | if ( isset( $atts['ui-theme'] ) && in_array( strtolower( $atts['ui-theme'] ), array( 'dark', 'light' ) ) ) { |
||
| 185 | $player_params['ui-theme'] = esc_attr( $atts['ui-theme'] ); |
||
| 186 | } |
||
| 187 | |||
| 188 | // Add those parameters to the Video URL. |
||
| 189 | $video_url = add_query_arg( |
||
| 190 | $player_params, |
||
| 191 | 'https://www.dailymotion.com/embed/video/' . $id |
||
| 192 | ); |
||
| 193 | |||
| 194 | $output = ''; |
||
| 195 | |||
| 196 | if ( preg_match( '/^[A-Za-z0-9]+$/', $id ) ) { |
||
| 197 | $output .= '<iframe width="' . esc_attr( $width ) . '" height="' . esc_attr( $height ) . '" src="' . esc_url( $video_url ) . '" style="border:0;" allowfullscreen></iframe>'; |
||
| 198 | |||
| 199 | if ( array_key_exists( 'video', $atts ) && $video = preg_replace( '/[^-a-z0-9_]/i', '', $atts['video'] ) && array_key_exists( 'title', $atts ) && $title = wp_kses( $atts['title'], array() ) ) { |
||
| 200 | $output .= '<br /><strong><a href="' . esc_url( 'http://www.dailymotion.com/video/' . $video ) . '" target="_blank">' . esc_html( $title ) . '</a></strong>'; |
||
| 201 | } |
||
| 202 | |||
| 203 | if ( array_key_exists( 'user', $atts ) && $user = preg_replace( '/[^-a-z0-9_]/i', '', $atts['user'] ) ) { |
||
| 204 | /* translators: %s is a Dailymotion user name */ |
||
| 205 | $output .= '<br /><em>' . wp_kses( sprintf( __( 'Uploaded by %s', 'jetpack' ), '<a href="' . esc_url( 'http://www.dailymotion.com/' . $user ) . '" target="_blank">' . esc_html( $user ) . '</a>' ), array( 'a' => array( 'href' => true, 'target' => true ) ) ) . '</em>'; |
||
| 206 | } |
||
| 207 | } |
||
| 208 | |||
| 209 | return $output; |
||
| 210 | } |
||
| 211 | |||
| 212 | add_shortcode( 'dailymotion', 'dailymotion_shortcode' ); |
||
| 213 | |||
| 214 | /** |
||
| 215 | * DailyMotion Channel Shortcode |
||
| 216 | * |
||
| 217 | * Examples: |
||
| 218 | * [dailymotion-channel user=MatthewDominick] |
||
| 219 | * [dailymotion-channel user=MatthewDominick type=grid] (supports grid, carousel, badge/default) |
||
| 220 | */ |
||
| 221 | function dailymotion_channel_shortcode( $atts ) { |
||
| 222 | $username = $atts['user']; |
||
| 223 | |||
| 224 | switch( $atts['type'] ) { |
||
| 225 | case 'grid': |
||
| 226 | return '<iframe width="300px" height="264px" scrolling="no" style="border:0;" src="' . esc_url( '//www.dailymotion.com/badge/user/' . $username . '?type=grid' ) . '"></iframe>'; |
||
| 227 | break; |
||
|
0 ignored issues
–
show
|
|||
| 228 | case 'carousel': |
||
| 229 | return '<iframe width="300px" height="360px" scrolling="no" style="border:0;" src="' . esc_url( '//www.dailymotion.com/badge/user/' . $username . '?type=carousel' ) . '"></iframe>'; |
||
| 230 | break; |
||
|
0 ignored issues
–
show
break is not strictly necessary here and could be removed.
The break statement is not necessary if it is preceded for example by a return statement: switch ($x) {
case 1:
return 'foo';
break; // This break is not necessary and can be left off.
}
If you would like to keep this construct to be consistent with other case statements, you can safely mark this issue as a false-positive. Loading history...
|
|||
| 231 | default: |
||
| 232 | return '<iframe width="300px" height="78px" scrolling="no" style="border:0;" src="' . esc_url( '//www.dailymotion.com/badge/user/' . $username ) . '"></iframe>'; |
||
| 233 | } |
||
| 234 | } |
||
| 235 | |||
| 236 | add_shortcode( 'dailymotion-channel', 'dailymotion_channel_shortcode' ); |
||
| 237 | |||
| 238 | /** |
||
| 239 | * Embed Reversal for Badge/Channel |
||
| 240 | */ |
||
| 241 | function dailymotion_channel_reversal( $content ) { |
||
| 242 | if ( false === stripos( $content, 'dailymotion.com/badge/' ) ) { |
||
| 243 | return $content; |
||
| 244 | } |
||
| 245 | |||
| 246 | /* Sample embed code: |
||
| 247 | <iframe width="300px" height="360px" scrolling="no" frameborder="0" src="http://www.dailymotion.com/badge/user/Dailymotion?type=carousel"></iframe> |
||
| 248 | */ |
||
| 249 | |||
| 250 | $regexes = array(); |
||
| 251 | |||
| 252 | $regexes[] = '#<iframe[^>]+?src=" (?:https?:)?//(?:www\.)?dailymotion\.com/badge/user/([^"\'/]++) "[^>]*+></iframe>#ix'; |
||
| 253 | |||
| 254 | // Let's play nice with the visual editor too. |
||
| 255 | $regexes[] = '#<iframe(?:[^&]|&(?!gt;))+?src=" (?:https?:)?//(?:www\.)?dailymotion\.com/badge/user/([^"\'/]++) "(?:[^&]|&(?!gt;))*+></iframe>#ix'; |
||
| 256 | |||
| 257 | foreach ( $regexes as $regex ) { |
||
| 258 | if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) { |
||
| 259 | continue; |
||
| 260 | } |
||
| 261 | |||
| 262 | foreach ( $matches as $match ) { |
||
| 263 | $url_pieces = parse_url( $match[1] ); |
||
| 264 | |||
| 265 | if ( 'type=carousel' === $url_pieces['query'] ) { |
||
| 266 | $type = 'carousel'; |
||
| 267 | } else if ( 'type=grid' === $url_pieces['query'] ) { |
||
| 268 | $type = 'grid'; |
||
| 269 | } else { |
||
| 270 | $type = 'badge'; |
||
| 271 | } |
||
| 272 | |||
| 273 | $shortcode = '[dailymotion-channel user=' . esc_attr( $url_pieces['path'] ) . ' type=' . esc_attr( $type ) . ']'; |
||
| 274 | $replace_regex = sprintf( '#\s*%s\s*#', preg_quote( $match[0], '#' ) ); |
||
| 275 | $content = preg_replace( $replace_regex, sprintf( "\n\n%s\n\n", $shortcode ), $content ); |
||
| 276 | } |
||
| 277 | } |
||
| 278 | |||
| 279 | return $content; |
||
| 280 | } |
||
| 281 | |||
| 282 | add_filter( 'pre_kses', 'dailymotion_channel_reversal' ); |
||
| 283 | |||
| 284 | /** |
||
| 285 | * Dailymotion Embed Reversal (with new iframe code as of 17.09.2014) |
||
| 286 | * |
||
| 287 | * Converts a generic HTML embed code from Dailymotion into an |
||
| 288 | * oEmbeddable URL. |
||
| 289 | */ |
||
| 290 | |||
| 291 | function jetpack_dailymotion_embed_reversal( $content ) { |
||
| 292 | if ( false === stripos( $content, 'dailymotion.com/embed' ) ) { |
||
| 293 | return $content; |
||
| 294 | } |
||
| 295 | |||
| 296 | /* Sample embed code as of Sep 17th 2014: |
||
| 297 | |||
| 298 | <iframe frameborder="0" width="480" height="270" src="//www.dailymotion.com/embed/video/x25x71x" allowfullscreen></iframe><br /><a href="http://www.dailymotion.com/video/x25x71x_dog-with-legs-in-casts-learns-how-to-enter-the-front-door_animals" target="_blank">Dog with legs in casts learns how to enter the...</a> <i>by <a href="http://www.dailymotion.com/videobash" target="_blank">videobash</a></i> |
||
| 299 | */ |
||
| 300 | $regexes = array(); |
||
| 301 | |||
| 302 | // I'm Konstantin and I love regex. |
||
| 303 | $regexes[] = '#<iframe[^>]+?src=" (?:https?:)?//(?:www\.)?dailymotion\.com/embed/video/([^"\'/]++) "[^>]*+>\s*+</iframe>\s*+(?:<br\s*+/>)?\s*+ |
||
| 304 | (?: <a[^>]+?href=" (?:https?:)?//(?:www\.)?dailymotion\.com/[^"\']++ "[^>]*+>.+?</a>\s*+ )? |
||
| 305 | (?: <i>.*?<a[^>]+?href=" (?:https?:)?//(?:www\.)?dailymotion\.com/[^"\']++ "[^>]*+>.+?</a>\s*+</i> )?#ix'; |
||
| 306 | |||
| 307 | $regexes[] = '#<iframe(?:[^&]|&(?!gt;))+?src=" (?:https?:)?//(?:www\.)?dailymotion\.com/embed/video/([^"\'/]++) "(?:[^&]|&(?!gt;))*+>\s*+</iframe>\s*+(?:<br\s*+/>)?\s*+ |
||
| 308 | (?: <a(?:[^&]|&(?!gt;))+?href=" (?:https?:)?//(?:www\.)?dailymotion\.com/[^"\']++ "(?:[^&]|&(?!gt;))*+>.+?</a>\s*+ )? |
||
| 309 | (?: <i>.*?<a(?:[^&]|&(?!gt;))+?href=" (?:https?:)?//(?:www\.)?dailymotion\.com/[^"\']++ "(?:[^&]|&(?!gt;))*+>.+?</a>\s*+</i> )?#ix'; |
||
| 310 | |||
| 311 | View Code Duplication | foreach ( $regexes as $regex ) { |
|
| 312 | if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) { |
||
| 313 | continue; |
||
| 314 | } |
||
| 315 | |||
| 316 | foreach ( $matches as $match ) { |
||
| 317 | $url = esc_url( sprintf( 'https://dailymotion.com/video/%s', $match[1] ) ); |
||
| 318 | $replace_regex = sprintf( '#\s*%s\s*#', preg_quote( $match[0], '#' ) ); |
||
| 319 | $content = preg_replace( $replace_regex, sprintf( "\n\n%s\n\n", $url ), $content ); |
||
| 320 | |||
| 321 | /** This action is documented in modules/shortcodes/youtube.php */ |
||
| 322 | do_action( 'jetpack_embed_to_shortcode', 'dailymotion', $url ); |
||
| 323 | } |
||
| 324 | } |
||
| 325 | |||
| 326 | return $content; |
||
| 327 | } |
||
| 328 | |||
| 329 | add_filter( 'pre_kses', 'jetpack_dailymotion_embed_reversal' ); |
||
| 330 |
The break statement is not necessary if it is preceded for example by a return statement:
If you would like to keep this construct to be consistent with other case statements, you can safely mark this issue as a false-positive.