PluginProbe
WpStream – Live Streaming, Video on Demand, Pay Per View / 4.4.10
WpStream – Live Streaming, Video on Demand, Pay Per View v4.4.10
4.14.1 4.14.0 4.13.2 4.13.1 4.13 4.12.5 4.12.4 4.12.3 4.12.2 4.12.1 4.12 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5 4.5.1 4.5.11 4.5.11.1 4.5.11.2 4.5.11.4 4.5.11.5 4.5.11.6 All 181 releases
← All changes | includes/class-wpstream-player.php +271 -1070 4.12.14.4.10 View file →
@@ -12,20 +12,10 @@
12 12 *
13 13 * @author cretu
14 14 */
15 15 class Wpstream_Player{
16 - public $main;
17 -
18 - /**
19 - * @var Wpstream_Playback_Session
20 - */
21 - public $playback_session;
22 -
23 16 public function __construct($plugin_main) {
24 17 $this->main = $plugin_main;
25 -
26 - require_once dirname( __FILE__ ) . '/player/class-wpstream-playback-session.php';
27 - $this->playback_session = new Wpstream_Playback_Session();
28 18
29 19 add_filter( 'the_content',array($this, 'wpstream_filter_the_title') );
30 20 add_action( 'woocommerce_before_single_product', array($this,'wpstream_user_logged_in_product_already_bought') );
31 21
@@ -30,9 +20,13 @@
30 20 add_action( 'woocommerce_before_single_product', array($this,'wpstream_user_logged_in_product_already_bought') );
31 21
32 22 add_action( 'wp_ajax_wpstream_player_check_status', array($this,'wpstream_player_check_status') );
33 23 add_action('wp_ajax_nopriv_wpstream_player_check_status', array($this,'wpstream_player_check_status'));
34 -
24 +
25 +
26 +
27 +
28 +
35 29 }
36 30
37 31
38 32
@@ -48,34 +42,29 @@
48 42 * @author cretu
49 43 */
50 44
51 45 public function wpstream_player_check_status(){
52 - // did not add a nonce check here because this is a call done from the frontend
53 - // and the page might be cached, so the nonce would not be valid
54 - $channel_id = intval($_POST['channel_id']);
46 + $channel_id = intval($_POST['channel_id']);
55 47
56 48
57 - $transient_name = 'event_data_to_return_'. $channel_id;
58 - $event_data_for_transient = get_transient( $transient_name );
49 + $transient_name = 'event_data_to_return_'. $channel_id;
50 + $event_data_for_transient = get_transient( $transient_name );
59 51
60 52
61 - $usefull_info =' get cache from transiet';
53 +
62 54 if ( false === $event_data_for_transient || $event_data_for_transient=='' ) { //ws || $hls_to_return==''
63 55 $notes = 'wpstream_player_check_status_note_from_js';
64 - $event_status = $this->main->wpstream_live_connection->wpstream_check_event_status_api_call($channel_id,$notes);
56 + $event_status = $this->main->wpstream_live_connection-> wpstream_check_event_status_api_call($channel_id,$notes);
65 57 $event_data_for_transient = $event_status;
66 - $usefull_info =' no cache found';
58 +
67 59 set_transient($transient_name,$event_data_for_transient,45);
68 60 }
69 61
70 62
71 63 if( isset($event_data_for_transient['hls_playback_url']) && $event_data_for_transient['hls_playback_url']!=''){
72 - // cleanup any previous echo before sending json
73 - ob_end_clean();
74 64 echo json_encode( array(
75 65
76 66 'started' => 'yes',
77 - 'usefull_info' => $usefull_info,
78 67 'channel_id' => $channel_id,
79 68 'event_uri' => $event_data_for_transient['hls_playback_url'],
80 69 'live_conect_views' => $event_data_for_transient['stats_url'],
81 70 'chat_url' => $event_data_for_transient['chat_url'],
@@ -82,25 +71,20 @@
82 71 '$event_data_for_transient'=>$event_data_for_transient
83 72
84 73
85 74 ));
86 - $usedfull_info =' ';
87 75 update_post_meta($channel_id,'stream_name',$event_data_for_transient['stream_name']);
88 76 update_post_meta($channel_id,'hls_key_retrieval_url',$event_data_for_transient['hls_key_retrieval_url']);
89 77 delete_transient( 'free_event_streamName_'.$event_data_for_transient['stream_name']);
90 78
91 79 }else{
92 - // cleanup any previous echo before sending json
93 - ob_end_clean();
94 80 echo json_encode( array(
95 81 'started' => 'no',
96 - 'usefull_info' => $usefull_info,
97 82 'server_id' => '',
98 - 'channel_id' => $channel_id,
83 + 'channel_id' => $channel_id,
99 84 'event_uri' => '',
100 85 'live_conect_views' => '',
101 86 'chat_url' => '',
102 -
103 87
104 88 ));
105 89
106 90 }
@@ -115,12 +99,8 @@
115 99 *
116 100 * @author cretu
117 101 */
118 102 public function wpstream_filter_the_title( $content ) {
119 - if(function_exists('wpstream_remove_wpstream_filter')){
120 - return $content;
121 - }
122 -
123 103 if( is_singular('wpstream_product') || is_singular('wpstream_product_vod') ){
124 104 global $post;
125 105 $args=array('id'=>$post->ID);
126 106 $custom_content = $this->wpstream_insert_player_inpage($args);
@@ -172,32 +152,23 @@
172 152 * @author cretu
173 153 */
174 154
175 155 public function wpstream_video_player_shortcode($from_sh_id='') {
176 - // disable cache in order to be able to check the nonce
177 - if ( !defined( 'DONOTCACHEPAGE' ) ) {
178 - define( 'DONOTCACHEPAGE', true );
179 - }
180 156
181 - wp_enqueue_script('video.min');
182 - wp_enqueue_script('wpstream-player');
157 +
183 158
184 159 if ( is_user_logged_in() ) {
185 160 global $product;
186 161 $current_user = wp_get_current_user();
187 162 $product_id = intval($from_sh_id);
188 - $term_list = wp_get_post_terms($product_id, 'product_type');
189 - $possible_bundle = get_post_meta($product_id, 'wpstream_part_of_bundle', true);
163 + $term_list = wp_get_post_terms($product_id, 'product_type');
164 +
190 165
191 166
192 167
193 168
194 - if (
195 -
196 - ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) && wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product_id) ) ||
197 - ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) && (intval($possible_bundle)!=0) && wc_customer_bought_product( $current_user->user_email, $current_user->ID, $possible_bundle) ) ||
198 - get_post_type($product_id)=='wpstream_product' ||
199 - get_post_type($product_id)=='wpstream_product_vod' ){
169 + if ( ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) && wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product_id) )
170 + || get_post_type($product_id)=='wpstream_product' || get_post_type($product_id)=='wpstream_product_vod' ){
200 171 global $product;
201 172 echo '<div class="wpstream_player_wrapper wpstream_player_shortcode"><div class="wpstream_player_container">';
202 173
203 174
@@ -221,10 +192,9 @@
221 192 }else{
222 193
223 194 if( get_post_type($product_id) == 'product' ){
224 195 echo '<div class="wpstream_player_wrapper wpstream_player_shortcode no_buy"><div class="wpstream_player_container">';
225 - $message =esc_html( get_option('wpstream_product_not_bought','You did not yet purchase this item.')) ;
226 - echo '<div class="wpstream_notice" style="background:#e16767;">'.esc_html($message).'</div>';
196 + echo '<div class="wpstream_notice" style="background:#e16767;">'.esc_html__('You did not buy this product!','wpstream').'</div>';
227 197 echo '</div></div>';
228 198 }
229 199 }
230 200
@@ -231,26 +201,12 @@
231 201
232 202 }else{
233 203
234 204 $product_id = intval($from_sh_id);
235 - $term_list = wp_get_post_terms($product_id, 'product_type');
236 -
237 - if( get_post_type($product_id) == 'product' && ($term_list[0]->name=='live_stream' || $term_list[0]->name=='video_on_demand') ){
238 -
239 - echo '<div class="wpstream_player_wrapper wpstream_player_shortcode no_buy"><div class="wpstream_player_container">';
240 - $message= esc_html( get_option('wpstream_product_not_login','You must be logged in to watch this video.')) ;
241 -
242 -
243 - echo '<div class="wpstream_notice" style="background:#e16767;">'.esc_html($message).'</div>';
244 - echo '</div></div>';
245 - }elseif( get_post_type($product_id) == 'wpstream_product' ){
246 - echo '<div class="wpstream_player_wrapper wpstream_player_shortcode"><div class="wpstream_player_container">';
247 - $this->wpstream_live_event_player($product_id);
248 - echo '</div></div>';
205 + if( get_post_type($product_id) == 'wpstream_product' ){
206 + $this->wpstream_live_event_player($product_id);
249 207 } else if( get_post_type($product_id) == 'wpstream_product_vod' ){
250 - echo '<div class="wpstream_player_wrapper wpstream_player_shortcode"><div class="wpstream_player_container">';
251 - $this->wpstream_video_on_demand_player($product_id);
252 - echo '</div></div>';
208 + $this->wpstream_video_on_demand_player($product_id);
253 209 }
254 210 }
255 211 }
256 212
@@ -262,16 +218,9 @@
262 218 * @author cretu
263 219 */
264 220
265 221 public function wpstream_video_player_shortcode_low_latency($from_sh_id='') {
266 - if ( !defined( 'DONOTCACHEPAGE' ) ) {
267 - define( 'DONOTCACHEPAGE', true );
268 - }
269 222
270 - wp_enqueue_script('video.min');
271 - wp_enqueue_script('wpstream-player');
272 -
273 -
274 223 if ( is_user_logged_in() ) {
275 224 global $product;
276 225 $current_user = wp_get_current_user();
277 226 $product_id = intval($from_sh_id);
@@ -298,11 +247,9 @@
298 247 }else{
299 248
300 249 if( get_post_type($product_id) == 'product' ){
301 250 echo '<div class="wpstream_player_wrapper wpstream_player_shortcode no_buy"><div class="wpstream_player_container">';
302 -
303 - $message =esc_html( get_option('wpstream_product_not_bought','You did not yet purchase this item.')) ;
304 - echo '<div class="wpstream_notice" style="background:#e16767;">'.$message.'</div>';
251 + echo '<div class="wpstream_notice" style="background:#e16767;">'.esc_html__('You did not buy this product!','wpstream').'</div>';
305 252 echo '</div></div>';
306 253 }
307 254 }
308 255
@@ -332,114 +279,8 @@
332 279 }
333 280 }
334 281 return $url;
335 282 }
336 -
337 - /**
338 - * Site origin (scheme://host:port) for the new player `embedAncestor` query param.
339 - * The player includes this value in the embed-key hash; mint keys with the same string.
340 - *
341 - * @return string
342 - */
343 - private function wpstream_get_site_origin_for_embed() {
344 - $parts = wp_parse_url( home_url() );
345 - if ( empty( $parts['host'] ) ) {
346 - return '';
347 - }
348 - $scheme = isset( $parts['scheme'] ) ? $parts['scheme'] . '://' : 'https://';
349 - $host = $parts['host'];
350 - $port = isset( $parts['port'] ) ? ':' . $parts['port'] : '';
351 - return $scheme . $host . $port;
352 - }
353 -
354 - /**
355 - * Keep this in sync with player/src/config/env.js fallback.
356 - *
357 - * @return string
358 - */
359 - private function wpstream_get_player_embed_key_salt() {
360 - $default_salt = 'EYjb84vNTXE85TfR';
361 - $configured = trim( (string) get_option( 'wpstream_player_embed_key_salt', '' ) );
362 - $base_salt = '' !== $configured ? $configured : $default_salt;
363 -
364 - return (string) apply_filters( 'wpstream_player_embed_key_salt', $base_salt );
365 - }
366 -
367 - /**
368 - * Masked salt metadata for debugging embed-key mismatches.
369 - *
370 - * @return array<string,mixed>
371 - */
372 - private function wpstream_get_player_embed_key_salt_debug_meta() {
373 - $default_salt = 'EYjb84vNTXE85TfR';
374 - $configured = trim( (string) get_option( 'wpstream_player_embed_key_salt', '' ) );
375 - $base_salt = '' !== $configured ? $configured : $default_salt;
376 - $final_salt = (string) apply_filters( 'wpstream_player_embed_key_salt', $base_salt );
377 - $len = strlen( $final_salt );
378 - $prefix = $len > 0 ? substr( $final_salt, 0, min( 2, $len ) ) : '';
379 - $suffix = $len > 2 ? substr( $final_salt, -2 ) : '';
380 -
381 - return array(
382 - 'source' => '' !== $configured ? 'option_or_filter' : 'default_or_filter',
383 - 'length' => $len,
384 - 'sha256_12' => substr( hash( 'sha256', $final_salt ), 0, 12 ),
385 - 'maskedPreview' => $prefix . ( $len > 0 ? '***' : '' ) . $suffix,
386 - );
387 - }
388 -
389 - /**
390 - * Mirror player/src/security/embed-key.js hash generation.
391 - *
392 - * @param string $video Media path used by /player/vod?video=...
393 - * @param string $validate_playback_session_url Optional session verify URL.
394 - * @param string $embed_ancestor Optional frame ancestor origin.
395 - * @param string $encrypt_raw Optional encrypt toggle (yes/true/1).
396 - * @return string
397 - */
398 - private function wpstream_generate_player_embed_key( $video, $validate_playback_session_url = '', $embed_ancestor = '', $encrypt_raw = '' ) {
399 - $video = trim( (string) $video );
400 - if ( '' === $video ) {
401 - return '';
402 - }
403 -
404 - $hash_input = $video . ' ' . $this->wpstream_get_player_embed_key_salt();
405 - $validate_playback_session_url = trim( (string) $validate_playback_session_url );
406 - if ( '' !== $validate_playback_session_url ) {
407 - $hash_input = $validate_playback_session_url . ' ' . $hash_input;
408 - }
409 -
410 - $embed_ancestor = trim( (string) $embed_ancestor );
411 - if ( '' !== $embed_ancestor ) {
412 - $hash_input = $embed_ancestor . ' ' . $hash_input;
413 - }
414 -
415 - $encrypt_raw = strtolower( trim( (string) $encrypt_raw ) );
416 - if ( in_array( $encrypt_raw, array( 'yes', 'true', '1' ), true ) ) {
417 - $hash_input = 'crypt ' . $hash_input;
418 - }
419 -
420 - $binary_hash = md5( $hash_input, true );
421 - $base64 = base64_encode( $binary_hash );
422 -
423 - return rtrim( strtr( $base64, '+/', '-_' ), '=' );
424 - }
425 -
426 - function wpstream_get_live_connect_uri($event_status, $playback_url_key = 'hls_playback_url') {
427 - if (isset($event_status['stats_url']) && trim($event_status['stats_url']) !== '') {
428 - return trim($event_status['stats_url']);
429 - }
430 -
431 - if (
432 - isset($event_status[$playback_url_key]) &&
433 - trim($event_status[$playback_url_key]) !== '' &&
434 - strpos($event_status[$playback_url_key], 'live.streamer.wpstream.net') !== false
435 - ) {
436 - $live_conect_array = explode('live.streamer.wpstream.net', $event_status[$playback_url_key]);
437 - return $this->remove_http($live_conect_array[0] . 'live.streamer.wpstream.net');
438 - }
439 -
440 - return '';
441 - }
442 283
443 284 /**
444 285 * Get event settings
445 286 *
@@ -447,13 +288,10 @@
447 288 */
448 289
449 290 function wpestream_return_event_settings($product_id){
450 291
451 - $local_event_options = get_post_meta( $product_id, 'local_event_options', true);
452 - $use_global_event_options = get_post_meta($product_id, 'use_global_event_options',true);
453 - $is_local_event_options_enabled = is_array( $local_event_options ) || intval( $use_global_event_options ) === 1;
454 -
455 - if( !$is_local_event_options_enabled ) {
292 + $local_event_options = get_post_meta($product_id,'local_event_options',true);
293 + if(!is_array($local_event_options)){
456 294 $local_event_options = get_option('wpstream_user_streaming_global_channel_options') ;
457 295 }
458 296
459 297 return $local_event_options;
@@ -469,197 +307,124 @@
469 307 * @author cretu
470 308 */
471 309
472 310 function wpstream_live_event_player($channel_id,$poster_show='',$use_chat=''){
473 - wp_enqueue_script('video.min');
474 - wp_enqueue_script('wpstream-player');
475 -
476 -
477 - $player_theme = $this->wpstream_get_player_theme( $channel_id );
478 - $now = time().rand(0,1000000);
479 - $overlay_video_div_id = "random_id_".$now;
480 - // print '<div id="'.esc_attr($overlay_video_div_id).'" class="vjs-title-overlay wpstream-video-title-overlay">'.esc_html__('Playing:','wpstream').' '.get_the_title($channel_id).'</div>';
481 -
482 -
483 - $thumb_id = get_post_thumbnail_id($channel_id);
484 - $thumb = wp_get_attachment_image_src($thumb_id,'small');
485 - $usernamestream = esc_html ( get_option('wpstream_api_username','') );
486 - $autoplay = true;
487 -
488 - $event_settings = $this->wpestream_return_event_settings($channel_id);
489 -
490 - $transient_name = 'event_data_to_return_'. $channel_id;
491 - $event_status = get_transient( $transient_name );
492 -
493 - if ( false === $event_status || $event_status=='' ) {
311 +
312 + $now = time().rand(0,1000000);
313 + $thumb_id = get_post_thumbnail_id($channel_id);
314 + $thumb = wp_get_attachment_image_src($thumb_id,'small');
315 + $usernamestream = esc_html ( get_option('wpstream_api_username','') );
316 + $autoplay = 'autoplay';
317 +
318 + $event_settings = $this->wpestream_return_event_settings($channel_id);
494 319 $notes = 'wpstream_live_event_player_note';
495 320 $event_status = $this->main->wpstream_live_connection-> wpstream_check_event_status_api_call($channel_id,$notes);
496 - set_transient($transient_name, $event_status, 45);
497 - }
321 + $hls_playback_url = '';
322 + $live_conect_views = '';
323 +
324 + if(isset($event_status['status']) && $event_status['status']=='active'){
325 + //live event
326 + if(isset($event_status['hls_playback_url'])){
327 + $hls_playback_url = $event_status['hls_playback_url'];
328 +
329 + update_post_meta($channel_id,'stream_name',$event_status['stream_name']);
330 + update_post_meta($channel_id,'hls_key_retrieval_url',$event_status['hls_key_retrieval_url']);
331 + delete_transient( 'free_event_streamName_'.$event_status['stream_name']);
498 332
499 - $hls_playback_url = '';
500 - $live_conect_views = '';
501 -
502 - if(isset($event_status['status']) && $event_status['status']=='active'){
503 - //live event
504 - if(isset($event_status['hls_playback_url'])){
505 - $hls_playback_url = $event_status['hls_playback_url'];
506 -
507 - update_post_meta($channel_id,'stream_name',$event_status['stream_name']);
508 - update_post_meta($channel_id,'hls_key_retrieval_url',$event_status['hls_key_retrieval_url']);
509 - delete_transient( 'free_event_streamName_'.$event_status['stream_name']);
510 -
333 + $live_conect_array = explode('live.streamer.wpstream.net',$hls_playback_url);
334 + $live_conect_views = $live_conect_array[0].'live.streamer.wpstream.net';
335 + $live_conect_views = $this->remove_http($live_conect_views);
336 +
337 + }
338 + if(isset($event_status['chat_url'])){
339 + $chat_url = $event_status['chat_url'];
340 + }
341 +
342 + }else{
343 + // event not live
511 344 }
512 - $live_conect_views = $this->wpstream_get_live_connect_uri($event_status, 'hls_playback_url');
513 - if(isset($event_status['chat_url'])){
514 - $chat_url = $event_status['chat_url'];
345 +
346 +
347 +
348 +
349 +
350 +
351 +
352 + if(isset($event_settings['autoplay']) && intval($event_settings['autoplay'])==0){
353 + $autoplay='no_autoplay';
515 354 }
516 -
517 - }else{
518 - // event not live
519 - }
520 -
521 - if(isset($event_settings['autoplay']) && intval($event_settings['autoplay'])==0){
522 - $autoplay=false;
523 - }
524 -
525 - $bootstrap_is_muted = ( isset( $event_settings['mute'] ) && intval( $event_settings['mute'] ) === 1 );
526 - $bootstrap_trailer_attachment_id = intval( get_post_meta( $channel_id, 'video_trailer', true ) );
527 - $bootstrap_trailer_url = '';
528 - if ( $bootstrap_trailer_attachment_id !== 0 ) {
529 - $bootstrap_trailer_url = wp_get_attachment_url( $bootstrap_trailer_attachment_id );
530 - }
531 - $live_content_uri = isset( $hls_playback_url ) ? trim( $hls_playback_url ) : '';
532 - $live_stats_uri = isset( $live_conect_views ) ? trim( $live_conect_views ) : '';
533 - $live_chat_uri = isset( $chat_url ) ? trim( $chat_url ) : '';
534 - $play_trailer_button_element_id = 'wpstream_live_video_play_trailer_btn_' . $now;
535 - $mute_trailer_button_element_id = 'wpstream_live_video_mute_trailer_btn_' . $now;
536 - $unmute_trailer_button_element_id = 'wpstream_live_video_unmute_trailer_btn_' . $now;
537 -
538 -
539 -
540 - $player_nonce = wp_create_nonce( 'wpstream_player_check_status_nonce' );
541 - echo '<div class="wpstream_live_player_wrapper function_wpstream_live_event_player" data-now="'.$now.'" data-me="'.esc_attr($usernamestream).'" data-product-id="'.$channel_id.'" id="wpstream_live_player_wrapper'.$now.'" data-nonce="' . $player_nonce . '" data-wpstream-bootstrap="live" data-instance-id="wpstream-live-'.esc_attr( $now ).'" data-video-element-id="'.esc_attr( $now ).'" data-title-overlay-element-id="'.esc_attr( $overlay_video_div_id ).'" data-content-url="'.esc_attr( $live_content_uri ).'" data-stats-uri="'.esc_attr( $live_stats_uri ).'" data-chat-url="'.esc_attr( $live_chat_uri ).'" data-trailer-url="'.esc_attr( $bootstrap_trailer_url ).'" data-autoplay="'. ( $autoplay ? '1' : '0' ) .'" data-muted="'. ( $bootstrap_is_muted ? '1' : '0' ) .'" data-play-trailer-button-element-id="'.esc_attr( $play_trailer_button_element_id ).'" data-mute-trailer-button-element-id="'.esc_attr( $mute_trailer_button_element_id ).'" data-unmute-trailer-button-element-id="'.esc_attr( $unmute_trailer_button_element_id ).'" > ';
355 +
356 + echo '<div class="wpstream_live_player_wrapper function_wpstream_live_event_player" data-now="'.$now.'" data-me="'.esc_attr($usernamestream).'" data-product-id="'.$channel_id.'" id="wpstream_live_player_wrapper'.$now.'" > ';
357 +
358 + if( ( isset($event_settings['view_count'] ) && intval($event_settings['view_count'])==1 ) || !isset($event_settings['view_count']) ){
359 + echo '<div id="wpestream_live_counting" class="wpestream_live_counting"></div>';
360 + }
542 361
543 - $show_viewer_count = (
544 - ( isset($event_settings['view_count']) && intval($event_settings['view_count']) == 1 )
545 - || !isset($event_settings['view_count'])
546 - );
362 + $show_wpstream_not_live_mess=' style="display:none;" ';
363 + if(trim($hls_playback_url) ==''){
547 364
548 - echo '<div id="wpestream_live_counting" class="wpestream_live_counting" data-showviewercount="' . ($show_viewer_count ? '1' : '0') . '"></div>';
549 -
550 - $show_wpstream_not_live_mess=' style="display:none;" ';
551 - if(trim($hls_playback_url) ==''){
552 -
553 - $show_wpstream_not_live_mess='';
554 - }
555 -
556 - $message_show= esc_html( get_option('wpstream_you_are_not_live','We are not live at this moment')) ;
557 -
558 - if( function_exists('wpstream_theme_not_live_section' ) ) {
559 - print wpstream_theme_not_live_section( $channel_id );
560 - } else {
561 - print '<div class="wpstream_not_live_mess" '.$show_wpstream_not_live_mess.' style="display: none">
562 - <div class="wpstream_not_live_mess_back"></div>
563 - <div class="wpstream_not_live_mess_mess">'.esc_html($message_show).'</div>
564 - </div>';
565 - }
566 -
567 -
568 - $poster_data='';
569 - if(isset($thumb[0])){
570 - $poster_data=' poster="'.$thumb[0].'" ';
571 - }
572 - if($poster_show=='no'){
365 + $show_wpstream_not_live_mess='';
366 + }
367 +
368 + $message_show= esc_html( get_option('wpstream_you_are_not_live','We are not live at this moment. Please check back later.')) ;
369 + print '<div class="wpstream_not_live_mess" '.$show_wpstream_not_live_mess.'><div class="wpstream_not_live_mess_back"></div><div class="wpstream_not_live_mess_mess">'.esc_html($message_show).'</div></div>';
370 +
573 371 $poster_data='';
574 - }
372 + if(isset($thumb[0])){
373 + $poster_data=' poster="'.$thumb[0].'" ';
374 + }
375 + if($poster_show=='no'){
376 + $poster_data='';
377 + }
575 378
576 - $is_muted=false;
577 - if( isset($event_settings['mute']) && intval($event_settings['mute'])==1){
578 - $is_muted=true;
579 - }
580 - // override $is_muted and $autoplay here - for testing
581 - // $autoplay = true;
582 - // $is_muted = false;
583 -
584 - $autoplay_str = $autoplay ? 'autoplay' : '';
585 - $is_muted_str = $is_muted ? 'muted' : '';
586 -
587 - $video_trailer = '';
588 - $trailer_attachment_id = intval (get_post_meta( $channel_id, 'video_trailer', true ));
589 - $video_trailer = '';
590 - $video_trailer_type = '';
591 - $has_trailer_class = '';
592 - if($trailer_attachment_id!=0) {
593 - $video_trailer = wp_get_attachment_url( $trailer_attachment_id );
594 - $attachment_metadata = wp_get_attachment_metadata($trailer_attachment_id);
595 - if( isset ($attachment_metadata['mime_type']) ) {
596 - $video_trailer_type = $attachment_metadata['mime_type'];
379 + $is_muted='';
380 + if( isset($event_settings['mute']) && intval($event_settings['mute'])==1){
381 + $is_muted=' muted ';
597 382 }
598 - $poster_data=''; // cancel poster for theme
599 - $has_trailer_class='wpstream_theme_player_has_trailer';
600 - }
383 +
384 +
385 +
386 + echo'
387 + <video id="wpstream-video'.$now.'" '.$poster_data.' class="video-js vjs-default-skin vjs-16-9 vjs-wpstream" playsinline="true" '.$is_muted.' controls data-autoplay='.$autoplay.'>
388 + <source
389 + src="'.$hls_playback_url.'"
390 + type="application/x-mpegURL">
391 + </video>';
601 392
602 - // override trailer url here - for testing
603 - // $video_trailer = '';
604 - // $video_trailer = '/wp-content/uploads/2023/10/production-ID_4608975.mp4';
605 - // $video_trailer = '/wp-content/uploads/2023/10/ultrawide.mp4';
606 -
607 -
608 -
609 - $player_logo_position_data = $this->wpstream_get_player_logo_data( $channel_id );
610 - $player_logo_position = $player_logo_position_data['player_logo_position'];
611 - $player_logo_position_class = $player_logo_position_data['player_logo_position_class'];
612 - $player_logo_horizontal_position = $player_logo_position_data['player_logo_horizontal_position'];
613 -// echo'
614 -// <div class="wpstream-video-container">
615 -// <div id="wpstream-pre-load-spinner" class="wpstream-pre-load-spinner"></div>
616 -// <video id="wpstream-video'.$now.'" '.$poster_data.' class="video-js vjs-default-skin vjs-fluid vjs-wpstream ' . esc_attr($has_trailer_class) . ' ' . $player_theme . ' ' . $player_logo_position_class . ' ' . $player_logo_horizontal_position . '" playsinline="true" '.$is_muted_str." ".$autoplay_str.'>
617 -// </video>
618 -// </div>';
619 - echo '<div class="wpstream-pre-load-spinner"></div>';
620 - echo'
621 - <video id="wpstream-video'.$now.'" '.$poster_data.' class="video-js vjs-default-skin vjs-fluid vjs-wpstream ' . esc_attr($has_trailer_class) . ' ' . $player_theme . ' ' . $player_logo_position_class . ' ' . $player_logo_horizontal_position . '" playsinline="true" '.$is_muted_str." ".$autoplay_str.'>
622 -
623 - </video>';
624 - if ($video_trailer){
625 - print '<div class="wpstream_theme_trailer_wrapper">';
626 - print '<div id="' . esc_attr( $play_trailer_button_element_id ) . '" style="display: none;" class="wpstream_video_on_demand_play_trailer">
627 - <svg width="30" height="24" viewBox="0 0 30 24" fill="none" xmlns="http://www.w3.org/2000/svg">
628 - <path fill-rule="evenodd" clip-rule="evenodd" d="M26.6667 1.5H3.33337C2.50495 1.5 1.83337 2.17157 1.83337 3V21C1.83337 21.8284 2.50495 22.5 3.33338 22.5H26.6667C27.4951 22.5 28.1667 21.8284 28.1667 21V3C28.1667 2.17157 27.4951 1.5 26.6667 1.5ZM3.33337 0C1.67652 0 0.333374 1.34315 0.333374 3V21C0.333374 22.6569 1.67652 24 3.33338 24H26.6667C28.3236 24 29.6667 22.6569 29.6667 21V3C29.6667 1.34315 28.3236 0 26.6667 0H3.33337ZM4.83337 4C4.55723 4 4.33337 4.22386 4.33337 4.5V6.16667C4.33337 6.44281 4.55723 6.66667 4.83337 6.66667H6.50004C6.77618 6.66667 7.00004 6.44281 7.00004 6.16667V4.5C7.00004 4.22386 6.77618 4 6.50004 4H4.83337ZM23.5 4C23.2239 4 23 4.22386 23 4.5V6.16667C23 6.44281 23.2239 6.66667 23.5 6.66667H25.1667C25.4428 6.66667 25.6667 6.44281 25.6667 6.16667V4.5C25.6667 4.22386 25.4428 4 25.1667 4H23.5ZM4.33337 11.167C4.33337 10.8909 4.55723 10.667 4.83337 10.667H6.50004C6.77618 10.667 7.00004 10.8909 7.00004 11.167V12.8337C7.00004 13.1098 6.77618 13.3337 6.50004 13.3337H4.83337C4.55723 13.3337 4.33337 13.1098 4.33337 12.8337V11.167ZM23.5001 10.667C23.224 10.667 23.0001 10.8909 23.0001 11.167V12.8337C23.0001 13.1098 23.224 13.3337 23.5001 13.3337H25.1668C25.4429 13.3337 25.6668 13.1098 25.6668 12.8337V11.167C25.6668 10.8909 25.4429 10.667 25.1668 10.667H23.5001ZM4.33337 17.833C4.33337 17.5569 4.55723 17.333 4.83337 17.333H6.50004C6.77618 17.333 7.00004 17.5569 7.00004 17.833V19.4997C7.00004 19.7758 6.77618 19.9997 6.50004 19.9997H4.83337C4.55723 19.9997 4.33337 19.7758 4.33337 19.4997V17.833ZM23.5001 17.333C23.224 17.333 23.0001 17.5569 23.0001 17.833V19.4997C23.0001 19.7758 23.224 19.9997 23.5001 19.9997H25.1668C25.4429 19.9997 25.6668 19.7758 25.6668 19.4997V17.833C25.6668 17.5569 25.4429 17.333 25.1668 17.333H23.5001ZM19.0677 13.0997L13.4077 16.5087C13.0434 16.7281 12.6092 16.7094 12.2661 16.5091C11.9218 16.3081 11.6666 15.9224 11.6666 15.4086V8.59072C11.6666 8.07698 11.9218 7.69125 12.2661 7.49026C12.6092 7.28999 13.0434 7.27126 13.4077 7.49064L19.0677 10.8996C19.8663 11.3805 19.8663 12.6188 19.0677 13.0997Z"/>
629 - </svg>
630 - '.esc_html__('Play Trailer', 'wpstream').'</div>';
631 - print '<div id="' . esc_attr( $mute_trailer_button_element_id ) . '" style="display: none;" class="wpstream_video_on_demand_mute_trailer">
632 - <svg width="37" height="36" viewBox="0 0 37 36" fill="none" xmlns="http://www.w3.org/2000/svg">
633 - <path fill-rule="evenodd" clip-rule="evenodd" d="M1.32143 10.0789H8.69499L18.8964 0L21.1428 0.921053V35.1316L18.8964 36L8.69499 25.8684H1.32143L0 24.5526V11.3947L1.32143 10.0789ZM10.175 23.6842L18.5 31.9474V4.10526L10.175 12.3158L9.24999 12.7105H2.64286V23.2368H9.24999L10.175 23.6842ZM37 17.9737C37.0069 22.2216 35.5329 26.3401 32.8295 29.6263L30.9478 27.7579C33.1613 24.9734 34.3629 21.5249 34.3571 17.9737C34.3571 14.2895 33.0885 10.8974 30.9637 8.21053L32.8454 6.34211C35.5382 9.62494 37.0062 13.735 37 17.9737ZM31.7143 17.9737C31.7193 20.8255 30.7895 23.6011 29.0661 25.8789L27.1738 23.9947C28.4127 22.2295 29.0752 20.1272 29.0714 17.9737C29.0751 15.8287 28.4174 13.7344 27.1871 11.9737L29.0793 10.0895C30.7338 12.2868 31.7143 15.0158 31.7143 17.9737ZM26.4286 17.9737C26.4286 19.4842 26.0057 20.8947 25.2657 22.0947L23.3126 20.1526C23.6249 19.4729 23.7876 18.7345 23.7899 17.9869C23.7922 17.2394 23.634 16.5001 23.3258 15.8184L25.2789 13.8737C26.0083 15.0684 26.4286 16.4737 26.4286 17.9737Z" fill="white"/>
634 - </svg>
635 -
636 - </div>';
637 - print '<div id="' . esc_attr( $unmute_trailer_button_element_id ) . '" style="display: none;" class="wpstream_video_on_demand_unmute_trailer">
638 - <svg width="33" height="32" viewBox="0 0 33 32" fill="none" xmlns="http://www.w3.org/2000/svg">
639 - <path fill-rule="evenodd" clip-rule="evenodd" d="M1.15625 8.85688H7.60813L16.5344 0L18.5 0.809375V30.8719L16.5344 31.635L7.60813 22.7319H1.15625L0 21.5756V10.0131L1.15625 8.85688ZM8.90313 20.8125L16.1875 28.0738V3.6075L8.90313 10.8225L8.09375 11.1694H2.3125V20.4194H8.09375L8.90313 20.8125ZM30.5967 11.3127L32.2316 12.9477L28.2287 16.9506L32.2316 20.9559L30.5967 22.5908L26.5938 18.5856L22.5885 22.5908L20.9536 20.9559L24.9588 16.9506L20.9513 12.95L22.5862 11.3151L26.5938 15.3157L30.5967 11.3127Z" fill="white"/>
640 - </svg>
641 - </div>';
642 - print '</div>';
393 + print '<script type="text/javascript">
394 + //<![CDATA[
395 + jQuery(document).ready(function(){
396 + wpstream_player_initialize("'.$now.'","'.$hls_playback_url.'","'.$live_conect_views.'","'.$autoplay.'");';
397 + print'});
398 + //]]>
399 + </script>';
400 + print '</div>';
401 +
402 +
403 + if(trim($hls_playback_url) ==''){
404 + // $show_wpstream_not_live_mess='';
405 + }else{
406 + print '<script type="text/javascript">
407 + //<![CDATA[
408 + jQuery(document).ready(function(){
409 + var player_wrapper = jQuery(".wpstream_live_player_wrapper");
410 + wpstream_read_websocket_info("'.$channel_id.'","wpstream_live_player_wrapper'.$now.'", player_wrapper ,"'.$chat_url.'", "'.$hls_playback_url.'");
411 + });
412 + //]]>
413 + </script>';
643 414 }
644 - print '</div>';
645 -
646 -
647 - // Live player bootstrap is handled by wpstream-player-bootstrap.js.
648 -
649 -
650 - if($use_chat=="yes"){
651 - $this->wpstream_connect_to_chat($channel_id);
652 - }
653 -
654 - usleep (10000);
415 +
416 +
417 + if($use_chat=="yes"){
418 + $this->wpstream_connect_to_chat($channel_id);
419 + }
420 +
421 + usleep (10000);
655 422
656 - }
423 + }
657 424
658 425
659 426
660 -
661 -
662 427 /**
663 428 *
664 429 * Edited in 4.0
665 430 *
@@ -686,11 +451,14 @@
686 451 if(isset($event_status['status']) && $event_status['status']=='active'){
687 452 //live event
688 453 if(isset($event_status['sldp_playback_url'])){
689 454 $hls_playback_url = $event_status['sldp_playback_url'];
455 +
456 + $live_conect_array = explode('live.streamer.wpstream.net',$hls_playback_url);
457 + $live_conect_views = $live_conect_array[0].'live.streamer.wpstream.net';
458 + $live_conect_views = $this->remove_http($live_conect_views);
690 459
691 460 }
692 - $live_conect_views = $this->wpstream_get_live_connect_uri($event_status, 'sldp_playback_url');
693 461 if(isset($event_status['chat_url'])){
694 462 $chat_url =$event_status['chat_url'];
695 463 }
696 464
@@ -700,18 +468,9 @@
700 468
701 469
702 470
703 471
704 - $low_latency_is_muted = ( isset($event_settings['mute']) && intval($event_settings['mute']) == 1 );
705 - $low_latency_autoplay = true;
706 - if ( isset($event_settings['autoplay']) && intval($event_settings['autoplay']) == 0 ) {
707 - $low_latency_autoplay = false;
708 - }
709 - $low_latency_content_uri = isset( $hls_playback_url ) ? trim( $hls_playback_url ) : '';
710 - $low_latency_chat_uri = isset( $chat_url ) ? trim( $chat_url ) : '';
711 - $low_latency_stats_uri = isset( $live_conect_views ) ? trim( $live_conect_views ) : '';
712 -
713 - echo '<div class="wpstream_live_player_wrapper function_wpstream_live_event_player_low_latency wpstream_low_latency" data-now="'.$now.'" data-me="'.esc_attr($usernamestream).'" data-product-id="'.$channel_id.'" id="wpstream_live_player_wrapper'.$now.'" data-instance-id="wpstream-live-low-latency-'.esc_attr( $now ).'" data-wpstream-bootstrap="live-low-latency" data-event-id="'.esc_attr( $channel_id ).'" data-video-element-id="wpstream-video'.esc_attr( $now ).'" data-content-url="'.esc_attr( $low_latency_content_uri ).'" data-chat-url="'.esc_attr( $low_latency_chat_uri ).'" data-stats-uri="'.esc_attr( $low_latency_stats_uri ).'" data-autoplay="'. ( $low_latency_autoplay ? '1' : '0' ) .'" data-muted="'. ( $low_latency_is_muted ? '1' : '0' ) .'" > ';
472 + echo '<div class="wpstream_live_player_wrapper function_wpstream_live_event_player_low_latency wpstream_low_latency" data-now="'.$now.'" data-me="'.esc_attr($usernamestream).'" data-product-id="'.$channel_id.'" id="wpstream_live_player_wrapper'.$now.'" > ';
714 473
715 474
716 475 if( ( isset($event_settings['view_count'] ) && intval($event_settings['view_count'])==1 ) || !isset($event_settings['view_count']) ){
717 476 echo '<div id="wpestream_live_counting" class="wpestream_live_counting"></div>';
@@ -721,9 +480,9 @@
721 480 if(trim($hls_playback_url) ==''){
722 481 $show_wpstream_not_live_mess='';
723 482 }
724 483
725 - $message_show= esc_html( get_option('wpstream_you_are_not_live','We are not live at this moment')) ;
484 + $message_show= esc_html( get_option('wpstream_you_are_not_live','We are not live at this moment. Please check back later.')) ;
726 485 print '<div class="wpstream_not_live_mess " '.$show_wpstream_not_live_mess.' ><div class="wpstream_not_live_mess_back"></div><div class="wpstream_not_live_mess_mess">'. $message_show.'</div></div>';
727 486
728 487
729 488 $poster_data=' poster="'.$thumb[0].'" ';
@@ -732,16 +491,16 @@
732 491 }
733 492
734 493
735 494 $is_muted='';
736 - if( $low_latency_is_muted ){
495 + if( isset($event_settings['mute']) && intval($event_settings['mute'])==1){
737 496 $is_muted=' muted ';
738 497 }
739 498
740 499
741 500 $autoplay='autoplay';
742 - if( !$low_latency_autoplay ){
743 - $autoplay='';
501 + if(isset($event_settings['autoplay']) && intval($event_settings['autoplay'])==0){
502 + $autoplay='no_autoplay';
744 503 }
745 504
746 505 echo'
747 506 <div iccd="player" id="wpstream-video'.$now.'" '.$poster_data.' '.$is_muted.' class="" >
@@ -746,11 +505,33 @@
746 505 echo'
747 506 <div iccd="player" id="wpstream-video'.$now.'" '.$poster_data.' '.$is_muted.' class="" >
748 507 </div>';
749 508
750 - // Low-latency player bootstrap is handled by wpstream-player-bootstrap.js.
509 + print '<script type="text/javascript">
510 + //<![CDATA[
511 + jQuery(document).ready(function(){
512 + var low_latencyid="wpstream-video'.$now.'";
513 + document.addEventListener("DOMContentLoaded", initPlayer(low_latencyid, "'.$hls_playback_url.'","'.$is_muted.'","'.$autoplay.'" ) ); ';
514 + print'});
515 + //]]>
516 + </script>';
517 +
751 518
752 519
520 + if(trim($hls_playback_url) ==''){
521 + // $show_wpstream_not_live_mess='';
522 + }else{
523 + print '<script type="text/javascript">
524 + //<![CDATA[
525 + jQuery(document).ready(function(){
526 + var player_wrapper = jQuery(".wpstream_live_player_wrapper");
527 + wpstream_read_websocket_info("'.$channel_id.'","wpstream_live_player_wrapper'.$now.'", player_wrapper ,"'.$chat_url.'", "'.$hls_playback_url.'");
528 + });
529 + //]]>
530 + </script>';
531 + }
532 +
533 +
753 534 if($use_chat=="yes"){
754 535 $this->wpstream_connect_to_chat($channel_id);
755 536 }
756 537
@@ -791,19 +572,23 @@
791 572 if(is_ssl()){
792 573 $domain_scheme='https';
793 574 }
794 575
795 -
796 - $wpstream_vod_domain_lock = intval( get_option('wpstream_vod_domain_lock','') ) ;
797 - $corsorigin='*';
798 - if($wpstream_vod_domain_lock !== 0 ){
576 + $corsorigin='';
577 + if( isset($local_event_options['vod_domain_lock']) ){
578 + if (intval( $local_event_options['vod_domain_lock']) ==0 ){
579 + $corsorigin='*';
580 + }
581 + }else{
582 + $corsorigin='*';
583 + }
584 +
585 + if($corsorigin!='*'){
799 586 $corsorigin=$domain_scheme.'://'.$domain['host'];
800 - }
587 + }
801 588
802 -
803 589 $is_encrypt="false";
804 - $wpstream_vod_encrypt = intval( get_option('wpstream_vod_encrypt','') ) ;
805 - if( intval( $wpstream_vod_encrypt ) ==1 ){
590 + if( isset($local_event_options['vod_encrypt']) && intval( $local_event_options['vod_encrypt']) ==1 ){
806 591 $is_encrypt="true";
807 592 }
808 593
809 594 $hlsKeysUrlPrefix = get_site_url().'?wpstream_voddrm=';
@@ -816,15 +601,14 @@
816 601 'corsOrigin' => $corsorigin,
817 602 'encryptHls' => $encrypt,
818 603 'hlsKeysUrlPrefix' => $hlsKeysUrlPrefix,
819 604 'debugDrm' => $debugDrm,
820 - 'embed' => true,
821 605 );
822 606
823 607
824 608 $curl_response = $this->main->wpstream_live_connection->wpstream_baker_do_curl_base($url,$curl_post_fields);
825 609 $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY);
826 -
610 +
827 611 if($curl_response_decoded['success']){
828 612 set_transient( $transient_name, $curl_response_decoded['hlsUrl'] ,300);
829 613 $hls_to_return = $curl_response_decoded['hlsUrl'];
830 614 if( isset($curl_response_decoded['hlsDecryptionKey']) && isset($curl_response_decoded['hlsDecryptionKeyIndex']) ){
@@ -833,21 +617,9 @@
833 617 }else{
834 618 delete_post_meta($product_id,'hlsDecryptionKey');
835 619 delete_post_meta($product_id,'hlsDecryptionKeyIndex');
836 620 }
837 -
838 - if ( isset( $curl_response_decoded['video'] ) &&
839 - isset( $curl_response_decoded['embedKey'] ) &&
840 - isset( $curl_response_decoded['embedUrl'] )
841 - ) {
842 - update_post_meta( $product_id, 'wpstream_vod_video_data', trim( (string) $curl_response_decoded['video'] ) );
843 - update_post_meta( $product_id, 'wpstream_vod_embed_key', trim( (string) $curl_response_decoded['embedKey'] ) );
844 - update_post_meta( $product_id, 'wpstream_vod_embed_url', trim( (string) $curl_response_decoded['embedUrl'] ) );
845 - }
846 -
847 - if ( isset( $curl_response_decoded['wpstreamPlayerEnabled'] ) ) {
848 - update_post_meta( $product_id, 'wpstream_player_enabled', intval( $curl_response_decoded['wpstreamPlayerEnabled'] ) );
849 - }
621 +
850 622 }else{
851 623 return '';
852 624 }
853 625
@@ -856,55 +628,11 @@
856 628 return $hls_to_return;
857 629
858 630 }
859 631
860 - function wpstream_get_player_theme( $channel_id = null ) {
861 - $player_theme = get_option('wpstream_video_player_theme');
862 - $is_streamify_user = $this->wpstream_is_streamify_user( $channel_id );
863 - if ( !empty($player_theme) && !$is_streamify_user ) {
864 - $this->wpstream_enqueue_player_theme_style( $player_theme );
865 - return 'vjs-theme-' . $player_theme;
866 - }
867 -
868 - return '';
869 - }
870 -
871 - function wpstream_enqueue_player_theme_style( $player_theme ) {
872 - if ( $player_theme != 'default' ) {
873 - wp_enqueue_style('videojs-theme-' . $player_theme, 'https://cdn.jsdelivr.net/npm/@videojs/themes@1/dist/' . $player_theme . '/index.min.css', array(), '1.0.0');
874 -
875 - }
876 - }
877 -
878 - /*
879 - * Return data about the logo
880 - */
881 - private function wpstream_get_player_logo_data( $product_id ): array {
882 - $player_logo_position = get_option( 'wpstream_player_logo_position', 'top-right' );
883 - $player_logo_position_class = '';
884 - $player_logo_horizontal_position = '';
885 - if ( $player_logo_position && $player_logo_position != '' ) {
886 - $player_logo_position_parts = explode( '-', $player_logo_position );
887 - if ( isset( $player_logo_position_parts[0], $player_logo_position_parts[1] ) ) {
888 - $player_logo_position_class = 'logo-' . $player_logo_position_parts[0];
889 - $player_logo_horizontal_position = 'logo-' . $player_logo_position_parts[1];
890 - }
891 - }
892 -
893 - $player_logo_src = $this->wpstream_get_video_player_logo( $product_id );
894 - $player_logo_opacity = intval( esc_html( get_option('wpstream_player_logo_opacity','100') ) ) / 100;
895 -
896 - return array(
897 - 'player_logo_src' => $player_logo_src,
898 - 'player_logo_position' => $player_logo_position,
899 - 'player_logo_position_class' => $player_logo_position_class,
900 - 'player_logo_horizontal_position' => $player_logo_horizontal_position,
901 - 'player_logo_opacity' => $player_logo_opacity,
902 - );
903 - }
904 -
905 632
906 633
634 +
907 635 /**
908 636 * VODPlayer uri details
909 637 *
910 638 * @author cretu
@@ -918,13 +646,11 @@
918 646 * 2 - free video encrypted
919 647 * 3 - free video -not encrypted
920 648 */
921 649
922 - $post_type = get_post_type($product_id);
923 - $free_video_type = intval( get_post_meta($product_id, 'wpstream_product_type', true));
924 - $video_path_final = '';
925 - $video_type = '';
926 - if( ( $post_type =='wpstream_product_vod' && $free_video_type==2 ) || get_post_type($product_id)=='product' ){
650 +
651 + $free_video_type = intval( get_post_meta($product_id, 'wpstream_product_type', true));
652 + if( ( get_post_type($product_id)=='wpstream_product_vod' && $free_video_type==2 ) || get_post_type($product_id)=='product' ){
927 653
928 654 /*
929 655 * IF vide is encrypted- readed from vod,streaner
930 656 *
@@ -938,9 +664,9 @@
938 664 }
939 665 $video_path_final = $this->wpstream_request_video_on_demand_hls_player($video_path,$product_id);
940 666
941 667
942 - }else if( $post_type =='wpstream_product_vod' && $free_video_type==3 ){
668 + }else if( get_post_type($product_id)=='wpstream_product_vod' && $free_video_type==3 ){
943 669
944 670 /* Video is unecrypted - read from local or youtube / vimeo
945 671 */
946 672
@@ -945,17 +671,24 @@
945 671 */
946 672
947 673 $video_type = 'video/mp4';
948 674 $video_path_final=esc_html(get_post_meta($product_id, 'wpstream_free_video_external', true));
949 - wp_enqueue_script('youtube.min');
675 +
676 + if (strpos($video_path_final, 'www.youtube') !== false) {
677 + $wpstream_data_setup= ' data-setup=\'{ "techOrder": ["youtube"], "sources": [{ "type": "video/youtube", "src": "'.$video_path_final.'"}] }\' ';
678 + $video_path_final='';
679 + }
680 + if (strpos($video_path_final, 'vimeo.com') !== false) {
681 + $wpstream_data_setup= ' data-setup=\'{"techOrder": ["vimeo"], "sources": [{ "type": "video/vimeo", "src": "'.$video_path_final.'"}], "vimeo": { "color": "#fbc51b"} }\' ';
682 + $video_path_final='';
683 + }
684 +
950 685 }
951 686
952 - $return_array = array();
687 + $return_array=array();
953 688 $return_array['video_path_final'] = $video_path_final;
954 689 $return_array['wpstream_data_setup']= $wpstream_data_setup;
955 690 $return_array['video_type'] = $video_type;
956 - $return_array['free_video_type'] = $free_video_type;
957 - $return_array['post_type'] = $post_type ;
958 691 return $return_array;
959 692 }
960 693
961 694
@@ -966,420 +699,56 @@
966 699 * @author cretu
967 700 */
968 701
969 702 public function wpstream_video_on_demand_player($product_id){
970 - wp_enqueue_script('video.min');
971 - wp_enqueue_script('wpstream-player');
972 - wp_enqueue_script('wpstream-player-controls');
703 +
704 + $uri_details = $this->wpstream_video_on_demand_player_uri_request($product_id);
705 + $video_path_final = $uri_details['video_path_final'];
706 + $wpstream_data_setup = $uri_details['wpstream_data_setup'];
707 + $video_type = $uri_details['video_type'];
708 +
709 + $thumb_id = get_post_thumbnail_id($product_id);
710 + $thumb = wp_get_attachment_image_src($thumb_id,'small');
711 + $usernamestream = esc_html ( get_option('wpstream_api_username','') );
712 +
713 + $poster_thumb = '';
714 + if(isset($thumb[0])){
715 + $poster_thumb=$thumb[0];
716 + }
973 717
974 - $player_theme = $this->wpstream_get_player_theme( $product_id );
718 + $hlsDecryptionKey = get_post_meta($product_id,'hlsDecryptionKey',true);
719 + $hlsDecryptionKeyIndex = get_post_meta($product_id,'hlsDecryptionKeyIndex',true);
720 +
975 721
976 - $uri_details = $this->wpstream_video_on_demand_player_uri_request($product_id);
977 - $video_path_final = $uri_details['video_path_final'];
978 - $wpstream_data_setup = $uri_details['wpstream_data_setup'];
979 - $video_type = $uri_details['video_type'];
980 - $now = time().rand(0,1000000);
722 + $pack = $this->main->wpstream_live_connection->wpstream_request_pack_data_per_user();
723 +
724 +
725 + if(isset($pack['available_data_mb']) && $pack['available_data_mb']>0){
726 +
727 + if($video_path_final==''){
728 + print '<div class="wpstream_vod_notice">This video does not exist or it has been deleted!</div>';
729 + }
730 +
731 + echo '<video id="wpstream-video'.time().'" class="video-js vjs-default-skin vjs-16-9 kuk wpstream_video_on_demand vjs-wpstream" data-me="'.esc_attr($usernamestream).'" data-product-id="'.$product_id.'" controls preload="auto"
732 + poster="'.esc_url($poster_thumb).'" '.$wpstream_data_setup.'>
981 733
982 - $overlay_video_div_id = "random_id_".$now;
983 - $this->wpstream_render_vod_title_overlay(
984 - $overlay_video_div_id,
985 - get_the_title($product_id)
986 - );
987 -
988 - $thumb_id = get_post_thumbnail_id($product_id);
989 - $thumb = wp_get_attachment_image_src($thumb_id,'small');
990 - $usernamestream = esc_html ( get_option('wpstream_api_username','') );
991 -
992 - $poster_thumb = '';
993 - if(isset($thumb[0])){
994 - $poster_thumb=$thumb[0];
995 - }
996 -
997 - $hlsDecryptionKey = get_post_meta($product_id,'hlsDecryptionKey',true);
998 - $hlsDecryptionKeyIndex = get_post_meta($product_id,'hlsDecryptionKeyIndex',true);
999 -
1000 -
1001 - $pack = $this->main->quota_manager->get_live_quota_data( 'wpstream_video_on_demand_player' );
1002 -
1003 -
1004 -
1005 - $trailer_attachment_id = intval (get_post_meta( $product_id, 'video_trailer', true ));
1006 - $video_trailer = '';
1007 - $video_trailer_type = '';
1008 - if($trailer_attachment_id!=0) {
1009 - $video_trailer = wp_get_attachment_url( $trailer_attachment_id );
1010 - $attachment_metadata = wp_get_attachment_metadata($trailer_attachment_id);
1011 - if( isset ($attachment_metadata['mime_type']) ) {
1012 - $video_trailer_type = $attachment_metadata['mime_type'];
1013 - }
1014 - }
1015 -
1016 - // override trailer setup here (for testing)
1017 - // $trailer_attachment_id = 1;
1018 - // $video_trailer = '/wp-content/uploads/2023/10/production-ID_4608975.mp4';
1019 - // $video_trailer = '/wp-content/uploads/2023/10/ultrawide.mp4';
1020 -
1021 - // If the video is self hosted or external, we should let the user see it
1022 - $video_type = intval( get_post_meta($product_id, 'wpstream_product_type', true));
1023 -
1024 -
1025 - if ( (isset($pack['available_data_mb']) && $pack['available_data_mb']>0) || $video_type === 3 ) {
1026 -
1027 - if($video_path_final==''){
1028 - if( $uri_details['post_type']=='wpstream_product_vod' && $uri_details['free_video_type']==3 ){
734 + <source src="'.trim($video_path_final).'" type="'.$video_type.'">
735 + <p class="vjs-no-js">
736 + To view this video please enable JavaScript, and consider upgrading to a web browser that
737 + <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
738 + </p>
739 + </video>';
1029 740 }else{
1030 - print '<div class="wpstream_vod_notice">This video does not exist or it has been deleted!</div>';
741 + print esc_html_e('Insufficient resources to stream this title','wpstream');
1031 742 }
1032 743
1033 - }
1034 -
1035 - // TODO (crerem) populate these from VOD settings
1036 - $autoplay = false;
1037 - $muted = false;
1038 -
1039 - $wpstream_vod_start_muted = intval ( get_option('wpstream_vod_start_muted','') );
1040 - if($wpstream_vod_start_muted===1){
1041 - $muted=true;
1042 - }
1043 - $wpstream_vod_autoplay = intval ( get_option('wpstream_vod_autoplay','') );
1044 - if($wpstream_vod_autoplay===1){
1045 - $autoplay=true;
1046 - }
1047 -
1048 - $poster_data = 'poster="'.esc_url($poster_thumb).'"';
1049 - $has_trailer_class='';
1050 - if($trailer_attachment_id !=0){
1051 - $poster_data=''; // cancel poster for theme
1052 - $has_trailer_class='wpstream_theme_player_has_trailer';
1053 - }
1054 -
1055 - $player_logo_data = $this->wpstream_get_player_logo_data( $product_id );
1056 - $player_logo_image = $player_logo_data['player_logo_src'];
1057 - $player_logo_position = $player_logo_data['player_logo_position'];
1058 - $player_logo_position_class = $player_logo_data['player_logo_position_class'];
1059 - $player_logo_horizontal_position = $player_logo_data['player_logo_horizontal_position'];
1060 - $player_logo_opacity = $player_logo_data['player_logo_opacity'];
1061 -
1062 - $captionsUrl = get_post_meta( $product_id, 'wpstream_closed_captions_file', true );
1063 - $play_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_play_trailer_btn_' . $now : '';
1064 - $mute_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_mute_trailer_btn_' . $now : '';
1065 - $unmute_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_unmute_trailer_btn_' . $now : '';
1066 - $play_video_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_play_video_btn_' . $now : '';
1067 -
1068 - $wpstream_vod_encrypt = intval( get_option( 'wpstream_vod_encrypt', '' ) );
1069 - $wpstream_vod_lock_to_website = intval( get_option( 'wpstream_vod_domain_lock', '' ) );
1070 -
1071 - $wpstream_session_encryption = 0;
1072 - $local_event_options = get_option('wpstream_user_streaming_global_channel_options') ;
1073 - if(isset($local_event_options['ses_encrypt']) && intval($local_event_options['ses_encrypt'])==1 ) {
1074 - $wpstream_session_encryption = 1;
1075 - }
1076 -
1077 - /**
1078 - * Presence bootstrap expects validatePlaybackSessionUrl as an absolute HTTP(S) URL that returns JSON { success: true } when the playback session is valid — not the literals "true"/"false".
1079 - * Embed keys must be minted with the same inputs as the iframe query (video, validatePlaybackSessionUrl, embedAncestor, encrypt) per player embed-key.js.
1080 - *
1081 - * @see WPStream player embed-key.js and session-validation.js (verifyPlaybackSessionUrl).
1082 - */
1083 - $vod_validate_url = '';
1084 - if ( $wpstream_session_encryption ) {
1085 - $vod_validate_url = esc_url_raw( apply_filters( 'wpstream_vod_validate_playback_session_url', $this->playback_session->wpstream_get_default_vod_validate_playback_session_url(), $product_id ) );
1086 - wp_localize_script(
1087 - 'wpstream-player-controls',
1088 - 'wpstreamVodIframeSessionApi',
1089 - array(
1090 - 'requirePlaybackSession' => true,
1091 - 'nonce' => wp_create_nonce( 'wpstream_playback_session_issue' ),
1092 - 'productId' => (int) $product_id,
1093 - 'ajaxUrl' => admin_url( 'admin-ajax.php' ),
1094 - )
1095 - );
1096 - }
1097 -
1098 - $vod_embed_ancestor = '';
1099 - if ( $wpstream_vod_lock_to_website ) {
1100 - $vod_embed_ancestor = esc_url_raw(
1101 - apply_filters(
1102 - 'wpstream_vod_embed_ancestor',
1103 - $this->wpstream_get_site_origin_for_embed(),
1104 - $product_id
1105 - )
1106 - );
1107 - }
1108 -
1109 - // if there's "wpstream_vod_embed_url" set, it means that we use the new player
1110 - $wpstream_vod_embed_url = get_post_meta( $product_id, 'wpstream_vod_embed_url', true );
1111 -
1112 - $vod_iframe_base = WPSTREAM_PLAYER . "/player/vod?";
1113 - $vod_iframe_video_raw = (string) get_post_meta( $product_id, 'wpstream_vod_video_data', true );
1114 - $vod_iframe_video = trim( $vod_iframe_video_raw );
1115 - if ( strlen( $vod_iframe_video ) >= 2 ) {
1116 - $first_char = $vod_iframe_video[0];
1117 - $last_char = substr( $vod_iframe_video, -1 );
1118 - $is_wrapped_in_double_quotes = '"' === $first_char && '"' === $last_char;
1119 - $is_wrapped_in_single_quotes = "'" === $first_char && "'" === $last_char;
1120 - if ( $is_wrapped_in_double_quotes || $is_wrapped_in_single_quotes ) {
1121 - $vod_iframe_video = substr( $vod_iframe_video, 1, -1 );
1122 - }
1123 - }
1124 - $vod_iframe_embed_key = $this->wpstream_generate_player_embed_key(
1125 - $vod_iframe_video,
1126 - $vod_validate_url,
1127 - $vod_embed_ancestor,
1128 - $wpstream_vod_encrypt ? 'yes' : ''
1129 - );
1130 - if ( '' === $vod_iframe_embed_key ) {
1131 - $vod_iframe_embed_key = (string) get_post_meta( $product_id, 'wpstream_vod_embed_key', true );
1132 - }
1133 - $vod_iframe_trailer_embed_key = $this->wpstream_generate_player_embed_key(
1134 - $video_trailer,
1135 - $vod_validate_url,
1136 - $vod_embed_ancestor,
1137 - $wpstream_vod_encrypt ? 'yes' : ''
1138 - );
1139 -
1140 - $vod_poster_image = get_the_post_thumbnail_url( $product_id, 'full' );
1141 - $current_active_theme = wp_get_theme();
1142 -
1143 - $vod_iframe_skin_slug = '';
1144 - if ( preg_match( '/^vjs-theme-(city|fantasy|forest|sea)$/', $player_theme, $vod_iframe_skin_m ) ) {
1145 - $vod_iframe_skin_slug = $vod_iframe_skin_m[1];
1146 - }
1147 -
1148 - $vod_iframe_query_args = array_filter(
1149 - array(
1150 - 'video' => $vod_iframe_video,
1151 - 'posterImage' => $vod_poster_image,
1152 - 'embedKey' => $vod_iframe_embed_key,
1153 - 'autoplay' => $autoplay ? '1' : '',
1154 - 'skin' => $vod_iframe_skin_slug,
1155 - 'encrypt' => $wpstream_vod_encrypt ? 'yes' : '',
1156 - 'validatePlaybackSessionUrl' => $vod_validate_url,
1157 - 'embedAncestor' => $vod_embed_ancestor,
1158 - 'logoImage' => $player_logo_image,
1159 - 'logoPosition' => $player_logo_image ? $player_logo_position : '',
1160 - 'logoOpacity' => $player_logo_image ? $player_logo_opacity : '',
1161 - 'isThemeActive' => $current_active_theme->get('Name') === 'Hello WPStream',
1162 - ),
1163 - static function ( $v ) {
1164 - return $v !== null && $v !== '';
1165 - }
1166 - );
1167 -
1168 - $vod_trailer_iframe_query_args = array_filter(
1169 - array(
1170 - 'video' => $video_trailer,
1171 - 'embedKey' => $vod_iframe_trailer_embed_key,
1172 - 'skin' => $vod_iframe_skin_slug,
1173 - 'encrypt' => $wpstream_vod_encrypt ? 'yes' : '',
1174 - 'validatePlaybackSessionUrl' => $vod_validate_url,
1175 - 'embedAncestor' => $vod_embed_ancestor,
1176 - ),
1177 - static function ( $v ) {
1178 - return $v !== null && $v !== '';
1179 - }
1180 - );
1181 -
1182 - if ( $wpstream_vod_embed_url ) {
1183 - echo '<div class="wpstream_player_iframe_wrap">';
1184 - echo '<iframe id="playerFrame"
1185 - class="wpstream_video_on_demand_iframe"
1186 - title="' . esc_attr__( 'Embedded content', 'wpstream' ) . '"
1187 - src="' . esc_url( add_query_arg( $vod_iframe_query_args, $vod_iframe_base ) ) . '"
1188 - data-wpstream-frame-role="content"
1189 - allowfullscreen
1190 - allow="autoplay; fullscreen">
1191 - </iframe>';
1192 - if ( $trailer_attachment_id != 0 ) {
1193 - echo '<iframe id="playerFrameTrailer"
1194 - class="wpstream_video_on_demand_iframe wpstream_video_on_demand_iframe_trailer"
1195 - title="' . esc_attr__( 'Embedded trailer content', 'wpstream' ) . '"
1196 - src="' . esc_url( add_query_arg( $vod_trailer_iframe_query_args, $vod_iframe_base ) ) . '"
1197 - data-wpstream-frame-role="trailer"
1198 - allowfullscreen
1199 - allow="autoplay; fullscreen"
1200 - style="display:none;"
1201 - aria-hidden="true"
1202 - tabindex="-1">
1203 - </iframe>';
1204 - }
1205 - echo '</div>';
1206 - echo '<div class="wpstream_video_on_demand_actions_wrapper" data-trailer-muted-default="' . ( $muted ? '1' : '0' ) . '"' . ( $autoplay && $trailer_attachment_id !== 0 ? ' data-autoplay-trailer="1"' : '' ) . '>';
1207 - echo '<button type="button" class="wpstream_player_controls wpstream_video_on_demand_play_video_wrapper" aria-label="' . esc_attr__( 'Play Video', 'wpstream' ) . '">
1208 - <span class="wpstream_video_on_demand_play_video">
1209 - <svg width="29" height="30" viewBox="0 0 29 30" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
1210 - <path fill-rule="evenodd" clip-rule="evenodd" d="M6.1808 28.9035L26.274 18.1652C29.1087 16.6503 29.1087 12.7497 26.274 11.2348L6.1808 0.496557C4.88769 -0.194506 3.34623 -0.1355 2.1283 0.495357C0.906043 1.12846 1.0095e-06 2.34351 9.38766e-07 3.96179L0 25.4382C-7.07369e-08 27.0565 0.906042 28.2715 2.1283 28.9046C3.34622 29.5355 4.88769 29.5945 6.1808 28.9035ZM24.8221 13.8026C25.5742 14.2045 25.5742 15.1955 24.8221 15.5974L4.72891 26.3356C3.94628 26.7539 3.01386 26.2165 3.01386 25.4382L3.01386 3.96179C3.01386 3.18347 3.94628 2.6461 4.72891 3.06436L24.8221 13.8026Z" fill="#F1F1F1"></path>
1211 - </svg>
1212 - </span>
1213 - ' . esc_html__( 'Play Video', 'wpstream' ) . '
1214 - </button>';
1215 - if ( $trailer_attachment_id !== 0 ) {
1216 - echo '<button type="button" class="wpstream_player_controls wpstream_video_on_demand_play_trailer" aria-label="' . esc_attr__( 'Play Trailer', 'wpstream' ) . '">
1217 - <svg width="30" height="24" viewBox="0 0 30 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
1218 - <path fill-rule="evenodd" clip-rule="evenodd" d="M26.6667 1.5H3.33337C2.50495 1.5 1.83337 2.17157 1.83337 3V21C1.83337 21.8284 2.50495 22.5 3.33338 22.5H26.6667C27.4951 22.5 28.1667 21.8284 28.1667 21V3C28.1667 2.17157 27.4951 1.5 26.6667 1.5ZM3.33337 0C1.67652 0 0.333374 1.34315 0.333374 3V21C0.333374 22.6569 1.67652 24 3.33338 24H26.6667C28.3236 24 29.6667 22.6569 29.6667 21V3C29.6667 1.34315 28.3236 0 26.6667 0H3.33337ZM4.83337 4C4.55723 4 4.33337 4.22386 4.33337 4.5V6.16667C4.33337 6.44281 4.55723 6.66667 4.83337 6.66667H6.50004C6.77618 6.66667 7.00004 6.44281 7.00004 6.16667V4.5C7.00004 4.22386 6.77618 4 6.50004 4H4.83337ZM23.5 4C23.2239 4 23 4.22386 23 4.5V6.16667C23 6.44281 23.2239 6.66667 23.5 6.66667H25.1667C25.4428 6.66667 25.6667 6.44281 25.6667 6.16667V4.5C25.6667 4.22386 25.4428 4 25.1667 4H23.5ZM4.33337 11.167C4.33337 10.8909 4.55723 10.667 4.83337 10.667H6.50004C6.77618 10.667 7.00004 10.8909 7.00004 11.167V12.8337C7.00004 13.1098 6.77618 13.3337 6.50004 13.3337H4.83337C4.55723 13.3337 4.33337 13.1098 4.33337 12.8337V11.167ZM23.5001 10.667C23.224 10.667 23.0001 10.8909 23.0001 11.167V12.8337C23.0001 13.1098 23.224 13.3337 23.5001 13.3337H25.1668C25.4429 13.3337 25.6668 13.1098 25.6668 12.8337V11.167C25.6668 10.8909 25.4429 10.667 25.1668 10.667H23.5001ZM4.33337 17.833C4.33337 17.5569 4.55723 17.333 4.83337 17.333H6.50004C6.77618 17.333 7.00004 17.5569 7.00004 17.833V19.4997C7.00004 19.7758 6.77618 19.9997 6.50004 19.9997H4.83337C4.55723 19.9997 4.33337 19.7758 4.33337 19.4997V17.833ZM23.5001 17.333C23.224 17.333 23.0001 17.5569 23.0001 17.833V19.4997C23.0001 19.7758 23.224 19.9997 23.5001 19.9997H25.1668C25.4429 19.9997 25.6668 19.7758 25.6668 19.4997V17.833C25.6668 17.5569 25.4429 17.333 25.1668 17.333H23.5001ZM19.0677 13.0997L13.4077 16.5087C13.0434 16.7281 12.6092 16.7094 12.2661 16.5091C11.9218 16.3081 11.6666 15.9224 11.6666 15.4086V8.59072C11.6666 8.07698 11.9218 7.69125 12.2661 7.49026C12.6092 7.28999 13.0434 7.27126 13.4077 7.49064L19.0677 10.8996C19.8663 11.3805 19.8663 12.6188 19.0677 13.0997Z"/>
1219 - </svg>
1220 - ' . esc_html__( 'Play Trailer', 'wpstream' ) . '
1221 - </button>';
1222 - echo '<div id="' . esc_attr( $mute_trailer_button_element_id ) . '" style="display: none;" class="wpstream_video_on_demand_mute_trailer">
1223 - <svg width="37" height="36" viewBox="0 0 37 36" fill="none" xmlns="http://www.w3.org/2000/svg">
1224 - <path fill-rule="evenodd" clip-rule="evenodd" d="M1.32143 10.0789H8.69499L18.8964 0L21.1428 0.921053V35.1316L18.8964 36L8.69499 25.8684H1.32143L0 24.5526V11.3947L1.32143 10.0789ZM10.175 23.6842L18.5 31.9474V4.10526L10.175 12.3158L9.24999 12.7105H2.64286V23.2368H9.24999L10.175 23.6842ZM37 17.9737C37.0069 22.2216 35.5329 26.3401 32.8295 29.6263L30.9478 27.7579C33.1613 24.9734 34.3629 21.5249 34.3571 17.9737C34.3571 14.2895 33.0885 10.8974 30.9637 8.21053L32.8454 6.34211C35.5382 9.62494 37.0062 13.735 37 17.9737ZM31.7143 17.9737C31.7193 20.8255 30.7895 23.6011 29.0661 25.8789L27.1738 23.9947C28.4127 22.2295 29.0752 20.1272 29.0714 17.9737C29.0751 15.8287 28.4174 13.7344 27.1871 11.9737L29.0793 10.0895C30.7338 12.2868 31.7143 15.0158 31.7143 17.9737ZM26.4286 17.9737C26.4286 19.4842 26.0057 20.8947 25.2657 22.0947L23.3126 20.1526C23.6249 19.4729 23.7876 18.7345 23.7899 17.9869C23.7922 17.2394 23.634 16.5001 23.3258 15.8184L25.2789 13.8737C26.0083 15.0684 26.4286 16.4737 26.4286 17.9737Z" fill="white"/>
1225 - </svg>
1226 - </div>';
1227 - echo '<div id="' . esc_attr( $unmute_trailer_button_element_id ) . '" style="display: none;" class="wpstream_video_on_demand_unmute_trailer">
1228 - <svg width="33" height="32" viewBox="0 0 33 32" fill="none" xmlns="http://www.w3.org/2000/svg">
1229 - <path fill-rule="evenodd" clip-rule="evenodd" d="M1.15625 8.85688H7.60813L16.5344 0L18.5 0.809375V30.8719L16.5344 31.635L7.60813 22.7319H1.15625L0 21.5756V10.0131L1.15625 8.85688ZM8.90313 20.8125L16.1875 28.0738V3.6075L8.90313 10.8225L8.09375 11.1694H2.3125V20.4194H8.09375L8.90313 20.8125ZM30.5967 11.3127L32.2316 12.9477L28.2287 16.9506L32.2316 20.9559L30.5967 22.5908L26.5938 18.5856L22.5885 22.5908L20.9536 20.9559L24.9588 16.9506L20.9513 12.95L22.5862 11.3151L26.5938 15.3157L30.5967 11.3127Z" fill="white"/>
1230 - </svg>
1231 - </div>';
1232 - }
1233 - echo '</div>';
1234 - } else {
1235 - echo '<video id="wpstream-video-vod-'.$now.'" class="'.esc_attr($has_trailer_class).' video-js vjs-default-skin vjs-fluid kuk wpstream_video_on_demand vjs-wpstream ' . $player_theme .' ' . $player_logo_position_class . ' ' . $player_logo_horizontal_position . '" data-me="'.esc_attr($usernamestream).'" data-product-id="'.$product_id.'" data-wpstream-bootstrap="vod" data-instance-id="wpstream-vod-'.esc_attr( $now ).'" data-video-element-id="wpstream-video-vod-'.esc_attr( $now ).'" data-title-overlay-element-id="'.esc_attr( $overlay_video_div_id ).'" data-video-url="'.esc_attr( $video_path_final ).'" data-trailer-url="'.esc_attr( $video_trailer ).'" data-autoplay="'. ( $autoplay ? '1' : '0' ) .'" data-muted="'. ( $muted ? '1' : '0' ) .'" data-captions-url="'.esc_attr( $captionsUrl ).'" data-play-trailer-button-element-id="'.esc_attr( $play_trailer_button_element_id ).'" data-mute-trailer-button-element-id="'.esc_attr( $mute_trailer_button_element_id ).'" data-unmute-trailer-button-element-id="'.esc_attr( $unmute_trailer_button_element_id ).'" data-play-video-button-element-id="'.esc_attr( $play_video_button_element_id ).'" data-player-logo-image="'.esc_attr( $player_logo_image ).'" data-player-logo-position="'.esc_attr( $player_logo_position ).'" data-player-logo-opacity="'.esc_attr( $player_logo_opacity ).'" data-player-logo-width="100" data-player-logo-height="auto" data-player-logo-padding="10" playsinline preload="auto"
1236 - '. $poster_data.' '.$wpstream_data_setup.'>
1237 - <p class="vjs-no-js">
1238 - To view this video please enable JavaScript, and consider upgrading to a web browser that
1239 - <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
1240 - </p>
1241 - </video>';
1242 -
1243 - if($trailer_attachment_id !=0){
1244 - print '<div class="wpstream_theme_trailer_wrapper">';
1245 - print '<div id="'.esc_attr( $play_trailer_button_element_id ).'" class="wpstream_video_on_demand_play_trailer">
1246 - <svg width="30" height="24" viewBox="0 0 30 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1247 - <path fill-rule="evenodd" clip-rule="evenodd" d="M26.6667 1.5H3.33337C2.50495 1.5 1.83337 2.17157 1.83337 3V21C1.83337 21.8284 2.50495 22.5 3.33338 22.5H26.6667C27.4951 22.5 28.1667 21.8284 28.1667 21V3C28.1667 2.17157 27.4951 1.5 26.6667 1.5ZM3.33337 0C1.67652 0 0.333374 1.34315 0.333374 3V21C0.333374 22.6569 1.67652 24 3.33338 24H26.6667C28.3236 24 29.6667 22.6569 29.6667 21V3C29.6667 1.34315 28.3236 0 26.6667 0H3.33337ZM4.83337 4C4.55723 4 4.33337 4.22386 4.33337 4.5V6.16667C4.33337 6.44281 4.55723 6.66667 4.83337 6.66667H6.50004C6.77618 6.66667 7.00004 6.44281 7.00004 6.16667V4.5C7.00004 4.22386 6.77618 4 6.50004 4H4.83337ZM23.5 4C23.2239 4 23 4.22386 23 4.5V6.16667C23 6.44281 23.2239 6.66667 23.5 6.66667H25.1667C25.4428 6.66667 25.6667 6.44281 25.6667 6.16667V4.5C25.6667 4.22386 25.4428 4 25.1667 4H23.5ZM4.33337 11.167C4.33337 10.8909 4.55723 10.667 4.83337 10.667H6.50004C6.77618 10.667 7.00004 10.8909 7.00004 11.167V12.8337C7.00004 13.1098 6.77618 13.3337 6.50004 13.3337H4.83337C4.55723 13.3337 4.33337 13.1098 4.33337 12.8337V11.167ZM23.5001 10.667C23.224 10.667 23.0001 10.8909 23.0001 11.167V12.8337C23.0001 13.1098 23.224 13.3337 23.5001 13.3337H25.1668C25.4429 13.3337 25.6668 13.1098 25.6668 12.8337V11.167C25.6668 10.8909 25.4429 10.667 25.1668 10.667H23.5001ZM4.33337 17.833C4.33337 17.5569 4.55723 17.333 4.83337 17.333H6.50004C6.77618 17.333 7.00004 17.5569 7.00004 17.833V19.4997C7.00004 19.7758 6.77618 19.9997 6.50004 19.9997H4.83337C4.55723 19.9997 4.33337 19.7758 4.33337 19.4997V17.833ZM23.5001 17.333C23.224 17.333 23.0001 17.5569 23.0001 17.833V19.4997C23.0001 19.7758 23.224 19.9997 23.5001 19.9997H25.1668C25.4429 19.9997 25.6668 19.7758 25.6668 19.4997V17.833C25.6668 17.5569 25.4429 17.333 25.1668 17.333H23.5001ZM19.0677 13.0997L13.4077 16.5087C13.0434 16.7281 12.6092 16.7094 12.2661 16.5091C11.9218 16.3081 11.6666 15.9224 11.6666 15.4086V8.59072C11.6666 8.07698 11.9218 7.69125 12.2661 7.49026C12.6092 7.28999 13.0434 7.27126 13.4077 7.49064L19.0677 10.8996C19.8663 11.3805 19.8663 12.6188 19.0677 13.0997Z"/>
1248 - </svg>
1249 - '.esc_html__('Play Trailer','wpstream').'</div>';
1250 -
1251 - print '<div class="wpstream_video_on_demand_play_video_wrapper" id="'.esc_attr( $play_video_button_element_id ).'" >
1252 - <div class="wpstream_video_on_demand_play_video">
1253 - <svg width="29" height="30" viewBox="0 0 29 30" fill="none" xmlns="http://www.w3.org/2000/svg">
1254 - <path fill-rule="evenodd" clip-rule="evenodd" d="M6.1808 28.9035L26.274 18.1652C29.1087 16.6503 29.1087 12.7497 26.274 11.2348L6.1808 0.496557C4.88769 -0.194506 3.34623 -0.1355 2.1283 0.495357C0.906043 1.12846 1.0095e-06 2.34351 9.38766e-07 3.96179L0 25.4382C-7.07369e-08 27.0565 0.906042 28.2715 2.1283 28.9046C3.34622 29.5355 4.88769 29.5945 6.1808 28.9035ZM24.8221 13.8026C25.5742 14.2045 25.5742 15.1955 24.8221 15.5974L4.72891 26.3356C3.94628 26.7539 3.01386 26.2165 3.01386 25.4382L3.01386 3.96179C3.01386 3.18347 3.94628 2.6461 4.72891 3.06436L24.8221 13.8026Z" fill="#F1F1F1"/>
1255 - </svg>
1256 - </div>
1257 - '.esc_html__('Play Video','wpstream').'
1258 - </div>';
1259 -
1260 -
1261 -
1262 - print '<div id="'.esc_attr( $mute_trailer_button_element_id ).'" class="wpstream_video_on_demand_mute_trailer">
1263 -
1264 - <svg width="37" height="36" viewBox="0 0 37 36" fill="none" xmlns="http://www.w3.org/2000/svg">
1265 - <path fill-rule="evenodd" clip-rule="evenodd" d="M1.32143 10.0789H8.69499L18.8964 0L21.1428 0.921053V35.1316L18.8964 36L8.69499 25.8684H1.32143L0 24.5526V11.3947L1.32143 10.0789ZM10.175 23.6842L18.5 31.9474V4.10526L10.175 12.3158L9.24999 12.7105H2.64286V23.2368H9.24999L10.175 23.6842ZM37 17.9737C37.0069 22.2216 35.5329 26.3401 32.8295 29.6263L30.9478 27.7579C33.1613 24.9734 34.3629 21.5249 34.3571 17.9737C34.3571 14.2895 33.0885 10.8974 30.9637 8.21053L32.8454 6.34211C35.5382 9.62494 37.0062 13.735 37 17.9737ZM31.7143 17.9737C31.7193 20.8255 30.7895 23.6011 29.0661 25.8789L27.1738 23.9947C28.4127 22.2295 29.0752 20.1272 29.0714 17.9737C29.0751 15.8287 28.4174 13.7344 27.1871 11.9737L29.0793 10.0895C30.7338 12.2868 31.7143 15.0158 31.7143 17.9737ZM26.4286 17.9737C26.4286 19.4842 26.0057 20.8947 25.2657 22.0947L23.3126 20.1526C23.6249 19.4729 23.7876 18.7345 23.7899 17.9869C23.7922 17.2394 23.634 16.5001 23.3258 15.8184L25.2789 13.8737C26.0083 15.0684 26.4286 16.4737 26.4286 17.9737Z" fill="white"/>
1266 - </svg>
1267 - </div>';
1268 - print '<div id="'.esc_attr( $unmute_trailer_button_element_id ).'" class="wpstream_video_on_demand_unmute_trailer">
1269 - <svg width="33" height="32" viewBox="0 0 33 32" fill="none" xmlns="http://www.w3.org/2000/svg">
1270 - <path fill-rule="evenodd" clip-rule="evenodd" d="M1.15625 8.85688H7.60813L16.5344 0L18.5 0.809375V30.8719L16.5344 31.635L7.60813 22.7319H1.15625L0 21.5756V10.0131L1.15625 8.85688ZM8.90313 20.8125L16.1875 28.0738V3.6075L8.90313 10.8225L8.09375 11.1694H2.3125V20.4194H8.09375L8.90313 20.8125ZM30.5967 11.3127L32.2316 12.9477L28.2287 16.9506L32.2316 20.9559L30.5967 22.5908L26.5938 18.5856L22.5885 22.5908L20.9536 20.9559L24.9588 16.9506L20.9513 12.95L22.5862 11.3151L26.5938 15.3157L30.5967 11.3127Z" fill="white"/>
1271 - </svg>
1272 -
1273 - </div>';
1274 - print '</div>';
1275 - }
1276 - }
1277 - }else{
1278 - print '<div class="wpstream_insuficent_res">'.esc_html__('Insufficient resources to stream this title','wpstream').'</div>';
1279 - }
1280 -
1281 744 }
1282 745
1283 746
1284 747
1285 - /**
1286 - * VODPlayer url - only trailer - used in theme
1287 - *
1288 - * @author cretu
1289 - */
1290 - public function wpstream_video_on_demand_player_only_trailer($product_id){
1291 - wp_enqueue_script('video.min');
1292 - wp_enqueue_script('wpstream-player');
1293 -
1294 - $player_theme = $this->wpstream_get_player_theme();
1295 - $now = time().rand(0,1000000);
1296 - $overlay_video_div_id = "random_id_".$now;
1297 - $this->wpstream_render_vod_title_overlay(
1298 - $overlay_video_div_id,
1299 - get_the_title($product_id)
1300 - );
1301 -
1302 -
1303 -
1304 - $thumb_id = get_post_thumbnail_id($product_id);
1305 - $thumb = wp_get_attachment_image_src($thumb_id,'small');
1306 - $usernamestream = esc_html ( get_option('wpstream_api_username','') );
1307 -
1308 - $poster_thumb = '';
1309 - if(isset($thumb[0])){
1310 - $poster_thumb=$thumb[0];
1311 - }
1312 -
1313 -
1314 - $trailer_attachment_id = intval (get_post_meta( $product_id, 'video_trailer', true ));
1315 - $video_trailer = '';
1316 - $video_trailer_type = '';
1317 - if($trailer_attachment_id!=0) {
1318 - $video_trailer = wp_get_attachment_url( $trailer_attachment_id );
1319 - $attachment_metadata = wp_get_attachment_metadata($trailer_attachment_id);
1320 - if(isset($attachment_metadata['mime_type'])){
1321 - $video_trailer_type = $attachment_metadata['mime_type'];
1322 - }
1323 -
1324 - }
1325 -
1326 -
1327 - $autoplay = false;
1328 - $muted = false;
1329 -
1330 - if( intval ( get_option('wpstream_vod_start_muted','') ) === 1){
1331 - $muted = true;
1332 - }
1333 - if( intval ( get_option('wpstream_vod_autoplay','') ) === 1 ){
1334 - $autoplay = true;
1335 - }
1336 - $video_path_final='';
1337 - $has_trailer_class='wpstream_theme_player_has_trailer';
1338 - $captions_url = get_post_meta( $product_id, 'wpstream_closed_captions_file', true );
1339 - $play_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_play_trailer_btn_' . $now : '';
1340 - $mute_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_mute_trailer_btn_' . $now : '';
1341 - $unmute_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_unmute_trailer_btn_' . $now : '';
1342 -
1343 - echo '<video id="wpstream-video-vod-'.$now.'" class="video-js vjs-default-skin vjs-fluid kuk wpstream_video_on_demand vjs-wpstream '.esc_attr( $has_trailer_class ).' ' . $player_theme . '" data-me="'.esc_attr($usernamestream).'" data-product-id="'.$product_id.'" data-wpstream-bootstrap="vod" data-instance-id="wpstream-vod-trailer-'.esc_attr( $now ).'" data-video-element-id="wpstream-video-vod-'.esc_attr( $now ).'" data-title-overlay-element-id="'.esc_attr( $overlay_video_div_id ).'" data-video-url="" data-trailer-url="'.esc_attr( $video_trailer ).'" data-autoplay="'. ( $autoplay ? '1' : '0' ) .'" data-muted="'. ( $muted ? '1' : '0' ) .'" data-captions-url="'.esc_attr( $captions_url ).'" data-play-trailer-button-element-id="'.esc_attr( $play_trailer_button_element_id ).'" data-mute-trailer-button-element-id="'.esc_attr( $mute_trailer_button_element_id ).'" data-unmute-trailer-button-element-id="'.esc_attr( $unmute_trailer_button_element_id ).'" playsinline preload="auto"
1344 - >
1345 - <p class="vjs-no-js">
1346 - To view this video please enable JavaScript, and consider upgrading to a web browser that
1347 - <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
1348 - </p>
1349 - </video>';
1350 -
1351 - if($trailer_attachment_id !=0){
1352 - print '<div class="wpstream_theme_trailer_wrapper">';
1353 - print '<div id="'.esc_attr( $play_trailer_button_element_id ).'" class="wpstream_video_on_demand_play_trailer">
1354 - <svg width="30" height="24" viewBox="0 0 30 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1355 - <path fill-rule="evenodd" clip-rule="evenodd" d="M26.6667 1.5H3.33337C2.50495 1.5 1.83337 2.17157 1.83337 3V21C1.83337 21.8284 2.50495 22.5 3.33338 22.5H26.6667C27.4951 22.5 28.1667 21.8284 28.1667 21V3C28.1667 2.17157 27.4951 1.5 26.6667 1.5ZM3.33337 0C1.67652 0 0.333374 1.34315 0.333374 3V21C0.333374 22.6569 1.67652 24 3.33338 24H26.6667C28.3236 24 29.6667 22.6569 29.6667 21V3C29.6667 1.34315 28.3236 0 26.6667 0H3.33337ZM4.83337 4C4.55723 4 4.33337 4.22386 4.33337 4.5V6.16667C4.33337 6.44281 4.55723 6.66667 4.83337 6.66667H6.50004C6.77618 6.66667 7.00004 6.44281 7.00004 6.16667V4.5C7.00004 4.22386 6.77618 4 6.50004 4H4.83337ZM23.5 4C23.2239 4 23 4.22386 23 4.5V6.16667C23 6.44281 23.2239 6.66667 23.5 6.66667H25.1667C25.4428 6.66667 25.6667 6.44281 25.6667 6.16667V4.5C25.6667 4.22386 25.4428 4 25.1667 4H23.5ZM4.33337 11.167C4.33337 10.8909 4.55723 10.667 4.83337 10.667H6.50004C6.77618 10.667 7.00004 10.8909 7.00004 11.167V12.8337C7.00004 13.1098 6.77618 13.3337 6.50004 13.3337H4.83337C4.55723 13.3337 4.33337 13.1098 4.33337 12.8337V11.167ZM23.5001 10.667C23.224 10.667 23.0001 10.8909 23.0001 11.167V12.8337C23.0001 13.1098 23.224 13.3337 23.5001 13.3337H25.1668C25.4429 13.3337 25.6668 13.1098 25.6668 12.8337V11.167C25.6668 10.8909 25.4429 10.667 25.1668 10.667H23.5001ZM4.33337 17.833C4.33337 17.5569 4.55723 17.333 4.83337 17.333H6.50004C6.77618 17.333 7.00004 17.5569 7.00004 17.833V19.4997C7.00004 19.7758 6.77618 19.9997 6.50004 19.9997H4.83337C4.55723 19.9997 4.33337 19.7758 4.33337 19.4997V17.833ZM23.5001 17.333C23.224 17.333 23.0001 17.5569 23.0001 17.833V19.4997C23.0001 19.7758 23.224 19.9997 23.5001 19.9997H25.1668C25.4429 19.9997 25.6668 19.7758 25.6668 19.4997V17.833C25.6668 17.5569 25.4429 17.333 25.1668 17.333H23.5001ZM19.0677 13.0997L13.4077 16.5087C13.0434 16.7281 12.6092 16.7094 12.2661 16.5091C11.9218 16.3081 11.6666 15.9224 11.6666 15.4086V8.59072C11.6666 8.07698 11.9218 7.69125 12.2661 7.49026C12.6092 7.28999 13.0434 7.27126 13.4077 7.49064L19.0677 10.8996C19.8663 11.3805 19.8663 12.6188 19.0677 13.0997Z"/>
1356 - </svg>
1357 - '.esc_html__('Play Trailer','wpstream').'
1358 - </div>';
1359 - print '<div id="'.esc_attr( $mute_trailer_button_element_id ).'" class="wpstream_video_on_demand_mute_trailer">
1360 - <svg width="37" height="36" viewBox="0 0 37 36" fill="none" xmlns="http://www.w3.org/2000/svg">
1361 - <path fill-rule="evenodd" clip-rule="evenodd" d="M1.32143 10.0789H8.69499L18.8964 0L21.1428 0.921053V35.1316L18.8964 36L8.69499 25.8684H1.32143L0 24.5526V11.3947L1.32143 10.0789ZM10.175 23.6842L18.5 31.9474V4.10526L10.175 12.3158L9.24999 12.7105H2.64286V23.2368H9.24999L10.175 23.6842ZM37 17.9737C37.0069 22.2216 35.5329 26.3401 32.8295 29.6263L30.9478 27.7579C33.1613 24.9734 34.3629 21.5249 34.3571 17.9737C34.3571 14.2895 33.0885 10.8974 30.9637 8.21053L32.8454 6.34211C35.5382 9.62494 37.0062 13.735 37 17.9737ZM31.7143 17.9737C31.7193 20.8255 30.7895 23.6011 29.0661 25.8789L27.1738 23.9947C28.4127 22.2295 29.0752 20.1272 29.0714 17.9737C29.0751 15.8287 28.4174 13.7344 27.1871 11.9737L29.0793 10.0895C30.7338 12.2868 31.7143 15.0158 31.7143 17.9737ZM26.4286 17.9737C26.4286 19.4842 26.0057 20.8947 25.2657 22.0947L23.3126 20.1526C23.6249 19.4729 23.7876 18.7345 23.7899 17.9869C23.7922 17.2394 23.634 16.5001 23.3258 15.8184L25.2789 13.8737C26.0083 15.0684 26.4286 16.4737 26.4286 17.9737Z" fill="white"/>
1362 - </svg>
1363 -
1364 -
1365 - </div>';
1366 - print '<div id="'.esc_attr( $unmute_trailer_button_element_id ).'" class="wpstream_video_on_demand_unmute_trailer">
1367 - <svg width="33" height="32" viewBox="0 0 33 32" fill="none" xmlns="http://www.w3.org/2000/svg">
1368 - <path fill-rule="evenodd" clip-rule="evenodd" d="M1.15625 8.85688H7.60813L16.5344 0L18.5 0.809375V30.8719L16.5344 31.635L7.60813 22.7319H1.15625L0 21.5756V10.0131L1.15625 8.85688ZM8.90313 20.8125L16.1875 28.0738V3.6075L8.90313 10.8225L8.09375 11.1694H2.3125V20.4194H8.09375L8.90313 20.8125ZM30.5967 11.3127L32.2316 12.9477L28.2287 16.9506L32.2316 20.9559L30.5967 22.5908L26.5938 18.5856L22.5885 22.5908L20.9536 20.9559L24.9588 16.9506L20.9513 12.95L22.5862 11.3151L26.5938 15.3157L30.5967 11.3127Z" fill="white"/>
1369 - </svg>
1370 -
1371 - </div>';
1372 - print '</div>';
1373 - }
1374 - else {
1375 - //just show the poster or don't show anything; no player needed
1376 - }
1377 -
1378 - }
1379 -
1380 748
1381 749
750 +
1382 751 /**
1383 752 *
1384 753 * edited 4.0
1385 754 *
@@ -1390,119 +759,26 @@
1390 759 private function wpstream_retrive_username(){
1391 760
1392 761 return get_option('wpstream_api_username_from_token');
1393 762 }
1394 -
1395 - /**
1396 - * Render title overlay via action hook.
1397 - *
1398 - * @param string $overlay_id Overlay element id.
1399 - * @param string $title_text Title text.
1400 - */
1401 - private function wpstream_render_vod_title_overlay( $overlay_id, $title_text ) {
1402 - if ( has_action( 'wpstream_vod_title_overlay' ) ) {
1403 - do_action(
1404 - 'wpstream_vod_title_overlay',
1405 - $overlay_id,
1406 - $title_text,
1407 - esc_html__( 'Playing:', 'wpstream' )
1408 - );
1409 - }
1410 - }
1411 763
1412 - /**
1413 - * check if the we can add display the player
1414 - *
1415 - * @since 3.12
1416 - * returns html of the player
1417 - */
764 + /**
765 + * check if the we can add display the player
766 + *
767 + * @since 3.12
768 + * returns html of the player
769 + */
1418 770
1419 - public function wpstream_check_if_player_can_dsplay($product_id){
1420 - if ( is_user_logged_in() ) {
1421 -
1422 - $term_list = wp_get_post_terms($product_id, 'product_type');
1423 - $current_user = wp_get_current_user();
1424 - $subscription_model = intval( get_option('wpstream_global_sub','')) ;
1425 -
1426 - $product = wc_get_product($product_id);
1427 - $product_type = $product->get_type();
1428 -
1429 -
1430 - if($subscription_model==1){ // if we have Neflix mode
1431 - if( $product_type=='subscription' ){ // if the product loaded is a subscription and we are on netflix mode
1432 - return false;
1433 - }
1434 - if($this->wpstream_in_plugin_check_global_subscription_model($product_id)){
1435 - return true;
1436 - }
1437 - }else{
1438 - // ppv mode
771 + public function wpstream_check_if_player_can_dsplay($product_id){
772 + if ( is_user_logged_in() ) {
1439 773
1440 - if( $product_type=='subscription' ){
1441 -
1442 -// $user_subscriptions = wcs_get_users_subscriptions($current_user->ID );
1443 -// foreach ($user_subscriptions as $subscription) {
1444 -// $subscription_status = $subscription->get_status();
1445 -// echo "</br>*** Subscription ID $subscription->ID for User ID $current_user->ID has status: $subscription_status";
1446 -// }
1447 -
1448 -
1449 - if( wcs_user_has_subscription( $current_user->ID, $product_id ,'active') ) {
1450 - // user has active subcription
1451 - return true;
1452 - }
774 + $term_list = wp_get_post_terms($product_id, 'product_type');
775 + $current_user = wp_get_current_user();
776 + $subscription_model = esc_html( get_option('wpstream_global_sub','')) ;
1453 777
1454 - }else{
1455 - if( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product_id)){
1456 - return true;
1457 - }
1458 - }
1459 -
1460 -
1461 - }
1462 - return false;
1463 -
1464 - }
1465 - return false;
1466 -
1467 - }
1468 -
1469 -
1470 -
1471 - /**
1472 - * check if the we can add display the player - theme variant
1473 - *
1474 - * @since 3.12
1475 - * returns html of the player
1476 - */
1477 - public function wpstream_check_if_player_can_dsplay_theme($product_id){
1478 -
1479 - $post_type= get_post_type($product_id);
1480 -
1481 -
1482 -
1483 - if($post_type=='wpstream_product_vod' || $post_type=='wpstream_product'){
1484 - return true; // if we have free vod or live
1485 - }
1486 -
1487 -
1488 -
1489 - if ( is_user_logged_in() && $post_type==='product' ) {
1490 778
1491 - $product = wc_get_product( $product_id );
1492 - $product_type = $product->get_type();
1493 - $possible_bundle = get_post_meta($product_id, 'wpstream_part_of_bundle',true);
1494 -
1495 -
1496 -
1497 -
1498 -
1499 - $current_user = wp_get_current_user();
1500 - $subscription_model = intval( get_option('wpstream_global_sub','')) ;
1501 - // print 'subscription model '.$subscription_model.'</br>';
1502 -
1503 779 if($subscription_model==1){ // if we have Neflix mode
1504 - if( $product_type=='subscription' ){ // if the product loaded is a subscription and we are on netflix mode
780 + if( $term_list[0]->name=='subscription' ){ // if the product loaded is a subscription and we are on netflix mode
1505 781 return false;
1506 782 }
1507 783 if($this->wpstream_in_plugin_check_global_subscription_model($product_id)){
1508 784 return true;
@@ -1508,20 +784,13 @@
1508 784 return true;
1509 785 }
1510 786 }else{
1511 787 // ppv mode
1512 - if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product_id) ){
1513 - return true; //simple product bought
1514 - }else if (function_exists('wcs_user_has_subscription') && wcs_user_has_subscription( $current_user->ID, $product_id ,'active') ){
1515 - return true; // subscription boght
1516 - }else if( get_post_type($product_id) =='product' &&
1517 - intval($possible_bundle )!=0 &&
1518 - wc_customer_bought_product( $current_user->user_email, $current_user->ID, $possible_bundle)
1519 - ){
1520 - return true; // part of a boght bundle
788 + if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product_id) ||
789 + ( function_exists('wcs_user_has_subscription') && wcs_user_has_subscription( $current_user->ID, $product_id ,'active') ) ){
790 + return true;
1521 791 }
1522 792 }
1523 - // print ' fac return false </br>';
1524 793 return false;
1525 794
1526 795 }
1527 796 return false;
@@ -1528,14 +797,15 @@
1528 797
1529 798 }
1530 799
1531 800
801 +
1532 802 /**
1533 - * in plugin - check if global subscription model is enabled
1534 - *
1535 - * @since 3.12
803 + * in plugin - check if global subscription model is enabled
804 + *
805 + * @since 3.12
1536 806 *
1537 - */
807 + */
1538 808 public function wpstream_in_plugin_check_global_subscription_model($product_id) {
1539 809
1540 810 // $selected_sub= get_post_meta($post->ID,'_wpstream_parent_sub',true);
1541 811 if( is_user_logged_in() && function_exists('wcs_user_has_subscription') ){
@@ -1542,9 +812,9 @@
1542 812
1543 813 global $woocommerce;
1544 814 $current_user = wp_get_current_user();
1545 815
1546 - $subscription_model = intval( get_option('wpstream_global_sub','')) ;
816 + $subscription_model = esc_html( get_option('wpstream_global_sub','')) ;
1547 817 $main_subscription = intval( get_option('wpstream_global_sub_id',''));
1548 818
1549 819 if($subscription_model==1){
1550 820 $selected_sub= get_post_meta($product_id,'_wpstream_parent_sub',true) ;
@@ -1587,11 +857,11 @@
1587 857 *
1588 858 *
1589 859 *
1590 860 *
1591 - * check if the user bought the product and display the player - TO REDo
1592 - *
1593 - * @since 3.0.1
861 + * check if the user bought the product and display the player - TO REDo
862 + *
863 + * @since 3.0.1
1594 864 * returns html of the player
1595 865 *
1596 866 *
1597 867 *
@@ -1596,22 +866,17 @@
1596 866 *
1597 867 *
1598 868 *
1599 869 *
1600 - */
870 + */
1601 871 public function wpstream_user_logged_in_product_already_bought($from_sh_id='') {
1602 - if(function_exists('wpstream_remove_wpstream_filter')){
1603 - return;
1604 - }
1605 872 global $product;
1606 873 $product_id = $product->get_id();
1607 874 $current_user = wp_get_current_user();
1608 -
1609 875 if ( is_user_logged_in() ) {
1610 -
1611 -
876 +
1612 877 if($this->wpstream_check_if_player_can_dsplay($product_id) ){
1613 -
878 +
1614 879 echo '<div class="wpstream_player_wrapper "><div class="wpstream_player_container">';
1615 880
1616 881 $is_subscription_live_event = esc_html(get_post_meta($product_id,'_subscript_live_event',true));
1617 882 $term_list = wp_get_post_terms($product_id, 'product_type');
@@ -1619,25 +884,20 @@
1619 884
1620 885 if( $term_list[0]->name=='live_stream' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='yes' ) ){
1621 886 $this->wpstream_live_event_player($product_id);
1622 887 }else if( $term_list[0]->name=='video_on_demand' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='no' ) ){
1623 -
1624 888 $this->wpstream_video_on_demand_player($product_id);
1625 889 }
1626 890 echo '</div></div>';
1627 891 }else{
1628 -
892 +
1629 893
1630 894 $term_list = wp_get_post_terms($product_id, 'product_type');
1631 -
1632 895 if( $term_list[0]->name=='subscription' ){
1633 -
1634 896 if( !wcs_user_has_subscription( $current_user->ID, $product_id ,'active') ) {
1635 897 $this->wpstream_display_no_buy_message('nobuy',$product_id);
1636 898 }
1637 899
1638 - }else{
1639 - $this->wpstream_display_no_buy_message('nobuy',$product_id);
1640 900 }
1641 901
1642 902
1643 903
@@ -1656,13 +916,13 @@
1656 916
1657 917 /**
1658 918 *
1659 919 *
1660 - * check if the user bought the product and display the player - TO REDo
1661 - *
1662 - * @since 3.0.1
920 + * check if the user bought the product and display the player - TO REDo
921 + *
922 + * @since 3.0.1
1663 923 * returns html of the player
1664 - */
924 + */
1665 925
1666 926 public function wpstream_chat_wrapper($product_id){
1667 927 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/templates/wpstream_chat_template.php';
1668 928 }
@@ -1674,13 +934,13 @@
1674 934
1675 935
1676 936
1677 937 /**
1678 - * coonect to chat
1679 - *
1680 - * @since 1.12.2
938 + * coonect to chat
939 + *
940 + * @since 1.12.2
1681 941 *
1682 - */
942 + */
1683 943
1684 944
1685 945
1686 946 public function wpstream_connect_to_chat($product_id){
@@ -1729,15 +989,15 @@
1729 989 }
1730 990
1731 991
1732 992 /**
1733 - * display no buy Message
1734 - *
1735 - * @since 3.12.2
993 + * display no buy Message
994 + *
995 + * @since 3.12.2
1736 996 *
1737 - */
997 + */
1738 998 public function wpstream_display_no_buy_message($log,$product_id) {
1739 -
999 +
1740 1000 if($log=='sub_active'){
1741 1001 $message= esc_html( get_option('wpstream_subscription_active','Your Subscription is Active.')) ;
1742 1002 echo '<div class="wpstream_player_wrapper no_buy"><div class="wpstream_player_container">';
1743 1003 echo '<div class="wpstream_notice"> '.$message.'</div>';
@@ -1748,9 +1008,9 @@
1748 1008 $message= esc_html( get_option('wpstream_product_not_login','You must be logged in to watch this video.')) ;
1749 1009 }else{
1750 1010 $message =esc_html( get_option('wpstream_product_not_bought','You did not yet purchase this item.')) ;
1751 1011 }
1752 - $subscription_model = intval( get_option('wpstream_global_sub','')) ;
1012 + $subscription_model = esc_html( get_option('wpstream_global_sub','')) ;
1753 1013 if($subscription_model==1){
1754 1014 $message =esc_html( get_option('wpstream_product_not_subscribe','You did not yet subscribe to this item.'));
1755 1015 }
1756 1016
@@ -1755,16 +1015,11 @@
1755 1015 }
1756 1016
1757 1017
1758 1018 if( get_post_type($product_id) == 'product' && $subscription_model==0 ){
1759 - $product = wc_get_product($product_id);
1760 - $term_list = wp_get_post_terms($product_id, 'product_type');
1761 - $product_type = $product->get_type();
1762 - $is_subscription_live_event = esc_html(get_post_meta($product_id,'_subscript_live_event',true));
1763 -
1764 1019
1765 -
1766 - if( $term_list[0]->name=='video_on_demand' || $term_list[0]->name=='live_stream' || $product_type=='subscription'){
1020 + $term_list = wp_get_post_terms($product_id, 'product_type');
1021 + if( $term_list[0]->name=='video_on_demand' || $term_list[0]->name=='live_stream'){
1767 1022
1768 1023 echo '<div class="wpstream_player_wrapper no_buy"><div class="wpstream_player_container">';
1769 1024 echo '<div class="wpstream_notice">'.$message.'</div>';
1770 1025 echo '</div></div>';
@@ -1771,14 +1026,11 @@
1771 1026
1772 1027 }
1773 1028
1774 1029 }else if( get_post_type($product_id) == 'product' && $subscription_model==1 ){
1775 - $term_list = wp_get_post_terms($product_id, 'product_type');
1776 - if( $term_list[0]->name!=='simple'){
1777 - echo '<div class="wpstream_player_wrapper no_buy"><div class="wpstream_player_container">';
1778 - echo '<div class="wpstream_notice"> '.$message.'</div>';
1779 - echo '</div></div>';
1780 - }
1030 + echo '<div class="wpstream_player_wrapper no_buy"><div class="wpstream_player_container">';
1031 + echo '<div class="wpstream_notice"> '.$message.'</div>';
1032 + echo '</div></div>';
1781 1033 }
1782 1034
1783 1035
1784 1036
@@ -1785,58 +1037,7 @@
1785 1037
1786 1038
1787 1039
1788 1040 }
1789 -
1790 - /**
1791 - * Get the video player logo URL.
1792 - *
1793 - * @param int $product_id Product ID.
1794 - * @return mixed|string
1795 - */
1796 - public function wpstream_get_video_player_logo( $product_id ) {
1797 - $is_streamify_user = $this->wpstream_is_streamify_user( $product_id );
1798 - if ( $is_streamify_user ) {
1799 - return WPSTREAM_PLUGIN_DIR_URL . 'img/wpstream-symbol-large.png';
1800 - }
1801 -
1802 - $logo = get_option( 'wpstream_player_logo', '' );
1803 - if ( ! empty( $logo ) ) {
1804 - return $logo;
1805 - }
1806 -
1807 - return '';
1808 - }
1809 -
1810 - /**
1811 - * Get cached pack data or request fresh pack data
1812 - *
1813 - * @param bool $force_refresh Force a refresh of the cached data
1814 - * @return array Pack data
1815 - */
1816 - private function wpstream_get_cached_pack_data( $force_refresh = false ) {
1817 - $cached_data = get_transient( 'wpstream_user_pack_data' );
1818 -
1819 - if ( $force_refresh || $cached_data === false ) {
1820 - $fresh_data = $this->main->wpstream_live_connection->wpstream_request_pack_data_per_user('wpstream_get_cached_pack_data');
1821 - set_transient( 'wpstream_user_pack_data', $fresh_data, 60);
1822 -
1823 - return $fresh_data;
1824 - }
1825 -
1826 - return $cached_data;
1827 - }
1828 -
1829 - /*
1830 - * Check if the user is on a basic subscription
1831 - *
1832 - * @param int $channel_id Channel ID
1833 - * @return bool
1834 - */
1835 - public function wpstream_is_streamify_user( $channel_id ) {
1836 - $is_basic_streaming = get_post_meta( $channel_id, 'basicStreaming', true );
1837 - if ( $is_basic_streaming === '1' ) {
1838 - return true;
1839 - }
1840 - return false;
1841 - }
1041 +
1042 +
1842 1043 }