PluginProbe
WpStream – Live Streaming, Video on Demand, Pay Per View / 2.06
WpStream – Live Streaming, Video on Demand, Pay Per View v2.06
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 4.5.12 All 180 releases
wpstream / wpstream.php

wpstream.php in WpStream – Live Streaming, Video on Demand, Pay Per View 2.06, at wpstream.php

499 lines 16.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: WpStream
4 * Plugin URI: wpstream.net
5 * Description: WpStream is a wordpress plugin to help you stream & monetize media content.
6 * Version: 2.06
7 * Author: wpstream.net
8 * Author URI: https://wpstream.net
9 * Developer: WpStream
10 * Developer URI: https://wpstream.net
11 * Text Domain: wpstream
12 * Domain Path: /languages
13 * * Copyright: © 2017 WpStream
14 */
15
16
17 define('WPSTREAM_CLUBLINK', 'wpstream.net');
18 define('WPSTREAM_CLUBLINKSSL', 'https');
19 define('WPSTREAM_PLUGIN_URL', plugins_url() );
20 define('WPSTREAM_PLUGIN_DIR_URL', plugin_dir_url(__FILE__) );
21 define('WPSTREAM_PLUGIN_PATH', plugin_dir_path(__FILE__) );
22 define('WPSTREAM_PLUGIN_BASE', plugin_basename(__FILE__) );
23
24 require_once ('main.php');
25 require_once ('libs/api_functions.php');
26 require_once ('libs/plugin-admin.php');
27 require_once ('libs/product_types.php');
28 require_once ('libs/wpstream_free_product_types.php');
29 require_once ('libs/shortcodes.php');
30 require_once ('libs/keys.php');
31
32
33
34 function wpstream_install(){
35 flush_rewrite_rules();
36 }
37
38 register_activation_hook( __FILE__, 'wpstream_install' );
39
40
41
42
43 function wpstream_deactivation(){
44 delete_option('wp_estate_token_expire');
45 delete_option('wp_estate_curent_token');
46 delete_option('wpstream_api_key');
47 delete_option('wpstream_api_secret_key');
48 delete_option('wpstream_api_username');
49 delete_option('wpstream_api_password');
50
51 flush_rewrite_rules();
52 }
53 register_deactivation_hook( __FILE__, 'wpstream_deactivation' );
54
55
56 wpstream_main_start();
57
58
59
60 function wpstream_admin_notice(){
61 if ( !in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
62 print '<div class="notice notice-error is-dismissible">
63 <p>'.__( 'WpStream Pay Per View / Subscription mode works only with WooCommerce - If you want to charge money for your live events or videos you need to activate WooCommerce plugin', 'wpestate' ).'</p>
64 </div>';
65 }
66 if( !in_array ('curl', get_loaded_extensions())) {
67 print '<div class="notice notice-error is-dismissible">
68 <p>'.__( 'The php CURL library is not enabled on your server. WpStream plugin needs this library in order to work. Please address this issue with your hosting provider.', 'wpestate' ).'</p>
69 </div>';
70 }
71
72
73 }
74 add_action( 'admin_notices', 'wpstream_admin_notice' );
75
76
77
78 function wpstream_enqueue_styles() {
79 wp_enqueue_style('wpstream-style', WPSTREAM_PLUGIN_DIR_URL .'/wpstream_style.css' );
80 wp_enqueue_style('video-js.min', WPSTREAM_PLUGIN_DIR_URL.'/css/video-js.min.css', array(), '1.0', 'all');
81 wp_enqueue_script('video.min', WPSTREAM_PLUGIN_DIR_URL.'js/video.min.js',array(), '1.0', false);
82
83
84 wp_enqueue_script('youtube.min', WPSTREAM_PLUGIN_DIR_URL.'js/youtube.min.js',array('video.min'), '1.0', false);
85 wp_enqueue_script('videojs-vimeo.min', WPSTREAM_PLUGIN_DIR_URL.'js/videojs-vimeo.min.js',array('video.min'), '1.0', false);
86 }
87
88
89
90
91 function wpstream_enqueue_styles_admin(){
92 wp_enqueue_script("jquery-ui-slider");
93 wp_enqueue_script("jquery-ui-datepicker");
94 wp_enqueue_script('wpstream-jquery.fileupload', WPSTREAM_PLUGIN_DIR_URL.'js/jquery.fileupload.js',array(), '1.0', true);
95
96 wp_enqueue_style ('admin-css', WPSTREAM_PLUGIN_DIR_URL.'/css/admin_style.css', array(), '1.0', 'all');
97 wp_enqueue_script('wpstream-admin-control', WPSTREAM_PLUGIN_DIR_URL.'js/admin_control.js',array(), '1.0', true);
98 wp_localize_script('wpstream-admin-control', 'wpstream_admin_control_vars',
99 array(
100 'admin_url' => get_admin_url(),
101 'loading_url' => WPSTREAM_PLUGIN_DIR_URL.'/img/loading.gif',
102 'download_mess' => esc_html__('Click to download! The url will work for the next 20 minutes! Refresh page if you need to generate the link again!','wpstream'),
103 'uploading' => esc_html('We are uploading your file.Do not close this window!','wpstream'),
104 'upload_complete2' => esc_html('Upload Complete! You can upload another file!','wpstream'),
105 'not_accepted' => esc_html('The file is not an accepted video format','wpstream'),
106 'upload_complete' => esc_html('Upload Complete!','wpstream'),
107 'no_band' => esc_html('Not enough bandwidth.','wpsteam'),
108 'no_band_no_store' => esc_html('Not enough bandwidth or storage.','wpsteam')
109
110 ));
111 }
112
113
114
115
116
117 function wpstream_my_custom_endpoints() {
118 add_rewrite_endpoint( 'video-list', EP_ROOT | EP_PAGES );
119 add_rewrite_endpoint( 'event-list', EP_ROOT | EP_PAGES );
120 }
121
122
123
124 function wpstream_my_custom_query_vars( $vars ) {
125 $vars[] = 'video-list';
126 $vars[] = 'event-list';
127 return $vars;
128 }
129
130
131
132 function wpstream_custom_flush_rewrite_rules() {
133 flush_rewrite_rules();
134 }
135
136
137
138 function wpstream_custom_my_account_menu_items( $items ) {
139 if(function_exists('wpstream_is_global_subscription') && wpstream_is_global_subscription()){
140 $items = array(
141 'dashboard' => __( 'Dashboard', 'woocommerce' ),
142 'orders' => __( 'Orders', 'woocommerce' ),
143 'edit-address' => __( 'Addresses', 'woocommerce' ),
144 'edit-account' => __( 'Edit Account', 'woocommerce' ),
145 'customer-logout' => __( 'Logout', 'woocommerce' ),
146 );
147 }else{
148 $items = array(
149 'dashboard' => __( 'Dashboard', 'woocommerce' ),
150 'orders' => __( 'Orders', 'woocommerce' ),
151 'edit-address' => __( 'Addresses', 'woocommerce' ),
152 'edit-account' => __( 'Edit Account', 'woocommerce' ),
153 'event-list' => __( 'Events', 'wpstream' ),
154 'video-list' => __( 'Videos', 'wpstream' ),
155 'customer-logout' => __( 'Logout', 'woocommerce' ),
156 );
157 }
158 return $items;
159 }
160
161
162 function wpstream_custom_endpoint_content_event_list() {
163 include 'woocommerce/myaccount/event_list.php';
164 }
165
166
167
168 function wpstream_custom_endpoint_video_list() {
169 include 'woocommerce/myaccount/video_list.php';
170 }
171
172
173
174
175 function wpstream_user_logged_in_product_already_bought($from_sh_id='') {
176
177 if ( is_user_logged_in() ) {
178 global $product;
179 $current_user = wp_get_current_user();
180 $product_id = $product->get_id();
181
182
183 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') ) ){
184
185
186 echo '<div class="wpstream_player_wrapper"><div class="wpstream_player_container">';
187
188 $is_subscription_live_event = esc_html(get_post_meta($product_id,'_subscript_live_event',true));
189 $term_list = wp_get_post_terms($product_id, 'product_type');
190
191 if( $term_list[0]->name=='live_stream' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='yes' ) ){
192 wpstream_live_event_player($product_id);
193 }else if( $term_list[0]->name=='video_on_demand' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='no' ) ){
194 wpstream_video_on_demand_player($product_id);
195 }
196
197 }else{
198 echo '<div class="wpstream_player_wrapper no_buy"><div class="wpstream_player_container">';
199 echo '<div class="wpstream_notice">'.__('You did not buy this product!','wpstream').'</div>';
200 }
201
202 echo '</div></div>';
203 }
204 }
205
206
207 function wpstream_live_event_player($product_id){
208 $live_event_uri = get_post_meta($product_id,'live_event_uri',true);
209 $thumb_id = get_post_thumbnail_id($product_id);
210 $thumb = wp_get_attachment_image_src($thumb_id,'small');
211
212
213 $live_event_uri_final= wpstream_request_hls_player($product_id);
214
215
216
217
218
219 $now=time().rand(0,10);
220 echo'<video id="wpstream-video'.$now.'" class="video-js vjs-default-skin vjs-16-9" controls>
221 <source
222 src="'.$live_event_uri_final.'"
223 type="application/x-mpegURL">
224 </video>
225
226 <script>
227 var player = videojs(\'wpstream-video'.$now.'\',{
228 html5: {
229 hls: {
230 bandwidth: 500000,
231 useBandwidthFromLocalStorage: true,
232 smoothQualityChange: true
233 }
234 },
235 errorDisplay: false,
236 autoplay:true,
237 preload:"auto",
238
239 });
240 wpstream_player_load();
241
242 function wpstream_player_load(){
243 player.src({
244 src: "'.$live_event_uri_final.'",
245 type: "application/x-mpegURL"
246 });
247 player.play();
248 }
249
250 timeQueue = [];
251 setInterval(function(){
252 timeQueue.push(player.currentTime());
253 if (timeQueue.length > 30){
254 timeQueue.shift();
255 if (timeQueue[0] == timeQueue[timeQueue.length -1]){
256
257 if (!player.paused() || player.currentTime() == 0){
258 timeQueue = [];
259 try{
260 player.currentTime(0);
261 }catch(err){
262
263 }
264 wpstream_player_load();
265 }
266
267 }
268 }
269 }, 1000);
270
271
272
273 </script>';
274
275 }
276
277
278
279 function wpstream_video_on_demand_player($product_id){
280 $thumb_id = get_post_thumbnail_id($product_id);
281 $thumb = wp_get_attachment_image_src($thumb_id,'small');
282 $wpstream_data_setup= ' data-setup="{}" ';
283
284 $free_video_type = intval( get_post_meta($product_id, 'wpstream_product_type', true));
285
286 if($free_video_type==2 || get_post_type($product_id)=='product' ){
287 $video_type = 'application/x-mpegURL';
288 $video_path = get_post_meta($product_id,'_movie_url',true);
289 if(get_post_type($product_id)=='wpstream_product'){
290 $video_path = esc_html(get_post_meta($product_id, 'wpstream_free_video', true));
291 }
292
293 $username = esc_html ( get_option('wpstream_api_username','') );
294 if (filter_var($username, FILTER_VALIDATE_EMAIL)) {
295 $username = wpstream_retrive_username();
296 }
297
298 if(strpos($username,'@')!=false){
299 $username_array= explode('@', $username);
300 $username=$username_array[0];
301 }
302
303 $video_path_final = 'https://vod.streamer.wpstream.net/'.$username.'/'.$video_path.'/index.m3u8?'.get_site_url();
304 if(!is_ssl()){
305 $video_path_final = 'http://vod.streamer.wpstream.net/'.$username.'/'.$video_path.'/index.m3u8?'.get_site_url();
306 }
307 }else if($free_video_type==3){
308 $video_type = 'video/mp4';
309 $video_path_final=esc_html(get_post_meta($product_id, 'wpstream_free_video_external', true));
310
311 if (strpos($video_path_final, 'www.youtube') !== false) {
312 $wpstream_data_setup= ' data-setup=\'{ "techOrder": ["youtube"], "sources": [{ "type": "video/youtube", "src": "'.$video_path_final.'"}] }\' ';
313 $video_path_final='';
314 }
315 if (strpos($video_path_final, 'vimeo.com') !== false) {
316 $wpstream_data_setup= ' data-setup=\'{ "techOrder": ["vimeo"], "sources": [{ "type": "video/vimeo", "src": "'.$video_path_final.'"}], "vimeo": { "color": "#fbc51b"} }\' ';
317 $video_path_final='';
318 }
319
320 }
321
322 echo '<video id="wpstream-video'.time().'" class="video-js vjs-default-skin vjs-16-9 kuk" controls preload="auto"
323 poster="'.$thumb[0].'"
324 '.$wpstream_data_setup.'
325 >
326
327 <source src="'.trim($video_path_final).'" type="'.$video_type.'">
328 <p class="vjs-no-js">
329 To view this video please enable JavaScript, and consider upgrading to a web browser that
330 <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
331 </p>
332 </video>';
333
334 }
335
336
337
338 add_filter('display_post_states', 'wpstream_custom_post_states',10,2);
339
340 function wpstream_custom_post_states( $states, $post ) {
341 $title =strtolower( get_the_title($post->ID));
342 if ( ( 'page' == get_post_type( $post->ID ) ) && ( $title ==='userkey' || $title ==='vodkey' || $title ==='wpstream' )) {
343 $states[] = __('by WpStream - do not delete','wpstream');
344 }
345
346 return $states;
347 }
348
349
350
351
352
353
354 function wpstream_custom_rewrite_tag() {
355 add_rewrite_tag('%streamname%', '([^&]+)');
356 add_rewrite_tag('%streamname2%', '([^&]+)');
357 add_rewrite_tag('%variety%', '([^&]+)');
358 add_rewrite_tag('%userkey%', '([^&]+)');
359 add_rewrite_tag('%streamvod%', '([^&]+)');
360 }
361 add_action('init', 'wpstream_custom_rewrite_tag', 10, 0);
362
363 //add_action('generate_rewrite_rules', 'wpstream_custom_rewrite_rule');
364
365 function wpstream_custom_rewrite_rule() {
366 $page = get_page_by_title( 'WpStream' );
367 $page_user_key = get_page_by_title( 'Userkey' );
368 $page_vod_key = get_page_by_title( 'Vodkey' );
369
370
371 if( isset($page->ID) ){
372 add_rewrite_rule('^keys/([^/]*/?)', 'index.php?page_id='.$page->ID.'&streamname=$matches[1]','top');
373 }
374
375 if( isset($page_vod_key->ID) ){ // is wod-key=page-template
376 add_rewrite_rule('^keys1/([^/]*)/([^/]*)/?','index.php?page_id='.$page_vod_key->ID.'&streamname=$matches[1]&streamname2=$matches[2]','top');
377 }
378
379 if( isset($page_user_key->ID) ){//us user-key-page-temaplte
380 add_rewrite_rule('^keys2/([^/]*)/([^/]*)/?','index.php?page_id='.$page_user_key->ID.'&streamname=$matches[1]&streamname2=$matches[2]','top');
381 }
382
383 flush_rewrite_rules();
384
385 }
386 add_action('init', 'wpstream_custom_rewrite_rule', 10, 0);
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404 function wpstream_live_page_template( $page_template ){
405 if ( is_page( 'wpstream' ) ) {
406 $page_template = dirname( __FILE__ ) . '/live_stream_checker.php';
407 }
408
409
410 return $page_template;
411 }
412 add_filter( 'page_template', 'wpstream_live_page_template' );
413
414
415
416
417 function wpstream_userkey_page_template( $page_template ){
418 if ( is_page( 'Userkey' ) ) {
419 $page_template = dirname( __FILE__ ) . '/user-key-page-template.php';
420 }
421 return $page_template;
422 }
423 add_filter( 'page_template', 'wpstream_userkey_page_template' );
424
425
426
427
428
429 function wpstream_vodkey_page_template( $page_template ){
430 if ( is_page( 'vodkey' ) ) {
431 $page_template = dirname( __FILE__ ) . '/vod-key-page-template.php';
432 }
433 return $page_template;
434 }
435 add_filter( 'page_template', 'wpstream_vodkey_page_template' );
436
437
438
439 function wpstream_remove_gallery_and_product_images() {
440 if ( is_product() ) {
441 remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
442 }
443 }
444
445
446
447
448 function wpstream_cors_check_and_response(){
449 if ($_SERVER['REQUEST_METHOD'] == "OPTIONS") {
450 header('Access-Control-Allow-Methods: POST, GET');
451 header('Access-Control-Allow-Headers: Authorization');
452 header('Access-Control-Max-Age: 1'); //1728000
453 header("Content-Length: 0");
454 header("Content-Type: text/plain charset=UTF-8");
455 exit(0);
456 }
457 }
458
459 add_action('wo_before_api', 'wpstream_cors_check_and_response');
460
461
462 add_action('add_meta_boxes', 'wpstream_startstreaming_sidebar_meta');
463 if( !function_exists('wpstream_startstreaming_sidebar_meta') ):
464
465 function wpstream_startstreaming_sidebar_meta() {
466 global $post;
467
468 $term_list = wp_get_post_terms($post->ID, 'product_type');
469
470
471 if( get_post_meta($post->ID, 'wpstream_product_type', true)==1 ){
472 add_meta_box('wpstream-sidebar-meta', esc_html__('Live Streaming', 'wpstream'), 'wpstream_start_stream_meta', 'wpstream_product', 'side', 'high');
473 }
474
475 if(!is_wp_error( $term_list )){
476 if( isset($term_list[0]->name) ){
477 if( $term_list[0]->name=='live_stream' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='yes' ) ){
478 add_meta_box('wpstream-sidebar-meta', esc_html__('Live Streaming', 'wpstream'), 'wpstream_start_stream_meta', 'product', 'side', 'high');
479 }
480 }
481 }
482
483 }
484 endif;
485
486
487 function wpstream_start_stream_meta(){
488 global $live_event_for_user;
489 global $post;
490
491
492
493
494 $ajax_nonce = wp_create_nonce( "wpstream_start_event_nonce" );
495 print '<input type="hidden" id="wpstream_start_event_nonce" value="'.$ajax_nonce.'">';
496 $live_event_for_user = wpstream_get_live_event_for_user();
497 wpstream_live_stream_unit($post->ID);
498
499 }