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