PluginProbe
WpStream – Live Streaming, Video on Demand, Pay Per View / 3.8
WpStream – Live Streaming, Video on Demand, Pay Per View v3.8
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 +473 -1525 4.133.8 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,20 +20,37 @@
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 + add_action( 'wp_ajax_wpstream_force_clear_transient', array($this,'wpstream_force_clear_transient') );
27 + add_action('wp_ajax_nopriv_wpstream_force_clear_transient', array($this,'wpstream_force_clear_transient'));
28 +
29 +
35 30 }
36 31
37 32
38 33
39 -
34 + /**
35 + * clear status transients
36 + *
37 + * @author cretu
38 + */
40 39
40 +
41 + public function wpstream_force_clear_transient($event_id){
42 +
43 + $transient_name = 'event_data_to_return_'.$event_id;
44 + delete_transient($transient_name);
45 + update_post_meta($event_id,'statsUrl','');
46 + update_post_meta($event_id,'chatUrl','');
41 47
48 + }
49 +
50 +
51 +
42 52 /**
43 - *
44 - * edited 4.0
45 - *
46 53 * check player status
47 54 *
48 55 * @author cretu
49 56 */
@@ -48,64 +55,115 @@
48 55 * @author cretu
49 56 */
50 57
51 58 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']);
55 -
59 + $event_id = intval($_POST['event_id']);
60 + $show_id=$event_id;
61 + $transient_name = 'event_data_to_return_'.$event_id;
62 + $event_data_for_transient = get_transient( $transient_name );
63 +
64 +
56 65
57 - $transient_name = 'event_data_to_return_'. $channel_id;
58 - $event_data_for_transient = get_transient( $transient_name );
66 + if ( false === $event_data_for_transient || $event_data_for_transient=='' ) { //ws || $hls_to_return==''
67 +
68 + $server_id = ''; // server id IS blank - need to retrive it
69 + $token = $this->main->wpstream_live_connection->wpstream_get_token();
70 +
71 + if($server_id==''){
72 + update_post_meta($show_id,'server_id', '' );
73 +
74 + $server_id =$this->main->wpstream_live_connection->retrive_server_id_based_on_show_id($show_id);
75 +
76 + }
77 +
78 +
79 +
80 + update_post_meta($show_id,'server_id', $server_id );
81 + $values_array=array(
82 + "server_id" => esc_html($server_id),
83 + 'from_where' => 'wpstream_check_event_status_front_player'
84 + );
85 +
86 + if($server_id==''){
87 + $this->main->wpstream_live_connection->wpstream_reset_event_data($show_id);
88 + //print 'failed connection';
89 + return;
90 + }
91 +
59 92
60 -
61 - $usefull_info =' get cache from transiet';
62 - if ( false === $event_data_for_transient || $event_data_for_transient=='' ) { //ws || $hls_to_return==''
63 - $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);
65 - $event_data_for_transient = $event_status;
66 - $usefull_info =' no cache found';
67 - set_transient($transient_name,$event_data_for_transient,45);
93 +
94 + $url=WPSTREAM_CLUBLINKSSL."://www.".WPSTREAM_CLUBLINK."/wp-json/rcapi/v1/api20-livestrem/event_status/?access_token=".$token;
95 + $arguments = array(
96 + 'method' => 'GET',
97 + 'timeout' => 45,
98 + 'redirection' => 5,
99 + 'httpversion' => '1.0',
100 + 'blocking' => true,
101 + 'headers' => array(),
102 + 'body' => $values_array,
103 + 'cookies' => array()
104 + );
105 +
106 + $response = wp_remote_post($url,$arguments);
107 + $received_data = wp_remote_retrieve_body($response);
108 +
109 + if( isset($response['response']['code']) && $response['response']['code']=='200'){
110 + $received_data_encoded=json_decode($received_data,true);
111 +
112 + if( isset($received_data_encoded['success']) && intval( $received_data_encoded['success'] ) ==1 ){
113 +
114 + /*
115 + * we set transient and return the array saved
116 + * false if no data
117 + *
118 + * */
119 + $event_data_for_transient= $this->main->wpstream_live_connection->api20_wpstream_update_event($received_data_encoded,$show_id,$server_id);
120 + }else{
121 + $this->main->wpstream_live_connection->wpstream_reset_event_data($show_id);
122 + }
123 +
124 + }else{
125 + $this->main->wpstream_live_connection->wpstream_reset_event_data($show_id);
126 + }
127 +
128 +
129 +
130 +
131 + if ( false === $event_data_for_transient || $event_data_for_transient=='' ){
132 + //we are not live
133 + $event_data_for_transient=array();
134 + $event_data_for_transient['hlsPlaybackUrl']='';
135 +
136 + }
68 137 }
69 138
70 139
71 - 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();
140 +
141 + // 1==2 &&
142 +
143 + if( $event_data_for_transient['hlsPlaybackUrl']!=''){
74 144 echo json_encode( array(
75 145
76 146 'started' => 'yes',
77 - 'usefull_info' => $usefull_info,
78 - 'channel_id' => $channel_id,
79 - 'event_uri' => $event_data_for_transient['hls_playback_url'],
80 - 'live_conect_views' => $event_data_for_transient['stats_url'],
81 - 'chat_url' => $event_data_for_transient['chat_url'],
82 - '$event_data_for_transient'=>$event_data_for_transient
83 -
147 + 'server_id' => $event_data_for_transient['server_id'],
148 + 'event_id' => $event_id,
149 + 'event_uri' => $event_data_for_transient['hlsPlaybackUrl'],
150 + 'live_conect_views' => $event_data_for_transient['statsUrl'],
151 + 'chat_url' => $event_data_for_transient['chatUrl'],
84 152
85 153 ));
86 - $usedfull_info =' ';
87 - update_post_meta($channel_id,'stream_name',$event_data_for_transient['stream_name']);
88 - update_post_meta($channel_id,'hls_key_retrieval_url',$event_data_for_transient['hls_key_retrieval_url']);
89 - delete_transient( 'free_event_streamName_'.$event_data_for_transient['stream_name']);
90 -
91 154 }else{
92 - // cleanup any previous echo before sending json
93 - ob_end_clean();
94 155 echo json_encode( array(
95 156 'started' => 'no',
96 - 'usefull_info' => $usefull_info,
97 - 'server_id' => '',
98 - 'channel_id' => $channel_id,
157 + 'server_id' => $server_id,
158 + 'event_id' => $event_id,
99 159 'event_uri' => '',
100 160 'live_conect_views' => '',
101 161 'chat_url' => '',
102 -
103 162
104 163 ));
105 -
164 + $this->wpstream_force_clear_transient($event_id);
106 165 }
107 -
108 166 die();
109 167 }
110 168
111 169
@@ -115,13 +173,9 @@
115 173 *
116 174 * @author cretu
117 175 */
118 176 public function wpstream_filter_the_title( $content ) {
119 - if(function_exists('wpstream_remove_wpstream_filter')){
120 - return $content;
121 - }
122 -
123 - if( is_singular('wpstream_product') || is_singular('wpstream_product_vod') ){
177 + if( is_singular('wpstream_product')){
124 178 global $post;
125 179 $args=array('id'=>$post->ID);
126 180 $custom_content = $this->wpstream_insert_player_inpage($args);
127 181 $content = '<div class="wpestream_inserted_player">'.$custom_content.'</div>'.$content;
@@ -172,42 +226,31 @@
172 226 * @author cretu
173 227 */
174 228
175 229 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 230
181 - wp_enqueue_script('video.min');
182 - wp_enqueue_script('wpstream-player');
183 -
184 231 if ( is_user_logged_in() ) {
185 232 global $product;
186 233 $current_user = wp_get_current_user();
187 234 $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);
190 -
191 235
192 236
193 -
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' ){
237 + 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) ) || get_post_type($product_id)=='wpstream_product' ){
200 238 global $product;
201 239 echo '<div class="wpstream_player_wrapper wpstream_player_shortcode"><div class="wpstream_player_container">';
202 240
203 241
204 242 if( get_post_type($product_id) == 'wpstream_product' ){
205 - $this->wpstream_live_event_player($product_id);
206 - }else if( get_post_type($product_id) == 'wpstream_product_vod' ){
207 - $this->wpstream_video_on_demand_player($product_id);
243 +
244 + $wpstream_product_type = esc_html(get_post_meta($product_id, 'wpstream_product_type', true));
245 + if($wpstream_product_type==1){
246 + $this->wpstream_live_event_player($product_id);
247 + } else if($wpstream_product_type==2 || $wpstream_product_type==3){
248 + $this->wpstream_video_on_demand_player($product_id);
249 + }
250 +
208 251 }else{
209 -
252 + $term_list = wp_get_post_terms($product_id, 'product_type');
210 253 $is_subscription_live_event = esc_html(get_post_meta($product_id,'_subscript_live_event',true));
211 254
212 255 if( $term_list[0]->name=='live_stream' || ( $term_list[0]->name=='subscription' && $is_subscription_live_event=='yes' ) ){
213 256 $this->wpstream_live_event_player($product_id);
@@ -221,10 +264,9 @@
221 264 }else{
222 265
223 266 if( get_post_type($product_id) == 'product' ){
224 267 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>';
268 + echo '<div class="wpstream_notice" style="background:#e16767;">'.esc_html__('You did not buy this product!','wpstream').'</div>';
227 269 echo '</div></div>';
228 270 }
229 271 }
230 272
@@ -231,26 +273,17 @@
231 273
232 274 }else{
233 275
234 276 $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.')) ;
277 + if( get_post_type($product_id) == 'wpstream_product' ){
241 278
279 + $wpstream_product_type = esc_html(get_post_meta($product_id, 'wpstream_product_type', true));
280 + if($wpstream_product_type==1){
281 + $this->wpstream_live_event_player($product_id);
282 + } else if($wpstream_product_type==2 || $wpstream_product_type==3){
283 + $this->wpstream_video_on_demand_player($product_id);
284 + }
242 285
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>';
249 - } 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>';
253 286 }
254 287 }
255 288 }
256 289
@@ -262,16 +295,9 @@
262 295 * @author cretu
263 296 */
264 297
265 298 public function wpstream_video_player_shortcode_low_latency($from_sh_id='') {
266 - if ( !defined( 'DONOTCACHEPAGE' ) ) {
267 - define( 'DONOTCACHEPAGE', true );
268 - }
269 299
270 - wp_enqueue_script('video.min');
271 - wp_enqueue_script('wpstream-player');
272 -
273 -
274 300 if ( is_user_logged_in() ) {
275 301 global $product;
276 302 $current_user = wp_get_current_user();
277 303 $product_id = intval($from_sh_id);
@@ -282,9 +308,14 @@
282 308 echo '<div class="wpstream_player_wrapper wpstream_player_shortcode"><div class="wpstream_player_container">';
283 309
284 310
285 311 if( get_post_type($product_id) == 'wpstream_product' ){
286 - $this->wpstream_live_event_player_low_latency($product_id);
312 +
313 + $wpstream_product_type = esc_html(get_post_meta($product_id, 'wpstream_product_type', true));
314 + if($wpstream_product_type==1){
315 + $this->wpstream_live_event_player_low_latency($product_id);
316 + }
317 +
287 318 }else{
288 319 $term_list = wp_get_post_terms($product_id, 'product_type');
289 320 $is_subscription_live_event = esc_html(get_post_meta($product_id,'_subscript_live_event',true));
290 321
@@ -298,11 +329,9 @@
298 329 }else{
299 330
300 331 if( get_post_type($product_id) == 'product' ){
301 332 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>';
333 + echo '<div class="wpstream_notice" style="background:#e16767;">'.esc_html__('You did not buy this product!','wpstream').'</div>';
305 334 echo '</div></div>';
306 335 }
307 336 }
308 337
@@ -309,9 +338,13 @@
309 338
310 339 }else{
311 340 $product_id = intval($from_sh_id);
312 341 if( get_post_type($product_id) == 'wpstream_product' ){
313 - $this->wpstream_live_event_player_low_latency($product_id);
342 +
343 + $wpstream_product_type = esc_html(get_post_meta($product_id, 'wpstream_product_type', true));
344 + if($wpstream_product_type==1){
345 + $this->wpstream_live_event_player_low_latency($product_id);
346 + }
314 347 }
315 348 }
316 349 }
317 350
@@ -332,114 +365,8 @@
332 365 }
333 366 }
334 367 return $url;
335 368 }
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 369
443 370 /**
444 371 * Get event settings
445 372 *
@@ -447,482 +374,156 @@
447 374 */
448 375
449 376 function wpestream_return_event_settings($product_id){
450 377
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 = isset( $local_event_options ) &&
454 - ( ! isset( $use_global_event_options ) || (int) $use_global_event_options === 0 );
455 -
456 - if( !$is_local_event_options_enabled ) {
378 + $local_event_options = get_post_meta($product_id,'local_event_options',true);
379 + if(!is_array($local_event_options)){
457 380 $local_event_options = get_option('wpstream_user_streaming_global_channel_options') ;
458 381 }
459 382
460 383 return $local_event_options;
461 384 }
462 -
463 - /**
464 - * Localized strings for live player UI (parent overlay + iframe postMessage).
465 - *
466 - * @return array<string,string|bool>
467 - */
468 - private function wpstream_get_player_i18n_config() {
469 - return array(
470 - 'wpstream_player_state_stopped_msg' => esc_html(
471 - get_option(
472 - 'wpstream_you_are_not_live',
473 - __( 'We are not live at this moment', 'wpstream' )
474 - )
475 - ),
476 - 'wpstream_player_state_init_msg' => esc_html__( 'The live stream has not yet started', 'wpstream' ),
477 - 'wpstream_player_state_startup_msg' => esc_html__( 'The live stream is starting...', 'wpstream' ),
478 - 'wpstream_player_state_paused_msg' => esc_html__( 'The live stream is paused', 'wpstream' ),
479 - 'wpstream_player_state_ended_msg' => esc_html__( 'The live stream has ended', 'wpstream' ),
480 - 'wpstream_player_state_error_msg' => esc_html__( 'Something went wrong', 'wpstream' ),
481 - 'wpstream_player_offair_default_msg' => esc_html__( 'Live stream is not on air.', 'wpstream' ),
482 - 'wpstream_player_max_viewers_msg' => esc_html__( 'Max viewers reached. Please wait', 'wpstream' ),
483 - 'wpstream_player_max_viewers_wait_msg' => esc_html__( 'Max viewers reached. Please wait for %d to leave', 'wpstream' ),
484 - 'wpstream_player_invalid_session_msg' => esc_html__( 'Invalid session. Please refresh and start playback again.', 'wpstream' ),
485 - 'isThemeActive' => get_template() === 'hello-wpstream',
486 - );
487 - }
488 385
489 386
490 387
491 388 /**
492 - * edited in 4.0
493 - *
494 389 * Live Event Player
495 390 *
496 391 * @author cretu
497 392 */
498 393
499 - function wpstream_live_event_player($channel_id,$poster_show='',$use_chat=''){
500 - wp_enqueue_script('video.min');
501 - wp_enqueue_script('wpstream-player');
502 - wp_enqueue_script( 'wpstream-player-controls' );
394 + function wpstream_live_event_player($product_id,$poster_show='',$use_chat=''){
395 +
396 + $event_settings = $this->wpestream_return_event_settings($product_id);
397 + $live_event_uri = get_post_meta($product_id,'live_event_uri',true);
398 + $api20_event_id = get_post_meta($product_id,'server_id',true);
399 +
400 + $thumb_id = get_post_thumbnail_id($product_id);
401 + $thumb = wp_get_attachment_image_src($thumb_id,'small');
503 402
504 - wp_localize_script(
505 - 'wpstream-player-controls',
506 - 'wpstreamLiveUiConfig',
507 - $this->wpstream_get_player_i18n_config()
508 - );
509 -
510 - $player_theme = $this->wpstream_get_player_theme( $channel_id );
511 - $now = time().rand(0,1000000);
512 - $overlay_video_div_id = "random_id_".$now;
513 - // 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>';
514 -
515 -
516 - $thumb_id = get_post_thumbnail_id($channel_id);
517 - $thumb = wp_get_attachment_image_src($thumb_id,'small');
518 - $usernamestream = esc_html ( get_option('wpstream_api_username','') );
519 - $autoplay = true;
520 -
521 - $event_settings = $this->wpestream_return_event_settings($channel_id);
522 -
523 - $transient_name = 'event_data_to_return_'. $channel_id;
524 - $event_status = get_transient( $transient_name );
525 -
526 - if ( false === $event_status || $event_status=='' ) {
527 - $notes = 'wpstream_live_event_player_note';
528 - $event_status = $this->main->wpstream_live_connection-> wpstream_check_event_status_api_call($channel_id,$notes);
529 - set_transient($transient_name, $event_status, 45);
530 - }
531 -
532 - $hls_playback_url = '';
533 - $live_conect_views = '';
534 -
535 - if(isset($event_status['status']) && $event_status['status']=='active'){
536 - //live event
537 - if(isset($event_status['hls_playback_url'])){
538 - $hls_playback_url = $event_status['hls_playback_url'];
403 + $chatUrl= get_post_meta($product_id,'statsUrl',true);
404 +
405 +
406 + $live_event_uri_final = $this->wpstream_request_hls_player_dynamic('',$product_id);// buleala lu Gabi
407 + $now = time().rand(0,10);
408 + $live_conect_array = explode('live.streamer.wpstream.net',$live_event_uri_final);
409 + $live_conect_views = $live_conect_array[0].'live.streamer.wpstream.net';
410 + $live_conect_views = $this->remove_http($live_conect_views);
411 + $usernamestream = esc_html ( get_option('wpstream_api_username','') );
412 + $autoplay = 'autoplay';
413 + if(intval($event_settings['autoplay'])==0){
414 + $autoplay='no_autoplay';
415 + }
416 +
417 + echo '<div class="wpstream_live_player_wrapper function_wpstream_live_event_player" data-now="'.$now.'" data-me="'.esc_attr($usernamestream).'" data-product-id="'.$product_id.'" id="wpstream_live_player_wrapper'.$now.'" > ';
418 +
419 + if(intval($event_settings['view_count'])==1){
420 + echo '<div id="wpestream_live_counting" class="wpestream_live_counting"></div>';
421 + }
539 422
540 - update_post_meta($channel_id,'stream_name',$event_status['stream_name']);
541 - update_post_meta($channel_id,'hls_key_retrieval_url',$event_status['hls_key_retrieval_url']);
542 - delete_transient( 'free_event_streamName_'.$event_status['stream_name']);
543 -
544 - }
545 - $live_conect_views = $this->wpstream_get_live_connect_uri($event_status, 'hls_playback_url');
546 - if(isset($event_status['chat_url'])){
547 - $chat_url = $event_status['chat_url'];
548 - }
423 + $show_wpstream_not_live_mess=' style="display:none;" ';
424 + if(trim($live_event_uri_final) ==''){
425 + $show_wpstream_not_live_mess='';
426 + }
427 +
428 +
429 + 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__('We are not live at this moment. Please check back later.','wpstream').'</div></div>';
549 430
550 - }else{
551 - // event not live
552 - }
431 +
432 + $poster_data=' poster="'.$thumb[0].'" ';
433 + if($poster_show=='no'){
434 + $poster_data='';
435 + }
436 +
437 + $is_muted='';
438 + if(intval($event_settings['mute'])==1){
439 + $is_muted=' muted ';
440 + }
441 +
442 +
443 +
444 + echo'
445 + <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.'>
446 + <source
447 + src="'.$live_event_uri_final.'"
448 + type="application/x-mpegURL">
449 + </video>';
553 450
554 - $trailer_attachment_id = intval( get_post_meta( $channel_id, 'video_trailer', true ) );
555 - $video_trailer = '';
556 - $has_trailer_class = '';
557 - if ( $trailer_attachment_id != 0 ) {
558 - $video_trailer = wp_get_attachment_url( $trailer_attachment_id );
559 - $attachment_metadata = wp_get_attachment_metadata( $trailer_attachment_id );
560 - if ( isset ( $attachment_metadata['mime_type'] ) ) {
561 - $video_trailer_type = $attachment_metadata['mime_type'];
562 - }
563 - $poster_data = ''; // cancel poster for theme
564 - $has_trailer_class = 'wpstream_theme_player_has_trailer';
565 - }
566 -
567 - if(isset($event_settings['autoplay']) && intval($event_settings['autoplay'])==0){
568 - $autoplay=false;
569 - }
451 + print '<script type="text/javascript">
452 + //<![CDATA[
453 + jQuery(document).ready(function(){
454 + wpstream_player_initialize("'.$now.'","'.$live_event_uri_final.'","'.$live_conect_views.'","'.$autoplay.'");';
455 + print'});
456 + //]]>
457 + </script>';
458 + print '</div>';
459 +
460 +
461 + if(trim($live_event_uri_final) ==''){
462 + // $show_wpstream_not_live_mess='';
463 + }else{
464 + print '<script type="text/javascript">
465 + //<![CDATA[
466 + jQuery(document).ready(function(){
467 + var player_wrapper = jQuery(".wpstream_live_player_wrapper");
468 + wpstream_read_websocket_info("'.$product_id.'","wpstream_live_player_wrapper'.$now.'", player_wrapper ,"'.$chatUrl.'", "'.$live_event_uri_final.'");
469 + });
470 + //]]>
471 + </script>';
472 + }
473 +
474 +
475 + if($use_chat=="yes"){
476 + $this->wpstream_connect_to_chat($product_id);
477 + }
478 +
479 + usleep (10000);
570 480
571 - $bootstrap_is_muted = ( isset( $event_settings['mute'] ) && intval( $event_settings['mute'] ) === 1 );
572 - $bootstrap_trailer_attachment_id = intval( get_post_meta( $channel_id, 'video_trailer', true ) );
573 - $bootstrap_trailer_url = '';
574 - if ( $bootstrap_trailer_attachment_id !== 0 ) {
575 - $bootstrap_trailer_url = wp_get_attachment_url( $bootstrap_trailer_attachment_id );
576 481 }
577 - $live_content_uri = isset( $hls_playback_url ) ? trim( $hls_playback_url ) : '';
578 - $live_stats_uri = isset( $live_conect_views ) ? trim( $live_conect_views ) : '';
579 - $live_chat_uri = isset( $chat_url ) ? trim( $chat_url ) : '';
580 - $play_trailer_button_element_id = 'wpstream_live_video_play_trailer_btn_' . $now;
581 - $mute_trailer_button_element_id = 'wpstream_live_video_mute_trailer_btn_' . $now;
582 - $unmute_trailer_button_element_id = 'wpstream_live_video_unmute_trailer_btn_' . $now;
583 482
584 483
585 484
586 - $player_nonce = wp_create_nonce( 'wpstream_player_check_status_nonce' );
587 -
588 - $live_channel_embed_url = get_post_meta( $channel_id, 'embedUrl', true );
589 -
590 - // if embedUrl is set, we are using the new player
591 - if ( !$live_channel_embed_url ) {
592 - 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 ) . '" > ';
593 -
594 - $show_viewer_count = (
595 - ( isset( $event_settings['view_count'] ) && intval( $event_settings['view_count'] ) == 1 )
596 - || ! isset( $event_settings['view_count'] )
597 - );
598 -
599 - echo '<div id="wpestream_live_counting" class="wpestream_live_counting" data-showviewercount="' . ( $show_viewer_count ? '1' : '0' ) . '"></div>';
600 -
601 - $show_wpstream_not_live_mess = ' style="display:none;" ';
602 - if ( trim( $hls_playback_url ) == '' ) {
603 -
604 - $show_wpstream_not_live_mess = '';
605 - }
606 -
607 - $message_show = esc_html( get_option( 'wpstream_you_are_not_live', 'We are not live at this moment' ) );
608 -
609 - if ( function_exists( 'wpstream_theme_not_live_section' ) ) {
610 - print wpstream_theme_not_live_section( $channel_id );
611 - } else {
612 - print '<div class="wpstream_not_live_mess" ' . $show_wpstream_not_live_mess . ' style="display: none">
613 - <div class="wpstream_not_live_mess_back"></div>
614 - <div class="wpstream_not_live_mess_mess">' . esc_html( $message_show ) . '</div>
615 - </div>';
616 - }
617 -
618 -
619 - $poster_data = '';
620 - if ( isset( $thumb[0] ) ) {
621 - $poster_data = ' poster="' . $thumb[0] . '" ';
622 - }
623 - if ( $poster_show == 'no' ) {
624 - $poster_data = '';
625 - }
626 -
627 - $is_muted = false;
628 - if ( isset( $event_settings['mute'] ) && intval( $event_settings['mute'] ) == 1 ) {
629 - $is_muted = true;
630 - }
631 - // override $is_muted and $autoplay here - for testing
632 - // $autoplay = true;
633 - // $is_muted = false;
634 -
635 - $autoplay_str = $autoplay ? 'autoplay' : '';
636 - $is_muted_str = $is_muted ? 'muted' : '';
637 -
638 - // override trailer url here - for testing
639 - // $video_trailer = '';
640 - // $video_trailer = '/wp-content/uploads/2023/10/production-ID_4608975.mp4';
641 - // $video_trailer = '/wp-content/uploads/2023/10/ultrawide.mp4';
642 -
643 -
644 - $player_logo_position_data = $this->wpstream_get_player_logo_data( $channel_id );
645 - $player_logo_position = $player_logo_position_data['player_logo_position'];
646 - $player_logo_position_class = $player_logo_position_data['player_logo_position_class'];
647 - $player_logo_horizontal_position = $player_logo_position_data['player_logo_horizontal_position'];
648 -// echo'
649 -// <div class="wpstream-video-container">
650 -// <div id="wpstream-pre-load-spinner" class="wpstream-pre-load-spinner"></div>
651 -// <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.'>
652 -// </video>
653 -// </div>';
654 - echo '<div class="wpstream-pre-load-spinner"></div>';
655 - echo '
656 - <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 . '>
657 -
658 - </video>';
659 - if ( $video_trailer ) {
660 - print '<div class="wpstream_theme_trailer_wrapper">';
661 - print '<div id="' . esc_attr( $play_trailer_button_element_id ) . '" style="display: none;" class="wpstream_video_on_demand_play_trailer">
662 - <svg width="30" height="24" viewBox="0 0 30 24" fill="none" xmlns="http://www.w3.org/2000/svg">
663 - <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"/>
664 - </svg>
665 - ' . esc_html__( 'Play Trailer', 'wpstream' ) . '</div>';
666 - print '<div id="' . esc_attr( $mute_trailer_button_element_id ) . '" style="display: none;" class="wpstream_video_on_demand_mute_trailer">
667 - <svg width="37" height="36" viewBox="0 0 37 36" fill="none" xmlns="http://www.w3.org/2000/svg">
668 - <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"/>
669 - </svg>
670 -
671 - </div>';
672 - print '<div id="' . esc_attr( $unmute_trailer_button_element_id ) . '" style="display: none;" class="wpstream_video_on_demand_unmute_trailer">
673 - <svg width="33" height="32" viewBox="0 0 33 32" fill="none" xmlns="http://www.w3.org/2000/svg">
674 - <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"/>
675 - </svg>
676 - </div>';
677 - print '</div>';
678 - }
679 - print '</div>';
680 -
681 -
682 - // Live player bootstrap is handled by wpstream-player-bootstrap.js.
683 -
684 -
685 - if ( $use_chat == "yes" ) {
686 - $this->wpstream_connect_to_chat( $channel_id );
687 - }
688 -
689 - usleep( 10000 );
690 - } else {
691 - $live_channel_frame_base = WPSTREAM_PLAYER . "/player/live?";
692 - $live_channel_id = get_post_meta( $channel_id, 'channelId', true );
693 -
694 - $local_event_options = get_option( 'wpstream_user_streaming_global_channel_options' );
695 - $wpstream_session_encryption = false;
696 - $wpstream_live_channel_lock_to_website = false;
697 - $wpstream_live_channel_autoplay = false;
698 -
699 - if ( isset( $local_event_options['ses_encrypt'] ) && intval( $local_event_options['ses_encrypt'] ) == 1 ) {
700 - $wpstream_session_encryption = true;
701 - }
702 - if ( isset( $local_event_options['domain_lock'] ) && intval( $local_event_options['domain_lock'] ) == 1 ) {
703 - $wpstream_live_channel_lock_to_website = true;
704 - }
705 - if ( isset( $local_event_options['autoplay'] ) && intval( $local_event_options['autoplay'] ) == 1 ) {
706 - $wpstream_live_channel_autoplay = true;
707 - }
708 -
709 - $wpstream_live_channel_validate_url = '';
710 - if ( $wpstream_session_encryption ) {
711 - $wpstream_live_channel_validate_url = esc_url_raw(
712 - apply_filters(
713 - 'wpstream_live_channel_validate_playback_session_url',
714 - $this->playback_session->wpstream_get_default_validate_playback_session_url(),
715 - $live_channel_id
716 - )
717 - );
718 - wp_localize_script(
719 - 'wpstream-player-controls',
720 - 'wpstreamLiveIframeSessionApi',
721 - array(
722 - 'requirePlaybackSession' => true,
723 - 'nonce' => wp_create_nonce( 'wpstream_playback_session_issue' ),
724 - 'productId' => (int) $channel_id,
725 - 'ajaxUrl' => admin_url( 'admin-ajax.php' ),
726 - )
727 - );
728 - }
729 -
730 - $local_event_options = get_option( 'wpstream_user_streaming_global_channel_options' );
731 - $wpstream_live_channel_lock_to_website = 0;
732 - $wpstream_live_channel_encrypt = 0;
733 - $wpstream_live_channel_abr = 0;
734 - $wpstream_live_channel_muted = 0;
735 -
736 - if ( isset( $local_event_options['domain_lock'] ) && intval( $local_event_options['domain_lock'] ) == 1 ) {
737 - $wpstream_live_channel_lock_to_website = 1;
738 - }
739 - if ( isset( $local_event_options['encrypt'] ) && intval( $local_event_options['encrypt'] ) == 1 ) {
740 - $wpstream_live_channel_encrypt = 1;
741 - }
742 - if ( isset( $local_event_options['adaptive_bitrate'] ) && intval( $local_event_options['adaptive_bitrate'] ) == 1 ) {
743 - $wpstream_live_channel_abr = 1;
744 - }
745 - if ( isset( $local_event_options['mute'] ) && intval( $local_event_options['mute'] ) == 1 ) {
746 - $wpstream_live_channel_muted = 1;
747 - }
748 -
749 - $live_channel_embed_ancestor = '';
750 - if ( $wpstream_live_channel_lock_to_website ) {
751 - $live_channel_embed_ancestor = esc_url_raw(
752 - apply_filters(
753 - 'wpstream_live_channel_embed_ancestor',
754 - $this->wpstream_get_site_origin_for_embed(),
755 - $live_channel_id
756 - )
757 - );
758 - }
759 -
760 - $wpstream_live_channel_embed_key = $this->wpstream_generate_player_embed_key(
761 - $live_channel_id,
762 - $wpstream_live_channel_validate_url,
763 - $live_channel_embed_ancestor,
764 - $wpstream_live_channel_encrypt ? 'yes' : ''
765 - );
766 - if ( '' === $wpstream_live_channel_embed_key ) {
767 - $wpstream_live_channel_embed_key = (string) get_post_meta( $channel_id, 'embed_key', true );
768 - }
769 - $wpstream_live_channel_trailer_embed_key = $this->wpstream_generate_player_embed_key(
770 - $video_trailer,
771 - $wpstream_live_channel_validate_url,
772 - $live_channel_embed_ancestor,
773 - $wpstream_live_channel_encrypt ? 'yes' : ''
774 - );
775 -
776 - $wpstream_player_iframe_skin_slug = '';
777 - if ( preg_match( '/^vjs-theme-(city|fantasy|forest|sea)$/', $player_theme, $vod_iframe_skin_m ) ) {
778 - $wpstream_player_iframe_skin_slug = $vod_iframe_skin_m[1];
779 - }
780 - $wpstream_show_viewer_count = (
781 - ( isset( $event_settings['view_count'] ) && intval( $event_settings['view_count'] ) == 1 )
782 - || ! isset( $event_settings['view_count'] )
783 - );
784 -
785 - $wpstream_poster_image = get_the_post_thumbnail_url( $channel_id, 'full' );
786 -
787 - $wpstream_player_logo_data = $this->wpstream_get_player_logo_data( $channel_id );
788 - $wpstream_player_logo_image = $wpstream_player_logo_data['player_logo_src'];
789 -
790 - $live_channel_query_args = array_filter(
791 - array(
792 - 'channel' => $live_channel_id,
793 - 'posterImage' => $wpstream_poster_image,
794 - 'embedKey' => $wpstream_live_channel_embed_key,
795 - 'autoplay' => $wpstream_live_channel_autoplay ? true : '',
796 - 'startMuted' => (bool) $wpstream_live_channel_muted,
797 - 'viewerCountBadge' => $wpstream_show_viewer_count ? true : '',
798 - 'encrypt' => $wpstream_live_channel_encrypt ? true : '',
799 - 'abr' => $wpstream_live_channel_abr ? true : '',
800 - 'validatePlaybackSessionUrl' => $wpstream_live_channel_validate_url,
801 - 'embedAncestor' => $live_channel_embed_ancestor,
802 - 'skin' => $wpstream_player_iframe_skin_slug,
803 - 'logoImage' => $wpstream_player_logo_image,
804 - 'logoPosition' => $wpstream_player_logo_image ? $wpstream_player_logo_data['player_logo_position'] : '',
805 - 'logoOpacity' => $wpstream_player_logo_image ? $wpstream_player_logo_data['player_logo_opacity'] : '',
806 - 'isThemeActive' => get_template() == 'hello-wpstream',
807 - ),
808 - static function ( $v ) {
809 - return $v !== null && $v !== '';
810 - }
811 - );
812 -
813 - $live_channel_trailer_iframe_query_args = array_filter(
814 - array(
815 - 'video' => $video_trailer,
816 - 'embedKey' => $wpstream_live_channel_trailer_embed_key,
817 - 'skin' => $wpstream_player_iframe_skin_slug,
818 - 'startMuted' => (bool) $wpstream_live_channel_muted,
819 - 'encrypt' => $wpstream_live_channel_encrypt ? true : '',
820 - 'validatePlaybackSessionUrl' => $wpstream_live_channel_validate_url,
821 - 'embedAncestor' => $live_channel_embed_ancestor,
822 - ),
823 - static function ( $v ) {
824 - return $v !== null && $v !== '';
825 - }
826 - );
827 -
828 - echo '<div class="wpstream_player_iframe_wrap">';
829 - echo '<iframe id="playerFrame"
830 - class="wpstream_live_channel_iframe"
831 - title="' . esc_attr__( 'Embedded content', 'wpstream' ) . '"
832 - src="' . esc_url( add_query_arg( $live_channel_query_args, $live_channel_frame_base ) ) . '"
833 - data-wpstream-frame-role="content"
834 - allowfullscreen
835 - allow="autoplay; fullscreen">
836 - </iframe>';
837 - if ( $trailer_attachment_id && get_template() === 'hello-wpstream' ) {
838 - echo '<iframe id="playerFrameTrailer"
839 - class="wpstream_live_channel_iframe wpstream_live_channel_iframe_trailer"
840 - title="' . esc_attr__( 'Embedded trailer content', 'wpstream' ) . '"
841 - src="' . esc_url( add_query_arg( $live_channel_trailer_iframe_query_args, WPSTREAM_PLAYER . "/player/vod?" ) ) . '"
842 - data-wpstream-frame-role="trailer"
843 - allowfullscreen
844 - allow="autoplay; fullscreen"
845 - style="display:none;"
846 - aria-hidden="true"
847 - tabindex="-1">
848 - </iframe>';
849 - }
850 - echo '</div>';
851 -
852 - }
853 -
854 - }
855 -
856 -
857 -
858 -
859 -
860 485 /**
861 - *
862 - * Edited in 4.0
863 - *
864 - *
865 486 * Live Event Player
866 487 *
867 488 * @author cretu
868 489 */
869 490
870 - function wpstream_live_event_player_low_latency($channel_id,$poster_show='',$use_chat=''){
871 - $usernamestream = esc_html ( get_option('wpstream_api_username','') );
872 - $thumb_id = get_post_thumbnail_id($channel_id);
491 + function wpstream_live_event_player_low_latency($product_id,$poster_show='',$use_chat=''){
492 + $event_settings = $this->wpestream_return_event_settings($product_id);
493 + $live_event_uri = get_post_meta($product_id,'live_event_uri',true);
494 + $api20_event_id = get_post_meta($product_id,'server_id',true);
495 +
496 + $thumb_id = get_post_thumbnail_id($product_id);
873 497 $thumb = wp_get_attachment_image_src($thumb_id,'small');
498 +
499 + $chatUrl= get_post_meta($product_id,'statsUrl',true);
874 500
875 - $event_settings = $this->wpestream_return_event_settings($channel_id);
876 - $notes = 'wpstream_live_event_player_low_latency_note';
877 - $event_status = $this->main->wpstream_live_connection-> wpstream_check_event_status_api_call($channel_id,$notes);
878 - $hls_playback_url = '';
879 - $live_conect_views = '';
880 - $now = time().rand(0,10);
501 +
502 + //$live_event_uri_final = $this->wpstream_request_hls_player_dynamic('',$product_id);// buleala lu Gabi
881 503
882 504
883 -
884 - if(isset($event_status['status']) && $event_status['status']=='active'){
885 - //live event
886 - if(isset($event_status['sldp_playback_url'])){
887 - $hls_playback_url = $event_status['sldp_playback_url'];
505 + $live_event_uri_final= get_post_meta($product_id,'sldpPlaybackUrl',true);
506 + $now = time().rand(0,10);
507 +
508 + $usernamestream = esc_html ( get_option('wpstream_api_username','') );
888 509
889 - }
890 - $live_conect_views = $this->wpstream_get_live_connect_uri($event_status, 'sldp_playback_url');
891 - if(isset($event_status['chat_url'])){
892 - $chat_url =$event_status['chat_url'];
893 - }
894 -
895 - }else{
896 - // event not live
897 - }
898 510
511 +
899 512
900 -
901 -
902 - $low_latency_is_muted = ( isset($event_settings['mute']) && intval($event_settings['mute']) == 1 );
903 - $low_latency_autoplay = true;
904 - if ( isset($event_settings['autoplay']) && intval($event_settings['autoplay']) == 0 ) {
905 - $low_latency_autoplay = false;
906 - }
907 - $low_latency_content_uri = isset( $hls_playback_url ) ? trim( $hls_playback_url ) : '';
908 - $low_latency_chat_uri = isset( $chat_url ) ? trim( $chat_url ) : '';
909 - $low_latency_stats_uri = isset( $live_conect_views ) ? trim( $live_conect_views ) : '';
910 -
911 - 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' ) .'" > ';
513 + 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="'.$product_id.'" id="wpstream_live_player_wrapper'.$now.'" > ';
912 514
913 -
914 - if( ( isset($event_settings['view_count'] ) && intval($event_settings['view_count'])==1 ) || !isset($event_settings['view_count']) ){
515 + if(intval($event_settings['view_count'])==1){
915 516 echo '<div id="wpestream_live_counting" class="wpestream_live_counting"></div>';
916 517 }
917 518
918 519 $show_wpstream_not_live_mess=' style="display:none;" ';
919 - if(trim($hls_playback_url) ==''){
520 + if(trim($live_event_uri_final) ==''){
920 521 $show_wpstream_not_live_mess='';
921 522 }
922 523
923 - $message_show= esc_html( get_option('wpstream_you_are_not_live','We are not live at this moment')) ;
924 - 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>';
524 +
525 + 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__('We are not live at this moment. Please check back later.','wpstream').'</div></div>';
925 526
926 527
927 528 $poster_data=' poster="'.$thumb[0].'" ';
928 529 if($poster_show=='no'){
@@ -930,16 +531,15 @@
930 531 }
931 532
932 533
933 534 $is_muted='';
934 - if( $low_latency_is_muted ){
935 - $is_muted=' muted ';
535 + if(intval($event_settings['mute'])==1){
536 + $is_muted='muted';
936 537 }
937 538
938 -
939 539 $autoplay='autoplay';
940 - if( !$low_latency_autoplay ){
941 - $autoplay='';
540 + if(intval($event_settings['autoplay'])==0){
541 + $autoplay='no_autoplay';
942 542 }
943 543
944 544 echo'
945 545 <div iccd="player" id="wpstream-video'.$now.'" '.$poster_data.' '.$is_muted.' class="" >
@@ -944,13 +544,35 @@
944 544 echo'
945 545 <div iccd="player" id="wpstream-video'.$now.'" '.$poster_data.' '.$is_muted.' class="" >
946 546 </div>';
947 547
948 - // Low-latency player bootstrap is handled by wpstream-player-bootstrap.js.
548 + print '<script type="text/javascript">
549 + //<![CDATA[
550 + jQuery(document).ready(function(){
551 + var low_latencyid="wpstream-video'.$now.'";
552 + document.addEventListener("DOMContentLoaded", initPlayer(low_latencyid, "'.$live_event_uri_final.'","'.$is_muted.'","'.$autoplay.'" ) ); ';
553 + print'});
554 + //]]>
555 + </script>';
556 +
949 557
950 558
559 + if(trim($live_event_uri_final) ==''){
560 + // $show_wpstream_not_live_mess='';
561 + }else{
562 + print '<script type="text/javascript">
563 + //<![CDATA[
564 + jQuery(document).ready(function(){
565 + var player_wrapper = jQuery(".wpstream_live_player_wrapper");
566 + wpstream_read_websocket_info("'.$product_id.'","wpstream_live_player_wrapper'.$now.'", player_wrapper ,"'.$chatUrl.'", "'.$live_event_uri_final.'");
567 + });
568 + //]]>
569 + </script>';
570 + }
571 +
572 +
951 573 if($use_chat=="yes"){
952 - $this->wpstream_connect_to_chat($channel_id);
574 + $this->wpstream_connect_to_chat($product_id);
953 575 }
954 576
955 577 usleep (10000);
956 578
@@ -957,148 +579,128 @@
957 579 }
958 580
959 581
960 582
961 -
962 -
963 - /*
964 - *
965 - * Request HLS player
966 - *
967 - *
968 - *
583 + /**
584 + * HLS PLAYER
585 + *
586 + * @author cretu
969 587 */
970 - public function wpstream_request_video_on_demand_hls_player($video_name,$product_id){
971 - if($video_name==''){
972 - return '';
973 - }
974 -
975 - $transient_name = 'wpstream_video_on_demand_'.$video_name;
976 - $hls_to_return = get_transient( $transient_name );
977 - $hls_to_return = false;
588 + public function wpstream_request_hls_player_dynamic($server_id,$product_id){
589 +
590 + $transient_name = 'hls_to_return_'.$product_id;
591 + $hls_to_return = get_transient( $transient_name );
978 592
979 -
980 - if($hls_to_return==false){
981 -
982 - $access_token = $this->main->wpstream_live_connection->wpstream_get_token();
983 - $url = 'video/info';
593 + if ( false === $hls_to_return || $hls_to_return=='' ) { //ws || $hls_to_return==''
594 +
595 + $token = $this->main->wpstream_live_connection->wpstream_get_token();
596 + $values_array = array();
597 + $values_array['server_id'] = $server_id;
598 +
599 + if($server_id==''){
600 + $this->main->wpstream_live_connection->wpstream_check_event_status_front_player($product_id,$server_id);
601 + $server_id = get_post_meta($product_id,'server_id', true );
602 + $values_array['server_id'] = $server_id;
603 + }
984 604
985 - //corsorigin de check
986 - $local_event_options = get_option('wpstream_user_streaming_global_channel_options') ;
987 - $domain = parse_url ( get_site_url() );
988 - $domain_scheme = 'http';
989 - if(is_ssl()){
990 - $domain_scheme='https';
605 +
606 + if($server_id==''){
607 + delete_transient($transient_name);
608 + return '';exit();
991 609 }
610 +
611 + $url = WPSTREAM_CLUBLINKSSL."://www.".WPSTREAM_CLUBLINK."/wp-json/rcapi/v1/api20-livestrem/ap20_get_player_hls_dynamic/?access_token=".$token;
992 612
993 -
994 - $wpstream_vod_domain_lock = intval( get_option('wpstream_vod_domain_lock','') ) ;
995 - $corsorigin='*';
996 - if($wpstream_vod_domain_lock !== 0 ){
997 - $corsorigin=$domain_scheme.'://'.$domain['host'];
998 - }
999 613
1000 -
1001 - $is_encrypt="false";
1002 - $wpstream_vod_encrypt = intval( get_option('wpstream_vod_encrypt','') ) ;
1003 - if( intval( $wpstream_vod_encrypt ) ==1 ){
1004 - $is_encrypt="true";
614 + $arguments = array(
615 + 'method' => 'GET',
616 + 'timeout' => 45,
617 + 'redirection' => 5,
618 + 'httpversion' => '1.0',
619 + 'blocking' => true,
620 + 'headers' => array(),
621 + 'body' => $values_array,
622 + 'cookies' => array()
623 + );
624 + $response = wp_remote_post($url,$arguments);
625 +
626 + $received_data = json_decode( wp_remote_retrieve_body($response) ,true);
627 +
628 +
629 +
630 +
631 + if( isset($response['response']['code']) && $response['response']['code']=='200'){
632 + $hls_to_return = trim($received_data);
633 +
634 +
635 + set_transient( $transient_name, $hls_to_return, 60 );
636 + return $hls_to_return;
637 + }else{
638 + return 'failed connection';
1005 639 }
640 + exit();
641 + }else{
642 + return $hls_to_return;
643 + }
1006 644
1007 - $hlsKeysUrlPrefix = get_site_url().'?wpstream_voddrm=';
1008 - $encrypt = $is_encrypt;
1009 - $debugDrm = false;
645 + }
1010 646
1011 - $curl_post_fields=array(
1012 - 'access_token' => $access_token,
1013 - 'name' => $video_name,
1014 - 'corsOrigin' => $corsorigin,
1015 - 'encryptHls' => $encrypt,
1016 - 'hlsKeysUrlPrefix' => $hlsKeysUrlPrefix,
1017 - 'debugDrm' => $debugDrm,
1018 - 'embed' => true,
1019 - );
1020 647
1021 -
1022 - $curl_response = $this->main->wpstream_live_connection->wpstream_baker_do_curl_base($url,$curl_post_fields);
1023 - $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY);
1024 648
1025 - if($curl_response_decoded['success']){
1026 - set_transient( $transient_name, $curl_response_decoded['hlsUrl'] ,300);
1027 - $hls_to_return = $curl_response_decoded['hlsUrl'];
1028 - if( isset($curl_response_decoded['hlsDecryptionKey']) && isset($curl_response_decoded['hlsDecryptionKeyIndex']) ){
1029 - update_post_meta($product_id,'hlsDecryptionKey',$curl_response_decoded['hlsDecryptionKey']);
1030 - update_post_meta($product_id,'hlsDecryptionKeyIndex',$curl_response_decoded['hlsDecryptionKeyIndex']);
1031 - }else{
1032 - delete_post_meta($product_id,'hlsDecryptionKey');
1033 - delete_post_meta($product_id,'hlsDecryptionKeyIndex');
1034 - }
649 + /**
650 + * HLS PLAYER
651 + *
652 + * @author cretu
653 + */
654 +
1035 655
1036 - if ( isset( $curl_response_decoded['video'] ) &&
1037 - isset( $curl_response_decoded['embedKey'] ) &&
1038 - isset( $curl_response_decoded['embedUrl'] )
1039 - ) {
1040 - update_post_meta( $product_id, 'wpstream_vod_video_data', trim( (string) $curl_response_decoded['video'] ) );
1041 - update_post_meta( $product_id, 'wpstream_vod_embed_key', trim( (string) $curl_response_decoded['embedKey'] ) );
1042 - update_post_meta( $product_id, 'wpstream_vod_embed_url', trim( (string) $curl_response_decoded['embedUrl'] ) );
1043 - }
1044 - }else{
1045 - return '';
1046 - }
1047 -
1048 - }
656 + public function wpstream_request_hls_player($product_id){
1049 657
1050 - return $hls_to_return;
1051 -
1052 - }
658 + $transient_name = 'hls_to_return_'.$product_id;
659 + $hls_to_return = get_transient( $transient_name );
1053 660
1054 - function wpstream_get_player_theme( $channel_id = null ) {
1055 - $player_theme = get_option('wpstream_video_player_theme');
1056 - $is_streamify_user = $this->wpstream_is_streamify_user( $channel_id );
1057 - if ( !empty($player_theme) && !$is_streamify_user ) {
1058 - $this->wpstream_enqueue_player_theme_style( $player_theme );
1059 - return 'vjs-theme-' . $player_theme;
1060 - }
661 + if ( false === $hls_to_return || $hls_to_return=='' ) {
662 +
663 + $show_id = intval($product_id);
664 + $token = $this->main->wpstream_live_connection->wpstream_get_token();
665 + $values_array = array();
666 + $values_array['show_id'] = $show_id;
1061 667
1062 - return '';
1063 - }
668 + $url = WPSTREAM_CLUBLINKSSL."://www.".WPSTREAM_CLUBLINK."/wp-json/rcapi/v1/videos/ap20_get_player_hls/?access_token=".$token;
1064 669
1065 - function wpstream_enqueue_player_theme_style( $player_theme ) {
1066 - if ( $player_theme != 'default' ) {
1067 - 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');
1068 670
1069 - }
1070 - }
671 + $arguments = array(
672 + 'method' => 'GET',
673 + 'timeout' => 45,
674 + 'redirection' => 5,
675 + 'httpversion' => '1.0',
676 + 'blocking' => true,
677 + 'headers' => array(),
678 + 'body' => $values_array,
679 + 'cookies' => array()
680 + );
681 + $response = wp_remote_post($url,$arguments);
682 +
683 + $received_data = json_decode( wp_remote_retrieve_body($response) ,true);
1071 684
1072 - /*
1073 - * Return data about the logo
1074 - */
1075 - private function wpstream_get_player_logo_data( $product_id ): array {
1076 - $player_logo_position = get_option( 'wpstream_player_logo_position', 'top-left' );
1077 - $player_logo_position_class = '';
1078 - $player_logo_horizontal_position = '';
1079 - if ( $player_logo_position && $player_logo_position != '' ) {
1080 - $player_logo_position_parts = explode( '-', $player_logo_position );
1081 - if ( isset( $player_logo_position_parts[0], $player_logo_position_parts[1] ) ) {
1082 - $player_logo_position_class = 'logo-' . $player_logo_position_parts[0];
1083 - $player_logo_horizontal_position = 'logo-' . $player_logo_position_parts[1];
1084 - }
1085 - }
685 +
686 +
687 + if( isset($response['response']['code']) && $response['response']['code']=='200'){
688 + $hls_to_return = trim($received_data);
689 + set_transient( $transient_name, $hls_to_return, 60 );
690 + return $hls_to_return = trim($received_data);
691 + }else{
692 + return 'failed connection';
693 + }
694 + exit();
695 + }else{
696 + return $hls_to_return;
697 + }
1086 698
1087 - $player_logo_src = $this->wpstream_get_video_player_logo( $product_id );
1088 - $player_logo_opacity = intval( esc_html( get_option('wpstream_player_logo_opacity','100') ) ) / 100;
699 + }
1089 700
1090 - return array(
1091 - 'player_logo_src' => $player_logo_src,
1092 - 'player_logo_position' => $player_logo_position,
1093 - 'player_logo_position_class' => $player_logo_position_class,
1094 - 'player_logo_horizontal_position' => $player_logo_horizontal_position,
1095 - 'player_logo_opacity' => $player_logo_opacity,
1096 - );
1097 - }
1098 701
1099 -
1100 -
702 +
1101 703 /**
1102 704 * VODPlayer uri details
1103 705 *
1104 706 * @author cretu
@@ -1111,30 +713,38 @@
1111 713 * 1 - free live channel
1112 714 * 2 - free video encrypted
1113 715 * 3 - free video -not encrypted
1114 716 */
1115 -
1116 - $post_type = get_post_type($product_id);
1117 717 $free_video_type = intval( get_post_meta($product_id, 'wpstream_product_type', true));
1118 - $video_path_final = '';
1119 - $video_type = '';
1120 - if( ( $post_type =='wpstream_product_vod' && $free_video_type==2 ) || get_post_type($product_id)=='product' ){
718 +
719 +
720 + if($free_video_type==2 || get_post_type($product_id)=='product' ){
1121 721
1122 - /*
1123 - * IF vide is encrypted- readed from vod,streaner
1124 - *
1125 - */
1126 -
722 + /* IF vide is encrypted- readed from vod,streaner
723 + */
1127 724
1128 725 $video_type = 'application/x-mpegURL';
1129 726 $video_path = get_post_meta($product_id,'_movie_url',true);
1130 - if(get_post_type($product_id)=='wpstream_product_vod'){
727 + if(get_post_type($product_id)=='wpstream_product'){
1131 728 $video_path = esc_html(get_post_meta($product_id, 'wpstream_free_video', true));
1132 729 }
1133 - $video_path_final = $this->wpstream_request_video_on_demand_hls_player($video_path,$product_id);
1134 730
731 + $username = esc_html ( get_option('wpstream_api_username','') );
732 + if (filter_var($username, FILTER_VALIDATE_EMAIL)) {
733 + $username = $this->wpstream_retrive_username();
734 + }
735 +
736 + if(strpos($username,'@')!=false){
737 + $username_array= explode('@', $username);
738 + $username=$username_array[0];
739 + }
740 +
741 + $video_path_final = 'https://vod.streamer.wpstream.net/'.$username.'/'.$video_path.'/index.m3u8?'.get_site_url();
742 + if(!is_ssl()){
743 + $video_path_final = 'http://vod.streamer.wpstream.net/'.$username.'/'.$video_path.'/index.m3u8?'.get_site_url();
744 + }
1135 745
1136 - }else if( $post_type =='wpstream_product_vod' && $free_video_type==3 ){
746 + }else if($free_video_type==3){
1137 747
1138 748 /* Video is unecrypted - read from local or youtube / vimeo
1139 749 */
1140 750
@@ -1139,17 +749,24 @@
1139 749 */
1140 750
1141 751 $video_type = 'video/mp4';
1142 752 $video_path_final=esc_html(get_post_meta($product_id, 'wpstream_free_video_external', true));
1143 - wp_enqueue_script('youtube.min');
753 +
754 + if (strpos($video_path_final, 'www.youtube') !== false) {
755 + $wpstream_data_setup= ' data-setup=\'{ "techOrder": ["youtube"], "sources": [{ "type": "video/youtube", "src": "'.$video_path_final.'"}] }\' ';
756 + $video_path_final='';
757 + }
758 + if (strpos($video_path_final, 'vimeo.com') !== false) {
759 + $wpstream_data_setup= ' data-setup=\'{"techOrder": ["vimeo"], "sources": [{ "type": "video/vimeo", "src": "'.$video_path_final.'"}], "vimeo": { "color": "#fbc51b"} }\' ';
760 + $video_path_final='';
761 + }
762 +
1144 763 }
1145 764
1146 - $return_array = array();
765 + $return_array=array();
1147 766 $return_array['video_path_final'] = $video_path_final;
1148 767 $return_array['wpstream_data_setup']= $wpstream_data_setup;
1149 768 $return_array['video_type'] = $video_type;
1150 - $return_array['free_video_type'] = $free_video_type;
1151 - $return_array['post_type'] = $post_type ;
1152 769 return $return_array;
1153 770 }
1154 771
1155 772
@@ -1160,688 +777,120 @@
1160 777 * @author cretu
1161 778 */
1162 779
1163 780 public function wpstream_video_on_demand_player($product_id){
1164 - wp_enqueue_script('video.min');
1165 - wp_enqueue_script('wpstream-player');
1166 - wp_enqueue_script( 'wpstream-player-controls' );
781 +
782 + $uri_details = $this->wpstream_video_on_demand_player_uri_request($product_id);
783 + $video_path_final = $uri_details['video_path_final'];
784 + $wpstream_data_setup = $uri_details['wpstream_data_setup'];
785 + $video_type = $uri_details['video_type'];
786 +
787 + $thumb_id = get_post_thumbnail_id($product_id);
788 + $thumb = wp_get_attachment_image_src($thumb_id,'small');
789 + $usernamestream = esc_html ( get_option('wpstream_api_username','') );
790 +
791 + $pack = $this->main->wpstream_live_connection->wpstream_request_pack_data_per_user();
792 +
793 + if(isset($pack['band']) && $pack['band']>0){
794 + 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"
795 + poster="'.$thumb[0].'" '.$wpstream_data_setup.'>
1167 796
1168 - wp_localize_script(
1169 - 'wpstream-player-controls',
1170 - 'wpstreamLiveUiConfig',
1171 - $this->wpstream_get_player_i18n_config()
1172 - );
1173 -
1174 - $player_theme = $this->wpstream_get_player_theme( $product_id );
1175 -
1176 - $uri_details = $this->wpstream_video_on_demand_player_uri_request($product_id);
1177 - $video_path_final = $uri_details['video_path_final'];
1178 - $wpstream_data_setup = $uri_details['wpstream_data_setup'];
1179 - $video_type = $uri_details['video_type'];
1180 - $now = time().rand(0,1000000);
1181 -
1182 - $overlay_video_div_id = "random_id_".$now;
1183 - $this->wpstream_render_vod_title_overlay(
1184 - $overlay_video_div_id,
1185 - get_the_title($product_id)
1186 - );
1187 -
1188 - $thumb_id = get_post_thumbnail_id($product_id);
1189 - $thumb = wp_get_attachment_image_src($thumb_id,'small');
1190 - $usernamestream = esc_html ( get_option('wpstream_api_username','') );
1191 -
1192 - $poster_thumb = '';
1193 - if(isset($thumb[0])){
1194 - $poster_thumb=$thumb[0];
1195 - }
1196 -
1197 - $hlsDecryptionKey = get_post_meta($product_id,'hlsDecryptionKey',true);
1198 - $hlsDecryptionKeyIndex = get_post_meta($product_id,'hlsDecryptionKeyIndex',true);
1199 -
1200 -
1201 - $pack = $this->main->quota_manager->get_live_quota_data( 'wpstream_video_on_demand_player' );
1202 -
1203 -
1204 -
1205 - $trailer_attachment_id = intval (get_post_meta( $product_id, 'video_trailer', true ));
1206 - $video_trailer = '';
1207 - $video_trailer_type = '';
1208 - if($trailer_attachment_id!=0) {
1209 - $video_trailer = wp_get_attachment_url( $trailer_attachment_id );
1210 - $attachment_metadata = wp_get_attachment_metadata($trailer_attachment_id);
1211 - if( isset ($attachment_metadata['mime_type']) ) {
1212 - $video_trailer_type = $attachment_metadata['mime_type'];
1213 - }
1214 - }
1215 -
1216 - // override trailer setup here (for testing)
1217 - // $trailer_attachment_id = 1;
1218 - // $video_trailer = '/wp-content/uploads/2023/10/production-ID_4608975.mp4';
1219 - // $video_trailer = '/wp-content/uploads/2023/10/ultrawide.mp4';
1220 -
1221 - // If the video is self hosted or external, we should let the user see it
1222 - $video_type = intval( get_post_meta($product_id, 'wpstream_product_type', true));
1223 -
1224 -
1225 - if ( $this->main->quota_manager->can_stream_vod( $pack ) || $video_type === 3 ) {
1226 -
1227 - if($video_path_final==''){
1228 - if( $uri_details['post_type']=='wpstream_product_vod' && $uri_details['free_video_type']==3 ){
797 + <source src="'.trim($video_path_final).'" type="'.$video_type.'">
798 + <p class="vjs-no-js">
799 + To view this video please enable JavaScript, and consider upgrading to a web browser that
800 + <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
801 + </p>
802 + </video>';
1229 803 }else{
1230 - print '<div class="wpstream_vod_notice">This video does not exist or it has been deleted!</div>';
804 + print esc_html_e('Insufficient resources to stream this title','wpstream');
1231 805 }
1232 806
1233 - }
1234 -
1235 - // TODO (crerem) populate these from VOD settings
1236 - $autoplay = false;
1237 - $muted = false;
1238 -
1239 - $wpstream_vod_start_muted = intval ( get_option('wpstream_vod_start_muted','') );
1240 - if($wpstream_vod_start_muted===1){
1241 - $muted=true;
1242 - }
1243 - $wpstream_vod_autoplay = intval ( get_option('wpstream_vod_autoplay','') );
1244 - if($wpstream_vod_autoplay===1){
1245 - $autoplay=true;
1246 - }
1247 -
1248 - $poster_data = 'poster="'.esc_url($poster_thumb).'"';
1249 - $has_trailer_class='';
1250 - if($trailer_attachment_id !=0){
1251 - $poster_data=''; // cancel poster for theme
1252 - $has_trailer_class='wpstream_theme_player_has_trailer';
1253 - }
1254 -
1255 - $player_logo_data = $this->wpstream_get_player_logo_data( $product_id );
1256 - $player_logo_image = $player_logo_data['player_logo_src'];
1257 - $player_logo_position = $player_logo_data['player_logo_position'];
1258 - $player_logo_position_class = $player_logo_data['player_logo_position_class'];
1259 - $player_logo_horizontal_position = $player_logo_data['player_logo_horizontal_position'];
1260 - $player_logo_opacity = $player_logo_data['player_logo_opacity'];
1261 -
1262 - $captionsUrl = get_post_meta( $product_id, 'wpstream_closed_captions_file', true );
1263 - $play_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_play_trailer_btn_' . $now : '';
1264 - $mute_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_mute_trailer_btn_' . $now : '';
1265 - $unmute_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_unmute_trailer_btn_' . $now : '';
1266 - $play_video_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_play_video_btn_' . $now : '';
1267 -
1268 - $wpstream_vod_encrypt = intval( get_option( 'wpstream_vod_encrypt', '' ) );
1269 - $wpstream_vod_lock_to_website = intval( get_option( 'wpstream_vod_domain_lock', '' ) );
1270 -
1271 - $wpstream_session_encryption = 0;
1272 - $local_event_options = get_option('wpstream_user_streaming_global_channel_options') ;
1273 - if(isset($local_event_options['ses_encrypt']) && intval($local_event_options['ses_encrypt'])==1 ) {
1274 - $wpstream_session_encryption = 1;
1275 - }
1276 -
1277 - /**
1278 - * 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".
1279 - * Embed keys must be minted with the same inputs as the iframe query (video, validatePlaybackSessionUrl, embedAncestor, encrypt) per player embed-key.js.
1280 - *
1281 - * @see WPStream player embed-key.js and session-validation.js (verifyPlaybackSessionUrl).
1282 - */
1283 - $vod_validate_url = '';
1284 - if ( $wpstream_session_encryption ) {
1285 - $vod_validate_url = esc_url_raw(
1286 - apply_filters(
1287 - 'wpstream_vod_validate_playback_session_url',
1288 - $this->playback_session->wpstream_get_default_validate_playback_session_url(),
1289 - $product_id
1290 - )
1291 - );
1292 - wp_localize_script(
1293 - 'wpstream-player-controls',
1294 - 'wpstreamVodIframeSessionApi',
1295 - array(
1296 - 'requirePlaybackSession' => true,
1297 - 'nonce' => wp_create_nonce( 'wpstream_playback_session_issue' ),
1298 - 'productId' => (int) $product_id,
1299 - 'ajaxUrl' => admin_url( 'admin-ajax.php' ),
1300 - )
1301 - );
1302 - }
1303 -
1304 - $vod_embed_ancestor = '';
1305 - if ( $wpstream_vod_lock_to_website ) {
1306 - $vod_embed_ancestor = esc_url_raw(
1307 - apply_filters(
1308 - 'wpstream_vod_embed_ancestor',
1309 - $this->wpstream_get_site_origin_for_embed(),
1310 - $product_id
1311 - )
1312 - );
1313 - }
1314 -
1315 - // if there's "wpstream_vod_embed_url" set, it means that we use the new player
1316 - $wpstream_vod_embed_url = get_post_meta( $product_id, 'wpstream_vod_embed_url', true );
1317 -
1318 - $vod_iframe_base = WPSTREAM_PLAYER . "/player/vod?";
1319 - $vod_iframe_video_raw = (string) get_post_meta( $product_id, 'wpstream_vod_video_data', true );
1320 - $vod_iframe_video = trim( $vod_iframe_video_raw );
1321 - if ( strlen( $vod_iframe_video ) >= 2 ) {
1322 - $first_char = $vod_iframe_video[0];
1323 - $last_char = substr( $vod_iframe_video, -1 );
1324 - $is_wrapped_in_double_quotes = '"' === $first_char && '"' === $last_char;
1325 - $is_wrapped_in_single_quotes = "'" === $first_char && "'" === $last_char;
1326 - if ( $is_wrapped_in_double_quotes || $is_wrapped_in_single_quotes ) {
1327 - $vod_iframe_video = substr( $vod_iframe_video, 1, -1 );
1328 - }
1329 - }
1330 - $vod_iframe_embed_key = $this->wpstream_generate_player_embed_key(
1331 - $vod_iframe_video,
1332 - $vod_validate_url,
1333 - $vod_embed_ancestor,
1334 - $wpstream_vod_encrypt ? 'yes' : ''
1335 - );
1336 - if ( '' === $vod_iframe_embed_key ) {
1337 - $vod_iframe_embed_key = (string) get_post_meta( $product_id, 'wpstream_vod_embed_key', true );
1338 - }
1339 - $vod_iframe_trailer_embed_key = $this->wpstream_generate_player_embed_key(
1340 - $video_trailer,
1341 - $vod_validate_url,
1342 - $vod_embed_ancestor,
1343 - $wpstream_vod_encrypt ? 'yes' : ''
1344 - );
1345 -
1346 - $vod_poster_image = get_the_post_thumbnail_url( $product_id, 'full' );
1347 - $current_active_theme = wp_get_theme();
1348 -
1349 - $vod_iframe_skin_slug = '';
1350 - if ( preg_match( '/^vjs-theme-(city|fantasy|forest|sea)$/', $player_theme, $vod_iframe_skin_m ) ) {
1351 - $vod_iframe_skin_slug = $vod_iframe_skin_m[1];
1352 - }
1353 -
1354 - $vod_iframe_query_args = array_filter(
1355 - array(
1356 - 'video' => $vod_iframe_video,
1357 - 'posterImage' => $vod_poster_image,
1358 - 'embedKey' => $vod_iframe_embed_key,
1359 - 'startMuted' => $muted ? '1' : '',
1360 - 'skin' => $vod_iframe_skin_slug,
1361 - 'encrypt' => $wpstream_vod_encrypt ? 'yes' : '',
1362 - 'validatePlaybackSessionUrl' => $vod_validate_url,
1363 - 'embedAncestor' => $vod_embed_ancestor,
1364 - 'logoImage' => $player_logo_image,
1365 - 'logoPosition' => $player_logo_image ? $player_logo_position : '',
1366 - 'logoOpacity' => $player_logo_image ? $player_logo_opacity : '',
1367 - 'isThemeActive' => $current_active_theme->get('Name') === 'Hello WPStream',
1368 - ),
1369 - static function ( $v ) {
1370 - return $v !== null && $v !== '';
1371 - }
1372 - );
1373 -
1374 - $vod_trailer_iframe_query_args = array_filter(
1375 - array(
1376 - 'video' => $video_trailer,
1377 - 'embedKey' => $vod_iframe_trailer_embed_key,
1378 - 'skin' => $vod_iframe_skin_slug,
1379 - 'startMuted' => $muted ? '1' : '',
1380 - 'encrypt' => $wpstream_vod_encrypt ? 'yes' : '',
1381 - 'validatePlaybackSessionUrl' => $vod_validate_url,
1382 - 'embedAncestor' => $vod_embed_ancestor,
1383 - ),
1384 - static function ( $v ) {
1385 - return $v !== null && $v !== '';
1386 - }
1387 - );
1388 -
1389 - if ( $wpstream_vod_embed_url ) {
1390 - echo '<div class="wpstream_player_iframe_wrap">';
1391 - echo '<iframe id="playerFrame"
1392 - class="wpstream_video_on_demand_iframe"
1393 - title="' . esc_attr__( 'Embedded content', 'wpstream' ) . '"
1394 - src="' . esc_url( add_query_arg( $vod_iframe_query_args, $vod_iframe_base ) ) . '"
1395 - data-wpstream-frame-role="content"
1396 - allowfullscreen
1397 - allow="autoplay; fullscreen">
1398 - </iframe>';
1399 - if ( $trailer_attachment_id != 0 && get_template() == 'hello-wpstream' ) {
1400 - echo '<iframe id="playerFrameTrailer"
1401 - class="wpstream_video_on_demand_iframe wpstream_video_on_demand_iframe_trailer"
1402 - title="' . esc_attr__( 'Embedded trailer content', 'wpstream' ) . '"
1403 - src="' . esc_url( add_query_arg( $vod_trailer_iframe_query_args, $vod_iframe_base ) ) . '"
1404 - data-wpstream-frame-role="trailer"
1405 - allowfullscreen
1406 - allow="autoplay; fullscreen"
1407 - style="display:none;"
1408 - aria-hidden="true"
1409 - tabindex="-1">
1410 - </iframe>';
1411 - }
1412 - echo '</div>';
1413 - } else {
1414 - 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"
1415 - '. $poster_data.' '.$wpstream_data_setup.'>
1416 - <p class="vjs-no-js">
1417 - To view this video please enable JavaScript, and consider upgrading to a web browser that
1418 - <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
1419 - </p>
1420 - </video>';
1421 -
1422 - if($trailer_attachment_id !=0){
1423 - print '<div class="wpstream_theme_trailer_wrapper">';
1424 - print '<div id="'.esc_attr( $play_trailer_button_element_id ).'" class="wpstream_video_on_demand_play_trailer">
1425 - <svg width="30" height="24" viewBox="0 0 30 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1426 - <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"/>
1427 - </svg>
1428 - '.esc_html__('Play Trailer','wpstream').'</div>';
1429 -
1430 - print '<div class="wpstream_video_on_demand_play_video_wrapper" id="'.esc_attr( $play_video_button_element_id ).'" >
1431 - <div class="wpstream_video_on_demand_play_video">
1432 - <svg width="29" height="30" viewBox="0 0 29 30" fill="none" xmlns="http://www.w3.org/2000/svg">
1433 - <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"/>
1434 - </svg>
1435 - </div>
1436 - '.esc_html__('Play Video','wpstream').'
1437 - </div>';
1438 -
1439 -
1440 -
1441 - print '<div id="'.esc_attr( $mute_trailer_button_element_id ).'" class="wpstream_video_on_demand_mute_trailer">
1442 -
1443 - <svg width="37" height="36" viewBox="0 0 37 36" fill="none" xmlns="http://www.w3.org/2000/svg">
1444 - <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"/>
1445 - </svg>
1446 - </div>';
1447 - print '<div id="'.esc_attr( $unmute_trailer_button_element_id ).'" class="wpstream_video_on_demand_unmute_trailer">
1448 - <svg width="33" height="32" viewBox="0 0 33 32" fill="none" xmlns="http://www.w3.org/2000/svg">
1449 - <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"/>
1450 - </svg>
1451 -
1452 - </div>';
1453 - print '</div>';
1454 - }
1455 - }
1456 - }else{
1457 - print '<div class="wpstream_insuficent_res">'.esc_html__('Insufficient resources to stream this title','wpstream').'</div>';
1458 - }
1459 -
1460 807 }
1461 808
1462 809
1463 810
1464 - /**
1465 - * VODPlayer url - only trailer - used in theme
1466 - *
1467 - * @author cretu
1468 - */
1469 - public function wpstream_video_on_demand_player_only_trailer($product_id){
1470 - wp_enqueue_script('video.min');
1471 - wp_enqueue_script('wpstream-player');
1472 -
1473 - $player_theme = $this->wpstream_get_player_theme();
1474 - $now = time().rand(0,1000000);
1475 - $overlay_video_div_id = "random_id_".$now;
1476 - $this->wpstream_render_vod_title_overlay(
1477 - $overlay_video_div_id,
1478 - get_the_title($product_id)
1479 - );
1480 -
1481 -
1482 -
1483 - $thumb_id = get_post_thumbnail_id($product_id);
1484 - $thumb = wp_get_attachment_image_src($thumb_id,'small');
1485 - $usernamestream = esc_html ( get_option('wpstream_api_username','') );
1486 -
1487 - $poster_thumb = '';
1488 - if(isset($thumb[0])){
1489 - $poster_thumb=$thumb[0];
1490 - }
1491 -
1492 -
1493 - $trailer_attachment_id = intval (get_post_meta( $product_id, 'video_trailer', true ));
1494 - $video_trailer = '';
1495 - $video_trailer_type = '';
1496 - if($trailer_attachment_id!=0) {
1497 - $video_trailer = wp_get_attachment_url( $trailer_attachment_id );
1498 - $attachment_metadata = wp_get_attachment_metadata($trailer_attachment_id);
1499 - if(isset($attachment_metadata['mime_type'])){
1500 - $video_trailer_type = $attachment_metadata['mime_type'];
1501 - }
1502 -
1503 - }
1504 -
1505 -
1506 - $autoplay = false;
1507 - $muted = false;
1508 -
1509 - if( intval ( get_option('wpstream_vod_start_muted','') ) === 1){
1510 - $muted = true;
1511 - }
1512 - if( intval ( get_option('wpstream_vod_autoplay','') ) === 1 ){
1513 - $autoplay = true;
1514 - }
1515 - $video_path_final='';
1516 - $has_trailer_class='wpstream_theme_player_has_trailer';
1517 - $captions_url = get_post_meta( $product_id, 'wpstream_closed_captions_file', true );
1518 - $play_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_play_trailer_btn_' . $now : '';
1519 - $mute_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_mute_trailer_btn_' . $now : '';
1520 - $unmute_trailer_button_element_id = $trailer_attachment_id != 0 ? 'wpstream_video_on_demand_unmute_trailer_btn_' . $now : '';
1521 -
1522 - 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"
1523 - >
1524 - <p class="vjs-no-js">
1525 - To view this video please enable JavaScript, and consider upgrading to a web browser that
1526 - <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
1527 - </p>
1528 - </video>';
1529 -
1530 - if($trailer_attachment_id !=0){
1531 - print '<div class="wpstream_theme_trailer_wrapper">';
1532 - print '<div id="'.esc_attr( $play_trailer_button_element_id ).'" class="wpstream_video_on_demand_play_trailer">
1533 - <svg width="30" height="24" viewBox="0 0 30 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1534 - <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"/>
1535 - </svg>
1536 - '.esc_html__('Play Trailer','wpstream').'
1537 - </div>';
1538 - print '<div id="'.esc_attr( $mute_trailer_button_element_id ).'" class="wpstream_video_on_demand_mute_trailer">
1539 - <svg width="37" height="36" viewBox="0 0 37 36" fill="none" xmlns="http://www.w3.org/2000/svg">
1540 - <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"/>
1541 - </svg>
1542 -
1543 -
1544 - </div>';
1545 - print '<div id="'.esc_attr( $unmute_trailer_button_element_id ).'" class="wpstream_video_on_demand_unmute_trailer">
1546 - <svg width="33" height="32" viewBox="0 0 33 32" fill="none" xmlns="http://www.w3.org/2000/svg">
1547 - <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"/>
1548 - </svg>
1549 -
1550 - </div>';
1551 - print '</div>';
1552 - }
1553 - else {
1554 - //just show the poster or don't show anything; no player needed
1555 - }
1556 -
1557 - }
1558 -
1559 811
1560 812
813 +
1561 814 /**
1562 - *
1563 - * edited 4.0
1564 - *
1565 815 * Retreive username for vod path
1566 816 *
1567 817 * @author cretu
1568 818 */
1569 819 private function wpstream_retrive_username(){
1570 -
1571 - return get_option('wpstream_api_username_from_token');
1572 - }
820 + $token = $this->main->wpstream_live_connection->wpstream_get_token();
1573 821
1574 - /**
1575 - * Render title overlay via action hook.
1576 - *
1577 - * @param string $overlay_id Overlay element id.
1578 - * @param string $title_text Title text.
1579 - */
1580 - private function wpstream_render_vod_title_overlay( $overlay_id, $title_text ) {
1581 - if ( has_action( 'wpstream_vod_title_overlay' ) ) {
1582 - do_action(
1583 - 'wpstream_vod_title_overlay',
1584 - $overlay_id,
1585 - $title_text,
1586 - esc_html__( 'Playing:', 'wpstream' )
1587 - );
822 + $url=WPSTREAM_CLUBLINKSSL."://www.".WPSTREAM_CLUBLINK."/wp-json/rcapi/v1/return_login/?access_token=".$token;
823 + $arguments = array(
824 + 'method' => 'GET',
825 + 'timeout' => 45,
826 + 'redirection' => 5,
827 + 'httpversion' => '1.0',
828 + 'blocking' => true,
829 + 'headers' => array(),
830 + 'cookies' => array()
831 + );
832 + $response = wp_remote_post($url,$arguments);
833 + $received_data = json_decode( wp_remote_retrieve_body($response) ,true);
834 + if( isset($response['response']['code']) && $response['response']['code']=='200'){
835 + return ($received_data); die();
836 + }else{
837 + print 'Failed to conbect media server';
838 + die();
1588 839 }
1589 - }
840 + }
1590 841
1591 - /**
1592 - * check if the we can add display the player
1593 - *
1594 - * @since 3.12
1595 - * returns html of the player
1596 - */
1597 842
1598 - public function wpstream_check_if_player_can_dsplay($product_id){
1599 - if ( is_user_logged_in() ) {
1600 -
1601 - $term_list = wp_get_post_terms($product_id, 'product_type');
1602 - $current_user = wp_get_current_user();
1603 - $subscription_model = intval( get_option('wpstream_global_sub','')) ;
1604 -
1605 - $product = wc_get_product($product_id);
1606 - $product_type = $product->get_type();
1607 -
1608 843
1609 - if($subscription_model==1){ // if we have Neflix mode
1610 - if( $product_type=='subscription' ){ // if the product loaded is a subscription and we are on netflix mode
1611 - return false;
1612 - }
1613 - if($this->wpstream_in_plugin_check_global_subscription_model($product_id)){
1614 - return true;
1615 - }
1616 - }else{
1617 - // ppv mode
1618 -
1619 - if( $product_type=='subscription' ){
1620 -
1621 -// $user_subscriptions = wcs_get_users_subscriptions($current_user->ID );
1622 -// foreach ($user_subscriptions as $subscription) {
1623 -// $subscription_status = $subscription->get_status();
1624 -// echo "</br>*** Subscription ID $subscription->ID for User ID $current_user->ID has status: $subscription_status";
1625 -// }
1626 -
1627 844
1628 - if( wcs_user_has_subscription( $current_user->ID, $product_id ,'active') ) {
1629 - // user has active subcription
1630 - return true;
1631 - }
1632 -
1633 - }else{
1634 - if( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product_id)){
1635 - return true;
1636 - }
1637 - }
1638 -
1639 -
1640 - }
1641 - return false;
1642 -
1643 - }
1644 - return false;
1645 845
1646 - }
1647 -
1648 -
846 + /**
847 + * check if the user bought the product and display the player - TO REDo
848 + *
849 + * @since 3.0.1
850 + * returns html of the player
851 + */
852 + public function wpstream_user_logged_in_product_already_bought($from_sh_id='') {
1649 853
1650 - /**
1651 - * check if the we can add display the player - theme variant
1652 - *
1653 - * @since 3.12
1654 - * returns html of the player
1655 - */
1656 - public function wpstream_check_if_player_can_dsplay_theme($product_id){
1657 -
1658 - $post_type= get_post_type($product_id);
1659 -
854 + if ( is_user_logged_in() ) {
855 + global $product;
856 + $current_user = wp_get_current_user();
857 + $product_id = $product->get_id();
1660 858
1661 -
1662 - if($post_type=='wpstream_product_vod' || $post_type=='wpstream_product'){
1663 - return true; // if we have free vod or live
1664 - }
1665 859
860 + if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product_id) || ( function_exists('wcs_user_has_subscription') && wcs_user_has_subscription( $current_user->ID, $product_id ,'active') ) ){
1666 861
1667 862
1668 - if ( is_user_logged_in() && $post_type==='product' ) {
1669 -
1670 - $product = wc_get_product( $product_id );
1671 - $product_type = $product->get_type();
1672 - $possible_bundle = get_post_meta($product_id, 'wpstream_part_of_bundle',true);
1673 -
863 + echo '<div class="wpstream_player_wrapper"><div class="wpstream_player_container">';
1674 864
1675 -
1676 -
1677 -
1678 - $current_user = wp_get_current_user();
1679 - $subscription_model = intval( get_option('wpstream_global_sub','')) ;
1680 - // print 'subscription model '.$subscription_model.'</br>';
1681 -
1682 - if($subscription_model==1){ // if we have Neflix mode
1683 - if( $product_type=='subscription' ){ // if the product loaded is a subscription and we are on netflix mode
1684 - return false;
1685 - }
1686 - if($this->wpstream_in_plugin_check_global_subscription_model($product_id)){
1687 - return true;
1688 - }
1689 - }else{
1690 - // ppv mode
1691 - if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product_id) ){
1692 - return true; //simple product bought
1693 - }else if (function_exists('wcs_user_has_subscription') && wcs_user_has_subscription( $current_user->ID, $product_id ,'active') ){
1694 - return true; // subscription boght
1695 - }else if( get_post_type($product_id) =='product' &&
1696 - intval($possible_bundle )!=0 &&
1697 - wc_customer_bought_product( $current_user->user_email, $current_user->ID, $possible_bundle)
1698 - ){
1699 - return true; // part of a boght bundle
1700 - }
1701 - }
1702 - // print ' fac return false </br>';
1703 - return false;
1704 -
1705 - }
1706 - return false;
1707 -
1708 - }
1709 -
1710 -
1711 - /**
1712 - * in plugin - check if global subscription model is enabled
1713 - *
1714 - * @since 3.12
1715 - *
1716 - */
1717 - public function wpstream_in_plugin_check_global_subscription_model($product_id) {
1718 -
1719 - // $selected_sub= get_post_meta($post->ID,'_wpstream_parent_sub',true);
1720 - if( is_user_logged_in() && function_exists('wcs_user_has_subscription') ){
1721 -
1722 - global $woocommerce;
1723 - $current_user = wp_get_current_user();
1724 -
1725 - $subscription_model = intval( get_option('wpstream_global_sub','')) ;
1726 - $main_subscription = intval( get_option('wpstream_global_sub_id',''));
1727 -
1728 - if($subscription_model==1){
1729 - $selected_sub= get_post_meta($product_id,'_wpstream_parent_sub',true) ;
1730 -
1731 - if( is_array($selected_sub) ){
1732 -
1733 - // we have per product sub
1734 - foreach($selected_sub as $key=>$subscrition_id ):
1735 - if( wcs_user_has_subscription( $current_user->ID, $subscrition_id ,'active') ) {
1736 - return true;
1737 - }
1738 - endforeach;
1739 -
1740 - } else if($main_subscription!=0){
1741 -
1742 - // if we have one main subscription
1743 - if( wcs_user_has_subscription( $current_user->ID, $main_subscription ,'active') ) {
1744 - return true;
1745 - }
1746 - }
1747 -
1748 -
1749 - }
1750 - return false;
1751 -
1752 - }
1753 - // there is no woo subscription or user not logged in
1754 - return false;
1755 - }
1756 -
1757 -
1758 -
1759 -
1760 -
1761 -
1762 -
1763 -
1764 -
1765 - /**
1766 - *
1767 - *
1768 - *
1769 - *
1770 - * check if the user bought the product and display the player - TO REDo
1771 - *
1772 - * @since 3.0.1
1773 - * returns html of the player
1774 - *
1775 - *
1776 - *
1777 - *
1778 - *
1779 - */
1780 - public function wpstream_user_logged_in_product_already_bought($from_sh_id='') {
1781 - if(function_exists('wpstream_remove_wpstream_filter')){
1782 - return;
1783 - }
1784 - global $product;
1785 - $product_id = $product->get_id();
1786 - $current_user = wp_get_current_user();
1787 - $term_list = wp_get_post_terms($product_id, 'product_type');
1788 -
1789 - $is_simple_subscription = get_post_meta($product_id, '_subscript_live_event');
1790 - if ( $term_list[0]->name == 'subscription' && ! empty( $is_simple_subscription ) && $is_simple_subscription[0] == 'none' ) {
1791 - return;
1792 - }
1793 -
1794 - if ( is_user_logged_in() ) {
1795 - if($this->wpstream_check_if_player_can_dsplay($product_id) ){
1796 -
1797 - echo '<div class="wpstream_player_wrapper "><div class="wpstream_player_container">';
1798 -
1799 865 $is_subscription_live_event = esc_html(get_post_meta($product_id,'_subscript_live_event',true));
1800 -
866 + $term_list = wp_get_post_terms($product_id, 'product_type');
1801 867
1802 868
1803 869 if( $term_list[0]->name=='live_stream' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='yes' ) ){
1804 870 $this->wpstream_live_event_player($product_id);
1805 871 }else if( $term_list[0]->name=='video_on_demand' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='no' ) ){
1806 -
1807 872 $this->wpstream_video_on_demand_player($product_id);
1808 873 }
1809 874 echo '</div></div>';
1810 - } else {
1811 - if( $term_list[0]->name=='subscription' ){
1812 -
1813 - if( !wcs_user_has_subscription( $current_user->ID, $product_id ,'active') ) {
1814 - $this->wpstream_display_no_buy_message('nobuy',$product_id);
1815 - }
1816 -
1817 - }else{
1818 - $this->wpstream_display_no_buy_message('nobuy',$product_id);
875 + }else{
876 + if( get_post_type($product_id) == 'wpstream_product' ){
877 + echo '<div class="wpstream_player_wrapper no_buy"><div class="wpstream_player_container">';
878 + echo '<div class="wpstream_notice">'.__('You did not buy this product!','wpstream').'</div>';
879 + echo '</div></div>';
1819 880 }
1820 -
1821 -
1822 -
1823 881 }
1824 882
1825 883
1826 - }else{
1827 -
1828 - $this->wpstream_display_no_buy_message('nolog',$product_id);
1829 884 }
1830 885 }
1831 886
1832 -
1833 -
1834 -
1835 -
1836 - /**
1837 - *
1838 - *
1839 - * check if the user bought the product and display the player - TO REDo
1840 - *
1841 - * @since 3.0.1
887 + /**
888 + * check if the user bought the product and display the player - TO REDo
889 + *
890 + * @since 3.0.1
1842 891 * returns html of the player
1843 - */
892 + */
1844 893
1845 894 public function wpstream_chat_wrapper($product_id){
1846 895 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/templates/wpstream_chat_template.php';
1847 896 }
@@ -1847,23 +896,9 @@
1847 896 }
1848 897
1849 898
1850 899
1851 -
1852 -
1853 -
1854 -
1855 -
1856 - /**
1857 - * coonect to chat
1858 - *
1859 - * @since 1.12.2
1860 - *
1861 - */
1862 -
1863 -
1864 -
1865 - public function wpstream_connect_to_chat($product_id){
900 + public function wpstream_connect_to_chat($product_id){
1866 901 $current_user = wp_get_current_user();
1867 902 $userID = $current_user->ID;
1868 903 $user_login = $current_user->user_login;
1869 904
@@ -1868,9 +903,9 @@
1868 903 $user_login = $current_user->user_login;
1869 904
1870 905 $key='';
1871 906
1872 - $chat_url = get_post_meta($product_id,'chat_url',true);
907 + $chatUrl = get_post_meta($product_id,'chatUrl',true);
1873 908
1874 909
1875 910 wp_enqueue_script( 'sockjs-0.3.min' );
1876 911 wp_enqueue_script( 'emojione.min.js' );
@@ -1890,9 +925,9 @@
1890 925
1891 926
1892 927 if(!is_user_logged_in()){
1893 928 $user_login='';
1894 - $chat_url='';
929 + $chatUrl='';
1895 930 }
1896 931
1897 932
1898 933 print '<script type="text/javascript">
@@ -1905,92 +940,5 @@
1905 940 //]]>
1906 941 </script>';
1907 942
1908 943 }
1909 -
1910 -
1911 - /**
1912 - * display no buy Message
1913 - *
1914 - * @since 3.12.2
1915 - *
1916 - */
1917 - public function wpstream_display_no_buy_message($log,$product_id) {
1918 -
1919 - if($log=='sub_active'){
1920 - $message= esc_html( get_option('wpstream_subscription_active','Your Subscription is Active.')) ;
1921 - echo '<div class="wpstream_player_wrapper no_buy"><div class="wpstream_player_container">';
1922 - echo '<div class="wpstream_notice"> '.$message.'</div>';
1923 - echo '</div></div>';
1924 - return;
1925 -
1926 - }else if($log=='nolog'){
1927 - $message= esc_html( get_option('wpstream_product_not_login','You must be logged in to watch this video.')) ;
1928 - }else{
1929 - $message =esc_html( get_option('wpstream_product_not_bought','You did not yet purchase this item.')) ;
1930 - }
1931 - $subscription_model = intval( get_option('wpstream_global_sub','')) ;
1932 - if($subscription_model==1){
1933 - $message =esc_html( get_option('wpstream_product_not_subscribe','You did not yet subscribe to this item.'));
1934 - }
1935 -
1936 -
1937 - if( get_post_type($product_id) == 'product' && $subscription_model==0 ){
1938 - $product = wc_get_product($product_id);
1939 - $term_list = wp_get_post_terms($product_id, 'product_type');
1940 - $product_type = $product->get_type();
1941 - $is_subscription_live_event = esc_html(get_post_meta($product_id,'_subscript_live_event',true));
1942 -
1943 -
1944 -
1945 - if( $term_list[0]->name=='video_on_demand' || $term_list[0]->name=='live_stream' || $product_type=='subscription'){
1946 -
1947 - echo '<div class="wpstream_player_wrapper no_buy"><div class="wpstream_player_container">';
1948 - echo '<div class="wpstream_notice">'.$message.'</div>';
1949 - echo '</div></div>';
1950 -
1951 - }
1952 -
1953 - }else if( get_post_type($product_id) == 'product' && $subscription_model==1 ){
1954 - $term_list = wp_get_post_terms($product_id, 'product_type');
1955 - if( $term_list[0]->name!=='simple'){
1956 - echo '<div class="wpstream_player_wrapper no_buy"><div class="wpstream_player_container">';
1957 - echo '<div class="wpstream_notice"> '.$message.'</div>';
1958 - echo '</div></div>';
1959 - }
1960 - }
1961 - }
1962 -
1963 - /**
1964 - * Get the video player logo URL.
1965 - *
1966 - * @param int $product_id Product ID.
1967 - * @return mixed|string
1968 - */
1969 - public function wpstream_get_video_player_logo( $product_id ) {
1970 - $is_streamify_user = $this->wpstream_is_streamify_user( $product_id );
1971 - if ( $is_streamify_user ) {
1972 - return WPSTREAM_PLUGIN_DIR_URL . 'img/wpstream-symbol-large.png';
1973 - }
1974 -
1975 - $logo = get_option( 'wpstream_player_logo', '' );
1976 - if ( ! empty( $logo ) ) {
1977 - return $logo;
1978 - }
1979 -
1980 - return '';
1981 - }
1982 -
1983 - /*
1984 - * Check if the user is on a basic subscription
1985 - *
1986 - * @param int $channel_id Channel ID
1987 - * @return bool
1988 - */
1989 - public function wpstream_is_streamify_user( $channel_id ) {
1990 - $is_basic_streaming = get_post_meta( $channel_id, 'basicStreaming', true );
1991 - if ( $is_basic_streaming === '1' ) {
1992 - return true;
1993 - }
1994 - return false;
1995 - }
1996 944 }