Elementor_Enhancer.php
4 years ago
EmbedPress_Core_Installer.php
6 years ago
EmbedPress_Notice.php
4 years ago
EmbedPress_Plugin_Usage_Tracker.php
4 years ago
Feature_Enhancer.php
4 years ago
Helper.php
4 years ago
Elementor_Enhancer.php
538 lines
| 1 | <?php |
| 2 | |
| 3 | namespace EmbedPress\Includes\Classes; |
| 4 | |
| 5 | use Elementor\Group_Control_Image_Size; |
| 6 | use Elementor\Utils; |
| 7 | |
| 8 | class Elementor_Enhancer { |
| 9 | public static function youtube( $embed, $setting ) { |
| 10 | if ( isset( $setting['embedpress_pro_embeded_source'] ) && 'youtube' === $setting['embedpress_pro_embeded_source'] && isset( $embed->embed ) ) { |
| 11 | |
| 12 | preg_match( '/src=\"(.+?)\"/', $embed->embed, $match ); |
| 13 | $url_full = $match[1]; |
| 14 | $query = parse_url( $url_full, PHP_URL_QUERY ); |
| 15 | parse_str( $query, $params ); |
| 16 | $params['controls'] = $setting['embedpress_pro_youtube_display_controls']; |
| 17 | $params['iv_load_policy'] = $setting['embedpress_pro_youtube_display_video_annotations']; |
| 18 | $params['fs'] = ( $setting['embedpress_pro_youtube_enable_fullscreen_button'] === 'yes' ) ? 1 : 0; |
| 19 | $params['rel'] = ( $setting['embedpress_pro_youtube_display_related_videos'] === 'yes' ) ? 1 : 0; |
| 20 | $params['end'] = $setting['embedpress_pro_youtube_end_time']; |
| 21 | if ( $setting['embedpress_pro_youtube_auto_play'] === 'yes' ) { |
| 22 | $params['autoplay'] = 1; |
| 23 | } |
| 24 | $params['start'] = $setting['embedpress_pro_video_start_time']; |
| 25 | |
| 26 | $params['color'] = $setting['embedpress_pro_youtube_progress_bar_color']; |
| 27 | |
| 28 | if ( is_embedpress_pro_active() ) { |
| 29 | $params['modestbranding'] = $setting['embedpress_pro_youtube_modest_branding']; |
| 30 | if ( $setting['embedpress_pro_youtube_force_closed_captions'] === 'yes' ) { |
| 31 | $params['cc_load_policy'] = 1; |
| 32 | } |
| 33 | } |
| 34 | |
| 35 | |
| 36 | preg_match( '/(.+)?\?/', $url_full, $url ); |
| 37 | if ( empty( $url) ) { |
| 38 | return $embed; |
| 39 | } |
| 40 | $url = $url[1]; |
| 41 | |
| 42 | // Reassemble the url with the new variables. |
| 43 | $url_modified = $url . '?'; |
| 44 | foreach ( $params as $paramName => $paramValue ) { |
| 45 | $url_modified .= $paramName . '=' . $paramValue . '&'; |
| 46 | } |
| 47 | // Replaces the old url with the new one. |
| 48 | $embed->embed = str_replace( $url_full, rtrim( $url_modified, '&' ), $embed->embed ); |
| 49 | if ( is_embedpress_pro_active() ) { |
| 50 | $embed = self::apply_cta_markup( $embed, $setting, 'youtube' ); |
| 51 | } |
| 52 | |
| 53 | } |
| 54 | |
| 55 | return $embed; |
| 56 | } |
| 57 | |
| 58 | public static function apply_cta_markup( $embed, $settings, $provider_name = '' ) { |
| 59 | if ( empty( $settings["embedpress_pro_{$provider_name}_logo"] ) || empty( $settings["embedpress_pro_{$provider_name}_logo"]['url'] ) ) { |
| 60 | return $embed; |
| 61 | } |
| 62 | $img = Group_Control_Image_Size::get_attachment_image_html( $settings, "embedpress_pro_{$provider_name}_logo" ); |
| 63 | if ( empty( $img ) ) { |
| 64 | return $embed; |
| 65 | } |
| 66 | |
| 67 | $cta = ''; |
| 68 | $url = ''; |
| 69 | $target = ''; |
| 70 | $x = ! empty( $settings["embedpress_pro_{$provider_name}_logo_xpos"] ) && ! empty( $settings["embedpress_pro_{$provider_name}_logo_xpos"]['unit'] ) ? $settings["embedpress_pro_{$provider_name}_logo_xpos"]['unit'] . $settings["embedpress_pro_{$provider_name}_logo_xpos"]['size'] : '10%'; |
| 71 | |
| 72 | $y = ! empty( $settings["embedpress_pro_{$provider_name}_logo_ypos"] ) && ! empty( $settings["embedpress_pro_{$provider_name}_logo_ypos"]['unit'] ) ? $settings["embedpress_pro_{$provider_name}_logo_ypos"]['unit'] . $settings["embedpress_pro_{$provider_name}_logo_ypos"]['size'] : '10%'; |
| 73 | $cssClass = isset( $embed->url ) ? '.ose-uid-' . md5( $embed->url ) : ".ose-{$provider_name}"; |
| 74 | ob_start(); |
| 75 | ?> |
| 76 | <style type="text/css"> |
| 77 | <?php echo esc_html($cssClass); ?> |
| 78 | { |
| 79 | text-align: left |
| 80 | ; |
| 81 | position: relative |
| 82 | ; |
| 83 | } |
| 84 | <?php echo esc_html($cssClass); ?> |
| 85 | .watermark { |
| 86 | border: 0; |
| 87 | position: absolute; |
| 88 | bottom: <?php echo esc_html($y); ?>; |
| 89 | right: <?php echo esc_html($x); ?>; |
| 90 | max-width: 150px; |
| 91 | max-height: 75px; |
| 92 | opacity: 0.25; |
| 93 | z-index: 5; |
| 94 | -o-transition: opacity 0.5s ease-in-out; |
| 95 | -moz-transition: opacity 0.5s ease-in-out; |
| 96 | -webkit-transition: opacity 0.5s ease-in-out; |
| 97 | transition: opacity 0.5s ease-in-out; |
| 98 | } |
| 99 | |
| 100 | <?php echo esc_html($cssClass); ?> |
| 101 | .watermark:hover { |
| 102 | opacity: 1; |
| 103 | } |
| 104 | </style> |
| 105 | <?php |
| 106 | $style = ob_get_clean(); |
| 107 | |
| 108 | if ( ! class_exists( '\simple_html_dom' ) ) { |
| 109 | include_once EMBEDPRESS_PATH_CORE . 'simple_html_dom.php'; |
| 110 | } |
| 111 | |
| 112 | if ( ! empty( $settings["embedpress_pro_{$provider_name}_cta"] ) && ! empty( $settings["embedpress_pro_{$provider_name}_cta"]['url'] ) ) { |
| 113 | $url = $settings["embedpress_pro_{$provider_name}_cta"]['url']; |
| 114 | } |
| 115 | |
| 116 | if ( $url ) { |
| 117 | $atts = self::get_link_attributes( $settings["embedpress_pro_{$provider_name}_cta"] ); |
| 118 | $attributes = ''; |
| 119 | foreach ( $atts as $att => $value ) { |
| 120 | $attributes .= $att . '="' . esc_attr( $value ) . '" '; |
| 121 | } |
| 122 | $cta .= sprintf( '<a %s>', trim( $attributes ) ); |
| 123 | } |
| 124 | |
| 125 | |
| 126 | $imgDom = str_get_html( $img ); |
| 127 | $imgDom = $imgDom->find( 'img', 0 ); |
| 128 | $imgDom->setAttribute( 'class', 'watermark' ); |
| 129 | $imgDom->removeAttribute( 'style' ); |
| 130 | $imgDom->setAttribute( 'width', 'auto' ); |
| 131 | $imgDom->setAttribute( 'height', 'auto' ); |
| 132 | ob_start(); |
| 133 | echo $imgDom; |
| 134 | $cta .= ob_get_clean(); |
| 135 | $imgDom->clear(); |
| 136 | unset( $img, $imgDom ); |
| 137 | |
| 138 | if ( $url ) { |
| 139 | $cta .= '</a>'; |
| 140 | } |
| 141 | $dom = str_get_html( $embed->embed ); |
| 142 | $wrapDiv = $dom->find( "div.ose-{$provider_name}", 0 ); |
| 143 | if ( ! empty( $wrapDiv ) && is_object( $wrapDiv ) ) { |
| 144 | $wrapDiv->innertext .= $cta; |
| 145 | } |
| 146 | |
| 147 | ob_start(); |
| 148 | echo $wrapDiv; |
| 149 | $markup = ob_get_clean(); |
| 150 | $dom->clear(); |
| 151 | unset( $dom, $wrapDiv ); |
| 152 | |
| 153 | $embed->embed = $style . $markup; |
| 154 | |
| 155 | return $embed; |
| 156 | } |
| 157 | |
| 158 | public static function get_link_attributes( $url_control ) { |
| 159 | $attributes = []; |
| 160 | |
| 161 | if ( ! empty( $url_control['url'] ) ) { |
| 162 | $allowed_protocols = array_merge( wp_allowed_protocols(), [ |
| 163 | 'skype', |
| 164 | 'viber', |
| 165 | ] ); |
| 166 | |
| 167 | $attributes['href'] = esc_url( $url_control['url'], $allowed_protocols ); |
| 168 | } |
| 169 | |
| 170 | if ( ! empty( $url_control['is_external'] ) ) { |
| 171 | $attributes['target'] = '_blank'; |
| 172 | } |
| 173 | |
| 174 | if ( ! empty( $url_control['nofollow'] ) ) { |
| 175 | $attributes['rel'] = 'nofollow'; |
| 176 | } |
| 177 | |
| 178 | if ( ! empty( $url_control['custom_attributes'] ) ) { |
| 179 | // Custom URL attributes should come as a string of comma-delimited key|value pairs |
| 180 | $attributes = array_merge( $attributes, Utils::parse_custom_attributes( $url_control['custom_attributes'] ) ); |
| 181 | } |
| 182 | |
| 183 | return $attributes; |
| 184 | } |
| 185 | |
| 186 | public static function vimeo( $embed, $setting ) { |
| 187 | |
| 188 | if ( ! isset( $embed->provider_name ) || strtoupper( $embed->provider_name ) !== 'VIMEO' || ! isset( $embed->embed ) || $setting['embedpress_pro_embeded_source'] !== 'vimeo' ) { |
| 189 | return $embed; |
| 190 | } |
| 191 | preg_match( '/src=\"(.+?)\"/', $embed->embed, $match ); |
| 192 | $url_full = $match[1]; |
| 193 | $params = [ |
| 194 | 'color' => str_replace( '#', '', $setting['embedpress_pro_vimeo_color'] ), |
| 195 | 'title' => $setting['embedpress_pro_vimeo_display_title'] === 'yes' ? 1 : 0, |
| 196 | 'byline' => $setting['embedpress_pro_vimeo_display_author'] === 'yes' ? 1 : 0, |
| 197 | 'portrait' => $setting['embedpress_pro_vimeo_avatar'] === 'yes' ? 1 : 0, |
| 198 | ]; |
| 199 | if ( $setting['embedpress_pro_vimeo_auto_play'] === 'yes' ) { |
| 200 | $params['autoplay'] = 1; |
| 201 | } |
| 202 | |
| 203 | if ( is_embedpress_pro_active() ) { |
| 204 | if ( $setting['embedpress_pro_vimeo_loop'] === 'yes' ) { |
| 205 | $params['loop'] = 1; |
| 206 | } |
| 207 | if ( $setting['embedpress_pro_vimeo_autopause'] === 'yes' ) { |
| 208 | $params['autopause'] = 1; |
| 209 | } |
| 210 | |
| 211 | $params ['dnt'] = $setting['embedpress_pro_vimeo_dnt'] === 'yes' ? 1 : 0; |
| 212 | } |
| 213 | |
| 214 | |
| 215 | $url_modified = $url_full; |
| 216 | foreach ( $params as $param => $value ) { |
| 217 | $url_modified = add_query_arg( $param, $value, $url_modified ); |
| 218 | } |
| 219 | |
| 220 | |
| 221 | $url_modified .= '#t=' . $setting['embedpress_pro_video_start_time']; |
| 222 | // Replaces the old url with the new one. |
| 223 | $embed->embed = str_replace( $url_full, $url_modified, $embed->embed ); |
| 224 | if ( is_embedpress_pro_active() ) { |
| 225 | return self::apply_cta_markup( $embed, $setting, 'vimeo' ); |
| 226 | } |
| 227 | |
| 228 | return $embed; |
| 229 | } |
| 230 | |
| 231 | public static function wistia( $embed, $setting ) { |
| 232 | if ( ! isset( $embed->provider_name ) || strtoupper( $embed->provider_name ) !== 'WISTIA, INC.' || ! isset( $embed->embed ) || $setting['embedpress_pro_embeded_source'] !== 'wistia' ) { |
| 233 | return $embed; |
| 234 | } |
| 235 | preg_match( '/src=\"(.+?)\"/', $embed->embed, $match ); |
| 236 | |
| 237 | $url_full = $match[1]; |
| 238 | |
| 239 | // Parse the url to retrieve all its info like variables etc. |
| 240 | $query = parse_url( $embed->url, PHP_URL_QUERY ); |
| 241 | $url = str_replace( '?' . $query, '', $url_full ); |
| 242 | |
| 243 | parse_str( $query, $params ); |
| 244 | |
| 245 | // Set the class in the attributes |
| 246 | $embed->attributes->class = str_replace( '{provider_alias}', 'wistia', $embed->attributes->class ); |
| 247 | $embed->embed = str_replace( 'ose-wistia, inc.', 'ose-wistia', $embed->embed ); |
| 248 | |
| 249 | // Embed Options |
| 250 | $embedOptions = new \stdClass; |
| 251 | $embedOptions->videoFoam = true; |
| 252 | $embedOptions->fullscreenButton = ( $setting['embedpress_pro_wistia_fullscreen_button'] === 'yes' ); |
| 253 | $embedOptions->smallPlayButton = ( $setting['embedpress_pro_wistia_small_play_button'] === 'yes' ); |
| 254 | $embedOptions->autoPlay = ( $setting['embedpress_pro_wistia_auto_play'] === 'yes' ); |
| 255 | $embedOptions->playerColor = $setting['embedpress_pro_wistia_color']; |
| 256 | $embedOptions->playbar = ( $setting['embedpress_pro_wistia_playbar'] === 'yes' ); |
| 257 | $embedOptions->time = $setting['embedpress_pro_video_start_time']; |
| 258 | if ( is_embedpress_pro_active() ) { |
| 259 | $embedOptions->volumeControl = ( $setting['embedpress_pro_wistia_volume_control'] === 'yes' ); |
| 260 | |
| 261 | $volume = isset($setting['embedpress_pro_wistia_volume']['size']) ? (float) $setting['embedpress_pro_wistia_volume']['size'] : 0; |
| 262 | if ( $volume > 1 ) { |
| 263 | $volume = $volume / 100; |
| 264 | } |
| 265 | $embedOptions->volume = $volume; |
| 266 | } |
| 267 | |
| 268 | |
| 269 | // Plugins |
| 270 | $pluginsBaseURL = plugins_url( '../assets/js/wistia/min', dirname( __DIR__ ) . '/embedpress-Wistia.php' ); |
| 271 | |
| 272 | $pluginList = []; |
| 273 | |
| 274 | // Resumable |
| 275 | |
| 276 | if ( $setting['embedpress_pro_wistia_resumable'] === 'yes' ) { |
| 277 | // Add the resumable plugin |
| 278 | $pluginList['resumable'] = [ |
| 279 | 'src' => $pluginsBaseURL . '/resumable.min.js', |
| 280 | 'async' => false, |
| 281 | ]; |
| 282 | } |
| 283 | |
| 284 | |
| 285 | // Add a fix for the autoplay and resumable work better together |
| 286 | if ( isset( $options->autoPlay ) ) { |
| 287 | if ( $setting['embedpress_pro_wistia_resumable'] === 'yes' ) { |
| 288 | $pluginList['fixautoplayresumable'] = [ |
| 289 | 'src' => $pluginsBaseURL . '/fixautoplayresumable.min.js', |
| 290 | ]; |
| 291 | } |
| 292 | } |
| 293 | |
| 294 | // Closed Captions plugin |
| 295 | if ( is_embedpress_pro_active() ) { |
| 296 | if ( $setting['embedpress_pro_wistia_captions'] === 'yes' ) { |
| 297 | $isCaptionsEnabled = ( $setting['embedpress_pro_wistia_captions'] === 'yes' ); |
| 298 | $isCaptionsEnabledByDefault = ( $setting['embedpress_pro_wistia_captions_enabled_by_default'] === 'yes' ); |
| 299 | if ( $isCaptionsEnabled ) { |
| 300 | $pluginList['captions-v1'] = [ |
| 301 | 'onByDefault' => $isCaptionsEnabledByDefault, |
| 302 | ]; |
| 303 | } |
| 304 | $embedOptions->captions = $isCaptionsEnabled; |
| 305 | $embedOptions->captionsDefault = $isCaptionsEnabledByDefault; |
| 306 | } |
| 307 | |
| 308 | |
| 309 | } |
| 310 | |
| 311 | // Rewind plugin |
| 312 | if ( $setting['embedpress_pro_wistia_rewind'] === 'yes' ) { |
| 313 | |
| 314 | $embedOptions->rewindTime = (int) $setting['embedpress_pro_wistia_rewind_time']; |
| 315 | $pluginList['rewind'] = [ |
| 316 | 'src' => $pluginsBaseURL . '/rewind.min.js', |
| 317 | ]; |
| 318 | |
| 319 | } |
| 320 | // Focus plugin |
| 321 | if ( $setting['embedpress_pro_wistia_focus'] === 'yes' ) { |
| 322 | $isFocusEnabled = ( $setting['embedpress_pro_wistia_focus'] === 'yes' ); |
| 323 | $pluginList['dimthelights'] = [ |
| 324 | 'src' => $pluginsBaseURL . '/dimthelights.min.js', |
| 325 | 'autoDim' => $isFocusEnabled, |
| 326 | ]; |
| 327 | |
| 328 | $embedOptions->focus = $isFocusEnabled; |
| 329 | } |
| 330 | |
| 331 | |
| 332 | $embedOptions->plugin = $pluginList; |
| 333 | $embedOptions = json_encode( $embedOptions ); |
| 334 | |
| 335 | // Get the video ID |
| 336 | $videoId = self::get_wistia_video_from_url( $embed->url ); |
| 337 | $shortVideoId = substr( $videoId, 0, 3 ); |
| 338 | |
| 339 | // Responsive? |
| 340 | |
| 341 | $class = [ |
| 342 | 'wistia_embed', |
| 343 | 'wistia_async_' . $videoId, |
| 344 | ]; |
| 345 | |
| 346 | $attribs = [ |
| 347 | sprintf( 'id="wistia_%s"', $videoId ), |
| 348 | sprintf( 'class="%s"', join( ' ', $class ) ), |
| 349 | sprintf( 'style="width:%spx; height:%spx;"', $embed->attributes->{'data-width'}, $embed->attributes->{'data-width'} ), |
| 350 | ]; |
| 351 | |
| 352 | $labels = [ |
| 353 | 'watch_from_beginning' => __( 'Watch from the beginning', 'embedpress-pro' ), |
| 354 | 'skip_to_where_you_left_off' => __( 'Skip to where you left off', 'embedpress-pro' ), |
| 355 | 'you_have_watched_it_before' => __( 'It looks like you\'ve watched<br />part of this video before!', 'embedpress-pro' ), |
| 356 | ]; |
| 357 | $labels = json_encode( $labels ); |
| 358 | |
| 359 | preg_match( '/ose-uid-([a-z0-9]*)/', $embed->embed, $matches ); |
| 360 | $uid = $matches[1]; |
| 361 | |
| 362 | $html = "<div class=\"embedpress-wrapper ose-wistia ose-uid-{$uid} responsive\">"; |
| 363 | $html .= '<script src="https://fast.wistia.com/assets/external/E-v1.js" async></script>'; |
| 364 | $html .= "<script>window.pp_embed_wistia_labels = {$labels};</script>\n"; |
| 365 | $html .= "<script>window._wq = window._wq || []; _wq.push({\"{$shortVideoId}\": {$embedOptions}});</script>\n"; |
| 366 | $html .= '<div ' . join( ' ', $attribs ) . "></div>\n"; |
| 367 | $html .= '</div>'; |
| 368 | $embed->embed = $html; |
| 369 | if ( is_embedpress_pro_active() ) { |
| 370 | return self::apply_cta_markup( $embed, $setting, 'wistia' ); |
| 371 | } |
| 372 | |
| 373 | return $embed; |
| 374 | } |
| 375 | |
| 376 | /** |
| 377 | * Get the Video ID from the URL |
| 378 | * |
| 379 | * @param string $url |
| 380 | * |
| 381 | * @return string |
| 382 | */ |
| 383 | public static function get_wistia_video_from_url( $url ) { |
| 384 | // https://fast.wistia.com/embed/medias/xf1edjzn92.jsonp |
| 385 | // https://ostraining-1.wistia.com/medias/xf1edjzn92 |
| 386 | preg_match( '#\/medias\\\?\/([a-z0-9]+)\.?#i', $url, $matches ); |
| 387 | |
| 388 | $id = false; |
| 389 | if ( isset( $matches[1] ) ) { |
| 390 | $id = $matches[1]; |
| 391 | } |
| 392 | |
| 393 | return $id; |
| 394 | } |
| 395 | |
| 396 | public static function soundcloud( $embed, $setting ) { |
| 397 | |
| 398 | if ( ! isset( $embed->provider_name ) || strtoupper( $embed->provider_name ) !== 'SOUNDCLOUD' || ! isset( $embed->embed ) || $setting['embedpress_pro_embeded_source'] !== 'soundcloud' ) { |
| 399 | return $embed; |
| 400 | } |
| 401 | preg_match( '/src=\"(.+?)\"/', $embed->embed, $match ); |
| 402 | $url_full = $match[1]; |
| 403 | $params = [ |
| 404 | 'color' => str_replace( '#', '', $setting['embedpress_pro_soundcloud_color'] ), |
| 405 | 'visual' => $setting['embedpress_pro_soundcloud_visual'] === 'yes' ? 'true' : 'false', |
| 406 | 'auto_play' => $setting['embedpress_pro_soundcloud_autoplay'] === 'yes' ? 'true' : 'false', |
| 407 | 'sharing' => $setting['embedpress_pro_soundcloud_share_button'] === 'yes' ? 'true' : 'false', |
| 408 | 'show_comments' => $setting['embedpress_pro_soundcloud_comments'] === 'yes' ? 'true' : 'false', |
| 409 | 'show_artwork' => $setting['embedpress_pro_soundcloud_artwork'] === 'yes' ? 'true' : 'false', |
| 410 | 'show_playcount' => $setting['embedpress_pro_soundcloud_play_count'] === 'yes' ? 'true' : 'false', |
| 411 | 'show_user' => $setting['embedpress_pro_soundcloud_user_name'] === 'yes' ? 'true' : 'false', |
| 412 | 'buying' => 'false', |
| 413 | 'download' => 'false', |
| 414 | ]; |
| 415 | if ( is_embedpress_pro_active() ) { |
| 416 | $params['buying'] = $setting['embedpress_pro_soundcloud_buy_button'] === 'yes' ? 'true' : 'false'; |
| 417 | $params['download'] = $setting['embedpress_pro_soundcloud_download_button'] === 'yes' ? 'true' : 'false'; |
| 418 | } |
| 419 | |
| 420 | $url_modified = $url_full; |
| 421 | foreach ( $params as $param => $value ) { |
| 422 | $url_modified = add_query_arg( $param, $value, $url_modified ); |
| 423 | } |
| 424 | |
| 425 | // Replaces the old url with the new one. |
| 426 | $embed->embed = str_replace( $url_full, $url_modified, $embed->embed ); |
| 427 | if ( 'false' === $params['visual'] ) { |
| 428 | $embed->embed = str_replace( 'height="400"', 'height="200 !important"', $embed->embed ); |
| 429 | } |
| 430 | |
| 431 | return $embed; |
| 432 | } |
| 433 | |
| 434 | public static function dailymotion( $embed, $setting ) { |
| 435 | if ( ! isset( $embed->provider_name ) || strtoupper( $embed->provider_name ) !== 'DAILYMOTION' || ! isset( $embed->embed ) || $setting['embedpress_pro_embeded_source'] !== 'dailymotion' ) { |
| 436 | return $embed; |
| 437 | } |
| 438 | preg_match( '/src=\"(.+?)\"/', $embed->embed, $match ); |
| 439 | $url_full = $match[1]; |
| 440 | $params = [ |
| 441 | 'ui-highlight' => str_replace( '#', '', $setting['embedpress_pro_dailymotion_control_color'] ), |
| 442 | 'start' => isset( $setting['embedpress_pro_video_start_time'] ) ? (int) $setting['embedpress_pro_video_start_time'] : 0, |
| 443 | 'mute' => $setting['embedpress_pro_dailymotion_mute'] === 'yes' ? 1 : 0, |
| 444 | 'autoplay' => $setting['embedpress_pro_dailymotion_autoplay'] === 'yes' ? 1 : 0, |
| 445 | 'controls' => $setting['embedpress_pro_dailymotion_player_control'] === 'yes' ? 1 : 0, |
| 446 | 'ui-start-screen-info' => $setting['embedpress_pro_dailymotion_video_info'] === 'yes' ? 1 : 0, |
| 447 | 'endscreen-enable' => 0, |
| 448 | ]; |
| 449 | |
| 450 | if ( $setting['embedpress_pro_dailymotion_play_on_mobile'] === 'yes' ) { |
| 451 | $params['playsinline'] = 1; |
| 452 | } |
| 453 | if ( is_embedpress_pro_active() ) { |
| 454 | $params['ui-logo'] = isset( $setting['embedpress_pro_dailymotion_ui_logo']) && ($setting['embedpress_pro_dailymotion_ui_logo'] === 'yes') ? 1 : 0; |
| 455 | } |
| 456 | $url_modified = $url_full; |
| 457 | foreach ( $params as $param => $value ) { |
| 458 | $url_modified = add_query_arg( $param, $value, $url_modified ); |
| 459 | } |
| 460 | $embed->embed = str_replace( $url_full, $url_modified, $embed->embed ); |
| 461 | if ( is_embedpress_pro_active() ) { |
| 462 | return self::apply_cta_markup( $embed, $setting, 'dailymotion' ); |
| 463 | } |
| 464 | return $embed; |
| 465 | } |
| 466 | |
| 467 | public static function twitch( $embed_content, $settings ) { |
| 468 | if ( ! isset( $embed_content->embed ) || $settings['embedpress_pro_embeded_source'] !== 'twitch' ) { |
| 469 | return $embed_content; |
| 470 | } |
| 471 | $e = current( $embed_content ); |
| 472 | |
| 473 | if ( ! isset( $e['provider_name'] ) || strtoupper( $e['provider_name'] ) !== 'TWITCH' ) { |
| 474 | return $embed_content; |
| 475 | } |
| 476 | $time = '0h0m0s'; |
| 477 | $type = isset( $e['type'] ) ? $e['type'] : ''; |
| 478 | $content_id = isset( $e['content_id'] ) ? $e['content_id'] : ''; |
| 479 | $channel = 'channel' === $type ? $content_id : ''; |
| 480 | $video = 'video' === $type ? $content_id : ''; |
| 481 | $full_screen = ( 'yes' === $settings['embedpress_pro_fs'] ) ? 'true' : 'false'; |
| 482 | $autoplay = ( 'yes' === $settings['embedpress_pro_twitch_autoplay'] ) ? 'true' : 'false'; |
| 483 | $layout = 'video'; |
| 484 | $width = (int) $settings['width']['size']; |
| 485 | $height = (int) $settings['height']['size']; |
| 486 | if ( ! empty( $settings['embedpress_pro_video_start_time'] ) ) { |
| 487 | $ta = explode( ':', gmdate( "G:i:s", $settings['embedpress_pro_video_start_time'] ) ); |
| 488 | $h = $ta[0] . 'h'; |
| 489 | $m = ( $ta[1] * 1 ) . 'm'; |
| 490 | $s = ( $ta[2] * 1 ) . 's'; |
| 491 | $time = $h . $m . $s; |
| 492 | } |
| 493 | $muted = ( 'yes' === $settings['embedpress_pro_twitch_mute'] ) ? 'true' : 'false'; |
| 494 | $theme = ! empty( $settings['embedpress_pro_twitch_theme'] ) ? $settings['embedpress_pro_twitch_theme'] : 'dark'; |
| 495 | if ( is_embedpress_pro_active() ) { |
| 496 | |
| 497 | $layout = ( 'yes' === $settings['embedpress_pro_twitch_chat'] ) ? 'video-with-chat' : 'video'; |
| 498 | |
| 499 | } |
| 500 | |
| 501 | $url = "https://embed.twitch.tv?autoplay={$autoplay}&channel={$channel}&height={$height}&layout={$layout}&migration=true&muted={$muted}&theme={$theme}&time={$time}&video={$video}&width={$width}&allowfullscreen={$full_screen}"; |
| 502 | |
| 503 | $pars_url = wp_parse_url( get_site_url() ); |
| 504 | $url = ! empty( $pars_url['host'] ) ? $url . '&parent=' . $pars_url['host'] : $url; |
| 505 | |
| 506 | preg_match( '/src=\"(.+?)\"/', $embed_content->embed, $match ); |
| 507 | $url_full = $match[1]; |
| 508 | $embed_content->embed = str_replace( $url_full, $url, $embed_content->embed ); |
| 509 | if ( is_embedpress_pro_active() ) { |
| 510 | return self::apply_cta_markup( $embed_content, $settings, 'twitch' ); |
| 511 | } |
| 512 | |
| 513 | return $embed_content; |
| 514 | } |
| 515 | |
| 516 | public static function spotify( $embed, $setting ) { |
| 517 | if ( ! isset( $embed->provider_name ) || strtolower( $embed->provider_name ) !== 'spotify' || ! isset( $embed->embed ) ) { |
| 518 | return $embed; |
| 519 | } |
| 520 | preg_match( '/src=\"(.+?)\"/', $embed->embed, $match ); |
| 521 | $url_full = $match[1]; |
| 522 | $modified_url = str_replace( 'playlist-v2', 'playlist', $url_full ); |
| 523 | if ( $setting['embedpress_pro_embeded_source'] == 'spotify' ) { |
| 524 | // apply elementor related mod |
| 525 | if ( isset( $setting['spotify_theme'] ) ) { |
| 526 | if ( strpos( $modified_url, '?' ) !== false ) { |
| 527 | $modified_url .= '&theme=' . sanitize_text_field( $setting['spotify_theme'] ); |
| 528 | } else { |
| 529 | $modified_url .= '?theme=' . sanitize_text_field( $setting['spotify_theme'] ); |
| 530 | } |
| 531 | } |
| 532 | } |
| 533 | |
| 534 | $embed->embed = str_replace( $url_full, $modified_url, $embed->embed ); |
| 535 | |
| 536 | return $embed; |
| 537 | } |
| 538 | } |