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