PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 3.3.3
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v3.3.3
4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 trunk 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9 4.0.0 4.0.1 4.0.10 4.0.11 4.0.12 4.0.13 4.0.14 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.10 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.4.0 4.4.1 4.4.10 4.4.11 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5.0 4.5.1
embedpress / EmbedPress / Includes / Classes / Elementor_Enhancer.php
embedpress / EmbedPress / Includes / Classes Last commit date
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 }