PluginProbe
WpStream – Live Streaming, Video on Demand, Pay Per View / 4.3.3
WpStream – Live Streaming, Video on Demand, Pay Per View v4.3.3
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
wpstream / includes / class-wpstream.php

class-wpstream.php in WpStream – Live Streaming, Video on Demand, Pay Per View 4.3.3, at includes/class-wpstream.php

916 lines 34.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * The file that defines the core plugin class
5 *
6 * A class definition that includes attributes and functions used across both the
7 * public-facing side of the site and the admin area.
8 *
9 * @link http://wpstream.net
10 * @since 3.0.1
11 *
12 * @package Wpstream
13 * @subpackage Wpstream/includes
14 */
15
16 /**
17 * The core plugin class.
18 *
19 * This is used to define internationalization, admin-specific hooks, and
20 * public-facing site hooks.
21 *
22 * Also maintains the unique identifier of this plugin as well as the current
23 * version of the plugin.
24 *
25 * @since 3.0.1
26 * @package Wpstream
27 * @subpackage Wpstream/includes
28 * @author wpstream <office@wpstream.net>
29 */
30 class Wpstream {
31
32 /**
33 * Store plugin main class to allow public access.
34 *
35 * @since 3.0.1
36 * @var object The main class.
37 */
38 public $main;
39
40 /**
41 * The loader that's responsible for maintaining and registering all hooks that power
42 * the plugin.
43 *
44 * @since 3.0.1
45 * @access protected
46 * @var Wpstream_Loader $loader Maintains and registers all hooks for the plugin.
47 */
48 protected $loader;
49
50 /**
51 * The unique identifier of this plugin.
52 *
53 * @since 3.0.1
54 * @access protected
55 * @var string $plugin_name The string used to uniquely identify this plugin.
56 */
57 protected $plugin_name;
58
59 /**
60 * The current version of the plugin.
61 *
62 * @since 3.0.1
63 * @access protected
64 * @var string $version The current version of the plugin.
65 */
66 protected $version;
67
68 /**
69 * Define the core functionality of the plugin.
70 *
71 * Set the plugin name and the plugin version that can be used throughout the plugin.
72 * Load the dependencies, define the locale, and set the hooks for the admin area and
73 * the public-facing side of the site.
74 *
75 * @since 3.0.1
76 */
77
78 public $wpstream_live_connection;
79 public $wpstream_player;
80 public $xtest;
81 public $plugin_admin;
82
83 public function __construct() {
84 $this->main = $this;
85 if ( defined( 'WPSTREAM_PLUGIN_VERSION' ) ) {
86 $this->version = WPSTREAM_PLUGIN_VERSION;
87 } else {
88 $this->version = '3.0.1';
89 }
90 $this->plugin_name = 'wpstream';
91
92 $this->load_dependencies();
93 $this->set_locale();
94 $this->define_admin_hooks();
95 $this->define_public_hooks();
96
97
98 $this->wpstream_conection();
99 $this->wpstream_player();
100
101 }
102
103
104
105
106
107 public function wpstream_convert_band($megabits){
108 $gigabit = $megabits * 0.001;
109 $gigabit = number_format($gigabit,2);
110 return $gigabit;
111 }
112
113
114
115
116
117 private function wpstream_conection(){
118 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wpstream-live-api-connection.php';
119 $this->wpstream_live_connection = new Wpstream_Live_Api_Connection();
120 }
121
122
123 private function wpstream_player(){
124 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wpstream-player.php';
125 $this->wpstream_player = new Wpstream_Player($this->main);
126 }
127
128
129
130
131 /**
132 * Load the required dependencies for this plugin.
133 *
134 * Include the following files that make up the plugin:
135 *
136 * - Wpstream_Loader. Orchestrates the hooks of the plugin.
137 * - Wpstream_i18n. Defines internationalization functionality.
138 * - Wpstream_Admin. Defines all hooks for the admin area.
139 * - Wpstream_Public. Defines all hooks for the public side of the site.
140 *
141 * Create an instance of the loader which will be used to register the hooks
142 * with WordPress.
143 *
144 * @since 3.0.1
145 * @access private
146 */
147 private function load_dependencies() {
148
149 /**
150 * The class responsible for orchestrating the actions and filters of the
151 * core plugin.
152 */
153 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wpstream-loader.php';
154
155 /**
156 * The class responsible for defining internationalization functionality
157 * of the plugin.
158 */
159 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wpstream-i18n.php';
160
161 /**
162 * The class responsible for defining all actions that occur in the admin area.
163 */
164 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wpstream-admin.php';
165
166 /**
167 * The class responsible for defining all actions that occur in the public-facing
168 * side of the site.
169 */
170 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wpstream-public.php';
171
172 /**
173 * The class responsible for custom post type
174
175 */
176 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wpstream_product.php';
177 if( class_exists( 'WooCommerce' ) ){
178 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wc_product_live_stream.php';
179 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wc_product_video_on_demand.php';
180 }
181
182 $this->loader = new Wpstream_Loader();
183
184 }
185
186 /**
187 * Define the locale for this plugin for internationalization.
188 *
189 * Uses the Wpstream_i18n class in order to set the domain and to register the hook
190 * with WordPress.
191 *
192 * @since 3.0.1
193 * @access private
194 */
195 private function set_locale() {
196
197 $plugin_i18n = new Wpstream_i18n();
198
199 $this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' );
200
201 }
202
203 /**
204 * Register all of the hooks related to the admin area functionality
205 * of the plugin.
206 *
207 * @since 3.0.1
208 * @access private
209 */
210 private function define_admin_hooks() {
211
212 $this->admin= $plugin_admin = new Wpstream_Admin( $this->get_plugin_name(), $this->get_version(), $this->main );
213
214
215
216 $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' );
217 $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts' );
218 $this->loader->add_action( 'admin_menu', $plugin_admin, 'wpstream_manage_admin_menu',999);
219
220 $plugin_post_types = new Wpstream_Product();
221 $this->loader->add_action( 'init', $plugin_post_types, 'create_custom_post_type', 999 );
222
223 // save and render metaboxed
224 $this->loader->add_action( 'admin_init', $plugin_admin, 'add_wpstream_product_metaboxes' );
225 $this->loader->add_action( 'save_post', $plugin_admin, 'wpstream_free_product_update_post',1,2 );
226 $this->loader->add_action( 'publish_wpstream_product', $plugin_admin, 'wpstream_publish_wpstream_product',1,2 );
227
228
229
230 // make product virtual
231 $this->loader->add_action( 'save_post', $plugin_admin, 'wpstream_make_product_virtual', 99999, 2 );
232
233
234
235 // show streaming controls on sidebar
236 $this->loader->add_action('add_meta_boxes', $plugin_admin, 'wpstream_startstreaming_sidebar_meta');
237
238
239 $this->loader->add_action( 'admin_notices', $plugin_admin,'wpstream_admin_notice' );
240 $this->loader->add_action( 'wp_ajax_wpstream_update_cache_notice', $plugin_admin,'wpstream_update_cache_notice' );
241
242 // add and save category extra fields
243 $this->loader->add_action( 'category_edit_form_fields', $plugin_post_types, 'wpstream_category_callback_function', 10, 2);
244 $this->loader->add_action( 'category_add_form_fields', $plugin_post_types, 'wpstream_category_callback_add_function', 10, 2 );
245 $this->loader->add_action( 'created_category', $plugin_post_types, 'wpstream_category_save_extra_fields_callback', 10, 2);
246 $this->loader->add_action( 'edited_category', $plugin_post_types, 'wpstream_category_save_extra_fields_callback', 10, 2);
247
248 $this->loader->add_action( 'product_cat_edit_form_fields', $plugin_post_types, 'wpstream_category_callback_function', 10, 2);
249 $this->loader->add_action( 'product_cat_add_form_fields', $plugin_post_types, 'wpstream_category_callback_add_function', 10, 2 );
250 $this->loader->add_action( 'created_product_cat', $plugin_post_types, 'wpstream_category_save_extra_fields_callback', 10, 2);
251 $this->loader->add_action( 'edited_product_cat', $plugin_post_types, 'wpstream_category_save_extra_fields_callback', 10, 2);
252
253
254 $this->loader->add_action( 'wpstream_category_edit_form_fields', $plugin_post_types, 'wpstream_category_callback_function', 10, 2);
255 $this->loader->add_action( 'wpstream_category_add_form_fields', $plugin_post_types, 'wpstream_category_callback_add_function', 10, 2 );
256 $this->loader->add_action( 'created_wpstream_category', $plugin_post_types, 'wpstream_category_save_extra_fields_callback', 10, 2);
257 $this->loader->add_action( 'edited_wpstream_category', $plugin_post_types, 'wpstream_category_save_extra_fields_callback', 10, 2);
258
259
260 $this->loader->add_action( 'wpstream_actors_edit_form_fields', $plugin_post_types, 'wpstream_category_callback_function', 10, 2);
261 $this->loader->add_action( 'wpstream_actors_add_form_fields', $plugin_post_types, 'wpstream_category_callback_add_function', 10, 2 );
262 $this->loader->add_action( 'created_wpstream_actors', $plugin_post_types, 'wpstream_category_save_extra_fields_callback', 10, 2);
263 $this->loader->add_action( 'edited_wpstream_actors', $plugin_post_types, 'wpstream_category_save_extra_fields_callback', 10, 2);
264
265 $this->loader->add_action( 'wpstream_movie_rating_edit_form_fields', $plugin_post_types, 'wpstream_category_callback_function', 10, 2);
266 $this->loader->add_action( 'wpstream_movie_rating_add_form_fields', $plugin_post_types, 'wpstream_category_callback_add_function', 10, 2 );
267 $this->loader->add_action( 'created_wpstream_movie_rating', $plugin_post_types, 'wpstream_category_save_extra_fields_callback', 10, 2);
268 $this->loader->add_action( 'edited_wpstream_movie_rating', $plugin_post_types, 'wpstream_category_save_extra_fields_callback', 10, 2);
269
270
271
272
273 if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
274
275 $this->loader->add_filter( 'product_type_selector', $plugin_admin, 'wpstream_add_products' );
276 $this->loader->add_action( 'admin_footer', $plugin_admin, 'wpstream_products_custom_js' );
277 $this->loader->add_filter( 'woocommerce_product_data_tabs', $plugin_admin, 'wpstream_hide_attributes_data_panel',10,1 );
278 $this->loader->add_filter( 'woocommerce_is_purchasable', $plugin_admin, 'wpstream_hide_buy_now_subscription_mode',10,2);
279
280 $this->loader->add_filter( 'woocommerce_product_options_general_product_data',$plugin_admin, 'wpstream_add_custom_general_fields', 10,1);
281 $this->loader->add_filter( 'woocommerce_process_product_meta',$plugin_admin, 'wpstream_add_custom_general_fields_save',10,1 );
282 $this->loader->add_action( 'woocommerce_live_stream_add_to_cart', $plugin_admin, 'wpstream_add_to_cart',10,1);
283 $this->loader->add_action( 'woocommerce_video_on_demand_add_to_cart', $plugin_admin, 'wpstream_add_to_cart',10,1);
284 $this->loader->add_filter( 'woocommerce_loop_add_to_cart_link', $plugin_admin,'replacing_add_to_cart_button', 10, 2 );
285 }
286
287
288
289
290
291
292 }
293
294 /**
295 * Register all of the hooks related to the public-facing functionality
296 * of the plugin.
297 *
298 * @since 3.0.1
299 * @access private
300 */
301 private function define_public_hooks() {
302
303 $plugin_public = new Wpstream_Public( $this->get_plugin_name(), $this->get_version(), $this->main );
304
305 $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );
306 $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' );
307
308 $this->loader->add_action( 'init', $plugin_public,'wpstream_my_custom_endpoints' );
309 $this->loader->add_filter( 'query_vars',$plugin_public, 'wpstream_my_custom_query_vars', 0 );
310
311 //live stream action
312 $this->loader->add_action('init',$plugin_public,'wpstream_set_cookies',0);
313 $this->loader->add_action('init',$plugin_public,'wpstream_live_streaming_key');
314 $this->loader->add_action('init',$plugin_public,'wpstream_live_streaming_key_for_3rdparty');
315 $this->loader->add_action('init',$plugin_public,'wpstream_live_streaming_key_vod');
316 // woo action
317
318 $this->loader->add_action( 'woocommerce_before_single_product', $plugin_public,'wpstream_non_image_content_wrapper_start', 20 );
319 $this->loader->add_action( 'woocommerce_after_single_product', $plugin_public,'wpstream_non_image_content_wrapper_end', 20 );
320 $this->loader->add_action( 'woocommerce_thankyou_order_received_text', $plugin_public,'wpstream_thankyou_extra', 20,2 );
321 $this->loader->add_action( 'woocommerce_email_order_details', $plugin_public,'wpstream_email_order_details', 20,4 );
322
323 $this->loader->add_filter( 'woocommerce_account_menu_items', $plugin_public,'wpstream_custom_my_account_menu_items' );
324 $this->loader->add_action( 'woocommerce_account_event-list_endpoint', $plugin_public,'wpstream_custom_endpoint_content_event_list' );
325 $this->loader->add_action( 'woocommerce_account_video-list_endpoint', $plugin_public,'wpstream_custom_endpoint_video_list' );
326
327
328 $this->loader->add_action( 'after_switch_theme', $plugin_public,'wpstream_custom_flush_rewrite_rules' );
329 $this->loader->add_action('init', $plugin_public,'wpstream_shortcodes');
330 $this->loader->add_action('vc_before_init', $plugin_public,'wpstream_bakery_shortcodes');
331
332
333 $this->loader->add_action('wo_before_api', 'wpstream_cors_check_and_response',10,1);
334
335
336
337 }
338
339 /**
340 * Run the loader to execute all of the hooks with WordPress.
341 *
342 * @since 3.0.1
343 */
344 public function run() {
345 $this->loader->run();
346 }
347
348 /**
349 * The name of the plugin used to uniquely identify it within the context of
350 * WordPress and to define internationalization functionality.
351 *
352 * @since 3.0.1
353 * @return string The name of the plugin.
354 */
355 public function get_plugin_name() {
356 return $this->plugin_name;
357 }
358
359 /**
360 * The reference to the class that orchestrates the hooks with the plugin.
361 *
362 * @since 3.0.1
363 * @return Wpstream_Loader Orchestrates the hooks of the plugin.
364 */
365 public function get_loader() {
366 return $this->loader;
367 }
368
369 /**
370 * Retrieve the version number of the plugin.
371 *
372 * @since 3.0.1
373 * @return string The version number of the plugin.
374 */
375 public function get_version() {
376 return $this->version;
377 }
378
379
380
381 public function show_user_data($pack_details){
382 if( isset($pack_details['available_data_mb']) && isset( $pack_details['available_storage_mb']) ){
383 $wpstream_convert_band = $this->wpstream_convert_band($pack_details['available_data_mb']);
384 if($wpstream_convert_band<0)$wpstream_convert_band=0;
385 // print_r($pack_details);
386 $wpstream_convert_storage = $this->wpstream_convert_band($pack_details['available_storage_mb']);
387 if($wpstream_convert_storage<0)$wpstream_convert_storage=0;
388
389 print '<div class="pack_details_wrapper"><strong>'.__('Your account information: ','wpstream').'</strong> '.__('You have','wpstream').'<strong> '.$wpstream_convert_band.' Gb</strong> '.__('available streaming data and','wpstream').' <strong>'.$wpstream_convert_storage.' Gb</strong> '.__('available media storage','wpstream').'.</div>';
390 print'<input type="hidden" id="wpstream_band" value="'.$pack_details['available_data_mb'].'">';
391 print'<input type="hidden" id="wpstream_storage" value="'.$pack_details['available_storage_mb'].'">';
392
393 }
394 }
395
396
397 /**
398 * help function for media list elementor widget
399 *
400 * @since 3.0.1
401 * @return string
402 */
403
404 public function wpstream_media_list_elementor_function($attributes, $content = null){
405
406
407
408 ob_start();
409
410 $media_number=3;
411 if ( isset($attributes['media_number']) ){
412 $media_number=$attributes['media_number'];
413 }
414
415 // check if is vod or live stream
416 $meta_query = array();
417 $tax_query_array= array();
418 $tax_query = array();
419
420 // check if the media is paid or free
421 $event_types = array();
422 $product_type_free_paid = 0;
423 if ( isset($attributes['product_type_free_paid']) ){
424 $product_type_free_paid=$attributes['product_type_free_paid'];
425
426 if($product_type_free_paid==0){
427 $event_types=array('wpstream_product');
428
429 if ( isset($attributes['product_type']) && intval($attributes['product_type'])==2){
430 $event_types=array('wpstream_product_vod');
431
432
433
434 }
435
436
437
438 }else{
439 $event_types=array('product');
440 if ( isset($attributes['product_type']) ){
441 $product_type = $attributes['product_type'];
442 $product_type_slug = 'video_on_demand';
443 if($product_type==1){
444 $product_type_slug ='live_stream';
445 }
446
447 $tax_query_array = array(
448 'taxonomy' => 'product_type',
449 'field' => 'slug',
450 'terms' => $product_type_slug
451 );
452
453 $tax_query= array(
454 'relation' => 'AND',
455 $tax_query_array
456 );
457
458 }
459 }
460
461 }
462 $see_product='';
463 if(isset($attributes['free_label'])){
464 $see_product=$attributes['free_label'];
465 }
466
467 // pagination
468 $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
469 if( is_front_page() ){
470 $paged= (get_query_var('page')) ? get_query_var('page') : 1;
471 }
472
473
474 //order
475 $orderby='ID';
476 $order ='ASC';
477 if ( isset($attributes['order_by']) ){
478 $order_by=intval($attributes['order_by']);
479 switch ($order_by) {
480 case 0:
481 $orderby='ID';
482 $order ='ASC';
483 break;
484 case 1:
485 $orderby='ID';
486 $order ='DESC';
487 break;
488 case 2:
489 $orderby='title';
490 $order ='ASC';
491 break;
492 case 3:
493 $orderby='title';
494 $order ='DESC';
495 break;
496 }
497 }
498
499 // building wp_query arg array
500 $args = array(
501 'post_type' => $event_types,
502 'post_status' => 'publish',
503 'meta_query' => $meta_query,
504 'posts_per_page' => $media_number,
505 'paged' => $paged,
506 'orderby' => $orderby,
507 'order' => $order,
508 'tax_query' => $tax_query
509 );
510
511
512
513 // show live events
514 if ( isset($attributes['product_show_live']) && $attributes['product_show_live']=='yes'){
515 $live_event_for_user = $this->main->wpstream_live_connection->api20_wpstream_request_live_stream_for_user_for_shortcode('shortcode');
516
517
518 if( is_array($live_event_for_user) ){
519 $live_event_for_user[]=0;
520
521 $args['post__in']=$live_event_for_user;
522 }
523 }
524
525
526
527
528 $media_list= new WP_Query($args);
529 if($media_list->have_posts()){
530 print '<ul class="wpstream_media_list_wrapper products columns-3" >';
531 while($media_list->have_posts()):$media_list->the_post();
532 if($product_type_free_paid==0 ){
533
534 $thumb=wp_get_attachment_image_src(get_post_thumbnail_id(),'medium');
535
536 $thumb_src='';
537 if( isset($thumb[0]) ){
538 $thumb_src=$thumb[0];
539 }
540
541 if(($thumb_src)==''){
542 $thumb_src= plugin_dir_url( dirname( __FILE__ ) ). 'img/default_300.png';
543 }
544 print '<li class="wpstream_product_unit">'
545 .'<a href="'.get_permalink().'" class="product_title" ><div class="product_image" style="background-image:url('.esc_url($thumb_src).')"></div></a>'
546 .'<a href="'.get_permalink().'" class="product_title" >'.get_the_title().'</a>';
547
548 if($see_product!=''){
549 print '<a href="'.get_permalink().'"class="see_product">'.$see_product.'</a>';
550 }
551 print '</li>';
552 }else{
553 wc_get_template_part( 'content', 'product' );
554 }
555 endwhile;
556 print '</ul>';
557 }else{
558 print esc_html__('No media found! ','wpstream');
559 }
560
561
562 wp_reset_query();
563 wp_reset_postdata();
564
565 $this->wpstream_pagination($media_list->max_num_pages,$range=2);
566 $return_string= ob_get_contents();
567 ob_end_clean();
568
569 return $return_string;
570 }
571
572
573
574
575
576
577 /*
578 *
579 *
580 * Pagination for media lista
581 *
582 *
583 *
584 */
585
586
587
588
589 function wpstream_pagination($pages = '', $range = 2){
590
591 $showitems = ($range * 2)+1;
592 global $paged;
593 if(empty($paged)) $paged = 1;
594
595
596 if($pages == ''){
597 global $wp_query;
598 $pages = $wp_query->max_num_pages;
599 if(!$pages)
600 {
601 $pages = 1;
602 }
603 }
604
605 if(1 != $pages){
606 print '<ul class="wpstream_pagination ">';
607 print '<li class="roundleft"><a href="'.get_pagenum_link($paged - 1).'"> < </a></li>';
608
609 for ($i=1; $i <= $pages; $i++)
610 {
611 if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
612 {
613 if ($paged == $i){
614 print '<li class="active"><a href="'.esc_url(get_pagenum_link($i)).'" >'.$i.'</a><li>';
615 }else{
616 print '<li><a href="'.esc_url(get_pagenum_link($i)).'" >'.$i.'</a><li>';
617 }
618 }
619 }
620
621 $prev_page= get_pagenum_link($paged + 1);
622 if ( ($paged +1) > $pages){
623 $prev_page= get_pagenum_link($paged );
624 }else{
625 $prev_page= get_pagenum_link($paged + 1);
626 }
627
628
629 print '<li class="roundright"><a href="'.$prev_page.'"> > </a><li>';
630 print '</ul>';
631 }
632 }
633
634
635
636
637
638
639
640
641
642
643
644
645
646 /**
647 * help function for player elementr widget
648 *
649 * @since 3.0.1
650 * @return string
651 */
652
653 public function wpstream_insert_player_elementor($attributes, $content = null){
654 $product_id = '';
655 $return_string = '';
656 $attributes = shortcode_atts(
657 array(
658 'id' => 0,
659 'user_id' => 0,
660 ), $attributes) ;
661
662
663 if ( isset($attributes['id']) ){
664 $product_id=$attributes['id'];
665 }
666 if ( isset($attributes['user_id']) ){
667 $user_id = intval( $attributes['user_id'] );
668 }
669
670 if(intval($product_id)==0 && $user_id!=0 ){
671 $product_id= $this->wpstream_player_retrive_first_id($user_id);
672 }
673
674
675
676
677 ob_start();
678 $this->main->wpstream_player->wpstream_video_player_shortcode($product_id);
679 $return_string= ob_get_contents();
680 ob_end_clean();
681
682 return $return_string;
683 }
684
685 /**
686 * help function for player low latency elementor widget
687 *
688 * @since 3.0.1
689 * @return string
690 */
691
692 public function wpstream_insert_player__low_latency_elementor($attributes, $content = null){
693 $product_id = '';
694 $return_string = '';
695 $attributes = shortcode_atts(
696 array(
697 'id' => 0,
698 'user_id' => 0,
699 ), $attributes) ;
700
701
702 if ( isset($attributes['id']) ){
703 $product_id=$attributes['id'];
704 }
705
706 if ( isset($attributes['user_id']) ){
707 $user_id = intval( $attributes['user_id'] );
708 }
709
710 if(intval($product_id)==0 && $user_id!=0){
711 $product_id= $this->wpstream_player_retrive_first_id($user_id);
712 }
713
714
715 ob_start();
716 $this->main->wpstream_player->wpstream_video_player_shortcode_low_latency($product_id);
717 $return_string= ob_get_contents();
718 ob_end_clean();
719
720 return $return_string;
721 }
722
723
724
725 public function wpstream_player_retrive_first_id($received_user_id=''){
726 $channel_type = get_option ('wpstream_user_streaming_channel_type');
727 $product_id = $this->wpstream_get_current_event_per_author($received_user_id,$channel_type);
728 return $product_id;
729 }
730
731
732
733 /**
734 * help function for chat elementor widget
735 *
736 * @since 3.0.1
737 * @return string
738 */
739
740 public function wpstream_insert_chat_elementor($attributes, $content = null){
741 $product_id = '';
742 $return_string = '';
743 $attributes = shortcode_atts(
744 array(
745 'id' => 0,
746 ), $attributes) ;
747
748
749 if ( isset($attributes['id']) ){
750 $product_id=$attributes['id'];
751 }
752
753 $return_string.= '<div class="wpstream_plugin_chat_wrapper">';
754 ob_start();
755 $this->main->wpstream_player->wpstream_chat_wrapper($product_id);
756 $return_string.= ob_get_contents();
757 ob_end_clean();
758 $return_string.='</div>';
759 $this->main->wpstream_player->wpstream_connect_to_chat($product_id);
760
761 return $return_string;
762 }
763
764
765 /**
766 * edited 4.0
767 *
768 * Check if user is allowed to stream
769 *
770 * @since 3.7
771 */
772
773 public function wpstream_check_user_can_stream(){
774 $current_user = wp_get_current_user();
775
776 if( !is_user_logged_in() ){
777 return false;
778 exit('user not logged in');
779 }
780
781 if(current_user_can('administrator')){
782 // admins can always brodcast
783 return true;
784 }
785
786 $extra_roles = get_option( 'wpstream_stream_role', true );
787 $user_role = $current_user->roles[0];
788
789 if (is_array($extra_roles) && in_array($user_role, $extra_roles)){
790 return true;
791 }
792
793 if(function_exists('wpstream_get_option') && intval(wpstream_get_option('allow_streaming_regular_users',''))==1 ){
794 return true;
795 }
796
797 return false;
798 }
799
800
801 /**
802 * Start Streaming wrapper
803 *
804 * @since 3.7
805 */
806
807 public function wpstream_live_stream_unit_wrapper($item_id,$type){
808 $item_id = intval($item_id);
809
810 if($item_id == 0){
811 //retrive or create channel for front end streamers
812 $item_id=$this->wpstream_retrive_front_end_channel();
813 }
814 print'</div><div class="wpstream_modal_background"></div>';
815 print '<div class="wpstream_error_modal_notification"><div class="wpstream_error_content">er2</div>
816 <div class="wpstream_error_ok wpstream_button" type="button">'.esc_html__('Close','wpstream').'</div>
817 </div>';
818 $this->admin->wpstream_live_stream_unit( $item_id,$type );
819 }
820
821
822
823
824
825 /**
826 * retrive channel for front end streaming
827 *
828 * @since 3.7
829 */
830 public function wpstream_retrive_front_end_channel(){
831
832 $current_user = wp_get_current_user();
833 $channel_type = get_option ('wpstream_user_streaming_channel_type');
834 $channel_price = floatval( get_option ('wpstream_user_streaming_default_price') );
835
836 $front_end_streamin_channel = $this->wpstream_get_current_event_per_author($current_user->ID,$channel_type);
837
838 if(intval($front_end_streamin_channel) == 0){
839 $front_end_streamin_channel= $this->wpstrea_create_front_end_event($current_user->ID,$current_user->user_login ,$channel_type,$channel_price);
840 }
841 return $front_end_streamin_channel;
842
843 }
844
845 /**
846 * create the event from front end
847 *
848 * @since 3.7
849 */
850
851 public function wpstrea_create_front_end_event($userID,$userLogin,$channel_type,$channel_price){
852
853 if( !$this->wpstream_check_user_can_stream() ){
854 return;
855 }
856
857 $post_type='wpstream_product';
858 if($channel_type=='paid'){
859 $post_type='product';
860 }
861
862 $post = array(
863 'post_title' => sprintf( esc_html__('%s Channel','wpstream'),$userLogin),
864 'post_content' => '',
865 'post_type' => $post_type ,
866 'post_author' => $userID,
867 'post_status' => 'publish',
868 );
869 $post_id = wp_insert_post($post );
870 if($channel_type=='paid'){
871 $product = wc_get_product($post_id);
872 $price = wc_format_decimal($channel_price);
873
874 $product = wc_get_product( $post_id );
875 // Set the product active price (regular)
876 $product->set_price( $price );
877 $product->set_regular_price( $price ); // To be sure
878 $product->save();
879 update_post_meta ($post_id,'event_passed',0);
880 wp_set_object_terms( $post_id, 'live_stream', 'product_type' );
881 }
882 update_post_meta($post_id,'wpstream_product_type',1);
883
884 return $post_id;
885 }
886
887
888 public function wpstream_get_current_event_per_author($userID,$channel_type){
889
890 $post_type='wpstream_product';
891 if($channel_type=='paid'){
892 $post_type='product';
893 }
894
895 $args = array(
896
897 'post_type' => $post_type,
898 'author' => $userID,
899 'posts_per_page' => 1,
900 'fields' => 'ids'
901 )
902 ;
903 $author_posts = new WP_Query( $args );
904 if( $author_posts->have_posts() ) {
905 $author_posts->the_post();
906 return get_the_ID();
907 }else{
908 return 0;
909 }
910
911 wp_reset_query();
912 wp_reset_postdata();
913 }
914
915 }
916