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

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

2,185 lines 110.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * The admin-specific functionality of the plugin.
5 *
6 * @link http://wpstream.net
7 * @since 3.0.1
8 *
9 * @package Wpstream
10 * @subpackage Wpstream/admin
11 */
12
13 /**
14 * The admin-specific functionality of the plugin.
15 *
16 * Defines the plugin name, version, and two examples hooks for how to
17 * enqueue the admin-specific stylesheet and JavaScript.
18 *
19 * @package Wpstream
20 * @subpackage Wpstream/admin
21 * @author wpstream <office@wpstream.net>
22 */
23 class Wpstream_Admin {
24
25
26 /**
27 * Store plugin main class to allow public access.
28 *
29 * @since 20180622
30 * @var object The main class.
31 */
32 public $main;
33
34
35 /**
36 * The ID of this plugin.
37 *
38 * @since 3.0.1
39 * @access private
40 * @var string $plugin_name The ID of this plugin.
41 */
42 private $plugin_name;
43
44 /**
45 * The version of this plugin.
46 *
47 * @since 3.0.1
48 * @access private
49 * @var string $version The current version of this plugin.
50 */
51 private $version;
52
53 /**
54 * Initialize the class and set its properties.
55 *
56 * @since 3.0.1
57 * @param string $plugin_name The name of this plugin.
58 * @param string $version The version of this plugin.
59 */
60
61 public $global_event_options ;
62
63
64
65
66
67 public function __construct( $plugin_name, $version,$plugin_main ) {
68
69 $this->plugin_name = $plugin_name;
70 $this->version = $version;
71 $this->main = $plugin_main;
72
73 $this->global_event_options = array(
74
75 'record' =>array(
76 'name' => esc_html__('Record Live Stream','wpstream'),
77 'details' => esc_html__('If enabled, live streams will be recorded and saved to your library.','wpstream'),
78 'defaults' => 'no',
79
80 ),
81 'view_count' =>array(
82 'name' => esc_html__('Display Viewer Count','wpstream'),
83 'details' => esc_html__('If enabled, the live viewer count will show up in the player.','wpstream'),
84 'defaults' => 'yes',
85 ),
86 'domain_lock'=>array(
87 'name' => esc_html__('Lock To Website','wpstream'),
88 'details' => sprintf ( esc_html__('If enabled, live video will only display on %1$s, otherwise it can show up on any website.','wpstream'),get_bloginfo('wpurl') ),
89 'defaults' => 'no',
90 ),
91 'autoplay' =>array(
92 'name' => esc_html__('Autoplay','wpstream'),
93 'details' => esc_html__('If enabled, live video will attempt to start playing automatically. This is only achievable in some browsers.','wpstream'),
94 'defaults' => 'yes',
95 ),
96 'mute' =>array(
97 'name' => esc_html__('Start Muted','wpstream'),
98 'details' => esc_html__('If enabled, live video will start muted. This may increase the rate of autoplay in some browsers. ','wpstream'),
99 'defaults' => 'no',
100
101 ),
102
103 'encrypt' =>array(
104 'name' => esc_html__('Encrypt Live Stream','wpstream'),
105 'details' => esc_html__('If enabled, video data will be encrypted. Enabling encryption may lead to reduced website performance under certain configurations. Encrypted video may not display in all browsers.','wpstream'),
106 'defaults' => 'no',
107 ),
108 'ses_encrypt'=>array(
109 'name' => esc_html__('Use Sessions with Encryption','wpstream'),
110 'details' => esc_html__('If enabled, encryption key distribution will be checked against valid user sessions. Setting may malfunction or lead to reduced website performance under certain configurations. ','wpstream'),
111 'defaults' => 'no',
112 ),
113 'autostart' =>array(
114 'name' => esc_html__('Auto TURN ON','wpstream'),
115 'details' => esc_html__('If enabled, channel will TURN ON automatically when broadcasting with an External Streaming App (RTMP Encoder/Broadcaster)','wpstream'),
116 'defaults' => 'no',
117 ),
118
119 'vod_domain_lock' =>array(
120 'name' => esc_html__('Video On Demand - Lock To Website','wpstream'),
121 'details' => sprintf ( esc_html__('If enabled, VODS will only display on %1$s, otherwise they can show up on any website.','wpstream'),get_bloginfo('wpurl') ),
122 'defaults' => 'no',
123 ),
124 'vod_encrypt' =>array(
125 'name' => esc_html__('Encrypt Video on Demand','wpstream'),
126 'details' => esc_html__('If enabled, video data will be encrypted. Enabling encryption may lead to reduced website performance under certain configurations. Encrypted video may not display in all browsers.','wpstream'),
127 'defaults' => 'no',
128 ),
129 );
130
131 }
132
133 /**
134 * Register the stylesheets for the admin area.
135 *
136 * @since 3.0.1
137 */
138 public function enqueue_styles() {
139
140 /**
141 * This function is provided for demonstration purposes only.
142 *
143 * An instance of this class should be passed to the run() function
144 * defined in Wpstream_Loader as all of the hooks are defined
145 * in that particular class.
146 *
147 * The Wpstream_Loader will then create the relationship
148 * between the defined hooks and the functions defined in this
149 * class.
150 */
151 wp_enqueue_style( 'wpstream-roboto', "https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700,900&display=swap&subset=latin-ext" );
152 wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/wpstream-admin.css', array(), WPSTREAM_PLUGIN_VERSION, 'all' );
153
154 }
155
156 /**
157 * Register the JavaScript for the admin area.
158 *
159 * @since 3.0.1
160 */
161 public function enqueue_scripts() {
162
163 wp_enqueue_script("jquery-ui-slider");
164 wp_enqueue_script("jquery-ui-datepicker");
165 wp_enqueue_script('jquery.fileupload', plugin_dir_url( __FILE__ ) .'js/jquery.fileupload.js?v='.time(),array(), WPSTREAM_PLUGIN_VERSION, true);
166 wp_enqueue_script('wpstream-admin-control', plugin_dir_url( __FILE__ ) .'js/admin_control.js?v='.time(),array(), WPSTREAM_PLUGIN_VERSION, true);
167 wp_localize_script('wpstream-admin-control', 'wpstream_admin_control_vars',
168 array(
169 'admin_url' => get_admin_url(),
170 'loading_url' => WPSTREAM_PLUGIN_DIR_URL.'/img/loading.gif',
171 'download_mess' => esc_html__('Click to download!','wpstream'),
172 'uploading' => esc_html('We are uploading your file.Do not close this window!','wpstream'),
173 'upload_complete2' => esc_html('Upload Complete! You can upload another file!','wpstream'),
174 'not_accepted' => esc_html('The file is not an accepted video format','wpstream'),
175 'upload_complete' => esc_html('Upload Complete!','wpstream'),
176 'no_band' => esc_html('Not enough streaming data.','wpsteam'),
177 'no_band_no_store' => esc_html('Not enough streaming data or storage.','wpsteam')
178
179 ));
180
181
182
183 wp_enqueue_script('wpstream-start-streaming_admin', plugin_dir_url( __DIR__ ) .'/public/js/start_streaming.js?v='.time(),array(), WPSTREAM_PLUGIN_VERSION, true);
184 wp_localize_script('wpstream-start-streaming_admin', 'wpstream_start_streaming_vars',
185 array(
186 'admin_url' => get_admin_url(),
187 'loading_url' => WPSTREAM_PLUGIN_DIR_URL.'/img/loading.gif',
188 'download_mess' => esc_html__('Click to download!','wpstream'),
189 'uploading' => esc_html('We are uploading your file.Do not close this window!','wpstream'),
190 'upload_complete2' => esc_html('Upload Complete! You can upload another file!','wpstream'),
191 'not_accepted' => esc_html('The file is not an accepted video format','wpstream'),
192 'upload_complete' => esc_html('Upload Complete!','wpstream'),
193 'no_band' => esc_html('Not enough streaming data.','wpsteam'),
194 'no_band_no_store' => esc_html('Not enough streaming data or storage.','wpsteam'),
195
196 'start_streaming_action'=> esc_html__('TURNING ON','wpstream'),
197 'stop_streaming_action' => esc_html__('TURNING OFF','wpstream'),
198 'start_streaming' => esc_html__('TURN ON','wpstream'),
199 'stop_streaming' => esc_html__('TURN OFF','wpstream'),
200 'turned_on_tooltip' => esc_html__('Channel is now OFF. Click to turn ON.','wpstream'),
201 'turned_off_tooltip' => esc_html__('Click to turn channel off. This will interrupt any ongoing broadcast.','wpstream'),
202 'turning_on_tooltip' => esc_html__('Turning a channel on may take 1-2 minutes or more. Please be patient.','wpstream'),
203 'turning_off_tooltip' => esc_html__('This may take a few minutes.','wpstream'),
204 'error1' => esc_html__('You don\'t have enough data to start a new event!','wpstream'),
205 'failed_event_creation' => esc_html__('Failed to start the channel. Please try again in a few minutes.','wpstream'),
206 'channel_turning_on' => esc_html__('Channel is turning on','wpstream'),
207 'channel_turning_off' => esc_html__('Channel is turning off','wpstream'),
208 'channel_on' => esc_html__('Channel is ON','wpstream'),
209 'channel_off' => esc_html__('Channel is OFF','wpstream'),
210 'turn_off_confirm' => esc_html__('ARE YOU SURE you\'d like to TURN OFF the channel now? '.PHP_EOL.PHP_EOL.'Channels TURN OFF automatically after 1 hour of inactivity (no active broadcast).'.PHP_EOL.PHP_EOL.'Manual TURN OFF is only useful if you require to change the channel settings immediately.'.PHP_EOL.PHP_EOL.'Statistics may be unavailable or incomplete for up to an hour.'.PHP_EOL.PHP_EOL.'If your channel is configured with Auto TURN ON, it will turn back on as soon as there is a broadcast.','wpstream')
211 ));
212
213 }
214
215
216 /**
217 * Add Plugin Administation menu
218 *
219 * @since 3.0.1
220 */
221
222 public function wpstream_manage_admin_menu() {
223
224 add_menu_page( __('WpStream','wpestream'), __('WpStream ','wpstream'), 'administrator', 'wpstream_credentials', array($this,'wpstream_set_wpstream_credentials'), WPSTREAM_PLUGIN_DIR_URL.'img/wpstream-icon-menu_2.png',20 );
225 add_submenu_page( 'wpstream_credentials', __('WpStream Credentials','wpestream'), __('Credentials','wpestream'), 'administrator', 'wpstream_credentials', array($this,'wpstream_set_wpstream_credentials') );
226 add_submenu_page( 'wpstream_credentials', __('WpStream Live Channels','wpestream'), __('All Channels','wpestream'), 'administrator', 'wpstream_live_channels', array( $this,'wpstream_new_general_set'));
227 add_submenu_page( 'wpstream_credentials', __('WpStream Recordings','wpestream'), __('Recordings','wpestream'), 'administrator', 'wpstream_recordings', array($this,'wpstream_media_management'));
228 add_submenu_page( 'wpstream_credentials', __('WpStream Settings','wpestream'), __('Settings','wpestream'), 'administrator', 'wpstream_settings', array($this,'wpstream_settings'));
229
230 }
231
232
233
234
235
236 /**
237 * Shows events wpstream
238 *
239 * @since 3.0.1
240 */
241
242 public function wpstream_new_general_set() {
243
244 $no_channel=1;
245
246 if(class_exists ('WC_Subscription')){
247
248 }
249
250 //event_passed
251 $args = array(
252 'posts_per_page' => -1,
253 'post_type' => 'product',
254 'post_status' => 'publish',
255 'meta_query' => array(
256 array(
257 'key' => 'event_passed',
258 'value' => 1,
259 'compare' => '!=',
260 )
261 ),
262
263 'tax_query' => array(
264 'relation' => 'AND',
265 array(
266 'taxonomy' => 'product_type',
267 'field' => 'slug',
268 'terms' => array('live_stream','subscription')
269 )
270 ),
271 );
272
273
274
275 $event_list = new WP_Query($args);
276 global $live_event_for_user;
277 $live_event_for_user = $this->main->wpstream_live_connection->wpstream_get_live_event_for_user();
278 $pack_details = $this->main->wpstream_live_connection->wpstream_request_pack_data_per_user();
279
280 $this->main->show_user_data($pack_details);
281 if( $event_list->have_posts()){
282
283
284 print '<div class="pack_details_wrapper_transparent">
285 <h3>'.__('Your Pay-Per-View Channel List','wpstream').'</h3>';
286
287
288 $link_new = admin_url('post-new.php?post_type=product').'&new_stream='. rawurlencode('new');
289
290 print '<a href="'.esc_url($link_new).'" class="wpstream_create_new_product_link">'.esc_html__('Create new Pay-Per-View channel.','wpstream').'</a>';
291 print '</div>';
292
293 print '<div style="clear: both;"></div><div class="event_list_wrapper">';
294
295 while ($event_list->have_posts()): $event_list->the_post();
296
297 $the_id = get_the_ID();
298 $is_subscription_live_event = esc_html(get_post_meta($the_id,'_subscript_live_event',true));
299 $term_list = wp_get_post_terms($the_id, 'product_type');
300
301 if( $term_list[0]->name=='subscription' && $is_subscription_live_event=='no'){
302 continue;
303 }
304
305 $this->wpstream_live_stream_unit($the_id);
306
307 endwhile;
308
309 print'</div>';
310 $no_channel=1;
311 }else{
312 $no_channel=0;
313 }
314
315
316 $ajax_nonce = wp_create_nonce( "wpstream_start_event_nonce" );
317 print '<input type="hidden" id="wpstream_start_event_nonce" value="'.$ajax_nonce.'">';
318 $current_user = wp_get_current_user();
319 $allowded_html = array();
320 $userID = $current_user->ID;
321 $user_live_streams = get_user_meta($userID,'live_shows');
322
323
324 wp_reset_postdata();
325
326
327
328
329 // free
330
331 $args_free = array(
332 'posts_per_page' => -1,
333 'post_type' => 'wpstream_product',
334 'post_status' => 'publish',
335
336
337 );
338 $event_list_free = new WP_Query($args_free);
339
340
341 if( $event_list_free->have_posts()){
342 print '<div class="pack_details_wrapper_transparent">
343 <h3>'.__('Free-To-View Channels','wpstream').'</h3>';
344
345 $link_new = admin_url('post-new.php?post_type=wpstream_product');
346 print '<a href="'.esc_url($link_new).'" class="wpstream_create_new_product_link">'.esc_html__('Create new Free-To-View channel.','wpstream').'</a>';
347 print '</div>';
348 print '<div style="clear: both;"></div><div class="event_list_wrapper">';
349
350 while ($event_list_free->have_posts()): $event_list_free->the_post();
351
352
353 $the_id = get_the_ID();
354
355 if( get_post_meta ($the_id,'event_passed',true)!=1){
356 $this->wpstream_live_stream_unit($the_id);
357 }
358
359 endwhile;
360
361 print'</div><div class="wpstream_modal_background"></div>';
362 print '<div class="wpstream_error_modal_notification"><div class="wpstream_error_content">er2</div>
363 <div class="wpstream_error_ok wpstream_button" type="button">'.esc_html__('Close','wpstream').'</div>
364 </div>';
365 $no_channel=1;
366 }else{
367 $no_channel=0;
368 }
369
370
371
372
373 $link_new_paid = admin_url('post-new.php?post_type=product').'&new_stream='. rawurlencode('new');
374 $link_new_free = admin_url('post-new.php?post_type=wpstream_product');
375 print '<div class="no_events_warning"> ';
376 if($event_list->found_posts==0){
377 print '<div class="no_events_warning_mes">'.__('* You do not have any Pay-Per-View channels!','wpstream').'</div>';
378 }
379 if($event_list_free->found_posts==0){
380 print '<div class="no_events_warning_mes">'. __('* You do not have any free channels!','wpstream').'</div>';
381 }
382
383 print '<a href="'.esc_url($link_new_free).'" class="wpstream_no_chanel_add_channel">'.esc_html__('Add new Free-To-View channel ','wpstream').'</a>';
384 print '<a href="'.esc_url($link_new_paid).'" class="wpstream_no_chanel_add_channel">'.esc_html__('Add new Pay-Per-View channel ','wpstream').'</a>';
385
386 print '</div>';
387
388
389
390
391 }
392 // end wpstream_new_general_set
393
394
395 /**
396 * Social share
397 *
398 * @since 3.0.1
399 */
400
401 public function wpstream_social_share($the_id){
402 $protocol = is_ssl() ? 'https' : 'http';
403 $pinterest = wp_get_attachment_image_src(get_post_thumbnail_id($the_id), 'full');
404 $link = esc_url ( get_permalink($the_id) );
405 $title = get_the_title($the_id);
406 $twiter_status = urlencode( $title.' '.$link);
407 $email_link = 'subject='.urlencode ( $title ) .'&body='. urlencode( esc_url($link));
408
409 $facebook_link = esc_html($protocol).'://www.facebook.com/sharer.php?u='. esc_url($link) .'&amp;t='. urlencode(get_the_title());
410
411 ?>
412 <div class="wpstream_social_share_wrapper">
413
414 <a href="<?php print esc_url( $facebook_link); ?>" target="_blank" class="social_facebook wpstream_sharing_social">
415 <span class="dashicons dashicons-facebook-alt"></span>
416 </a>
417
418 <a href="<?php print esc_html($protocol);?>://twitter.com/intent/tweet?text=<?php echo esc_html($twiter_status); ?>" class="social_tweet wpstream_sharing_social" target="_blank">
419 <span class="dashicons dashicons-twitter"></span>
420 </a>
421
422 <a href="<?php print esc_html($protocol);?>://pinterest.com/pin/create/button/?url=<?php echo esc_url($link); ?>&amp;media=<?php if (isset( $pinterest[0])){ echo esc_url($pinterest[0]); }?>&amp;description=<?php echo urlencode(get_the_title()); ?>" target="_blank" class="social_pinterest wpstream_sharing_social">
423 <span class="dashicons dashicons-pinterest"></span>
424 </a>
425
426 <a href="<?php print esc_html($protocol);?>://api.whatsapp.com/send?text=<?php echo urlencode( get_the_title().' '. esc_url( $link )); ?>" class="social_whatsup wpstream_sharing_social" target="_blank">
427 <span class="dashicons dashicons-whatsapp"></span>
428 </a>
429
430 <a href="<?php print esc_html($protocol);?>://www.linkedin.com/sharing/share-offsite/?url=<?php echo urlencode(esc_url($link)); ?>" class="social_linkedin wpstream_sharing_social" target="_blank">
431 <span class="dashicons dashicons-linkedin"></span>
432 </a>
433
434 <a href="<?php print esc_html($protocol);?>:///www.reddit.com/submit?url==<?php echo urlencode(esc_url($link)); ?>" class="social_linkedin wpstream_sharing_social" target="_blank">
435 <span class="dashicons dashicons-reddit"></span>
436 </a>
437
438 <a href="mailto:email@email.com?<?php echo trim(esc_html($email_link));?>" data-action="share email" class="social_email wpstream_sharing_social">
439 <span class="dashicons dashicons-email-alt"></span>
440 </a>
441
442 <div class="wpstream_modal_explanations"> <?php print esc_html__('Spread the word! To let people know about your channel, click on the corresponding icon and share on the social platforms of your choice. The more the merrier!','wpstream'); ?> </div>
443 <?php
444 print '</div>';
445 }
446
447
448
449
450 /**
451 * Shows event unit card in admin
452 *
453 * @since 3.0.1
454 */
455
456 public function wpstream_live_stream_unit($the_id,$is_front=''){
457 global $live_event_for_user;
458 global $wpstream_plugin;
459 $current_user = wp_get_current_user();
460
461 if( !current_user_can('administrator')){
462 if($is_front=='' ){
463 print '<div class="event_list_unit">';
464 esc_html_e('You are not allowed to broadcast.','wpstream');
465 print '</div>';
466 return;
467 }
468
469 }
470
471 if( !$this->main->wpstream_check_user_can_stream() ){
472 print '<div class="event_list_unit">';
473 esc_html_e('You are not allowed to broadcast','wpstream');
474 print '</div>';
475 return;
476 }
477
478
479 $live_class='';
480 if(isset($live_event_for_user[$the_id])) {
481 $live_class=" wpstream_show_started";
482 }
483
484
485 if(has_post_thumbnail($the_id)){
486 $thumb = get_the_post_thumbnail_url($the_id,'thumbnail');
487 }else{
488 $thumb= plugin_dir_url( dirname( __FILE__ ) ). 'img/plugin-logo.png';
489 }
490
491 $pending_streaming_class = 'hide_stream_data';
492 $external_software_streaming_class = '';
493 $obs_uri = '';
494 $obs_stream = '';
495 $live_data_url = '';
496
497 if( $live_event_for_user=='' && $is_front=='front' ){
498 $live_event_for_user = $this->main->wpstream_live_connection->wpstream_get_live_event_for_user();
499 }
500 $channel_status = esc_html__('Channel is OFF','wpstream');
501 if(is_array($live_event_for_user) && isset($live_event_for_user[$the_id])) {
502 $pending_streaming_class = 'pending_trigger';
503 $live_data_url = get_post_meta($the_id,'qos_url',true);
504 // $channel_status = esc_html__('Channel is on','wpstream');
505 }
506
507 $server_id = get_post_meta($the_id,'server_id',true);
508 $obs_uri = get_post_meta($the_id,'obs_uri',true);
509 $obs_stream = get_post_meta($the_id,'obs_stream',true);
510 $webcaster_url = get_post_meta($the_id,'webcaster_url',true);
511 $rtmp_ip_uri = '';
512
513 print '<div class="event_list_unit '.$live_class.' '.$pending_streaming_class.' event_unit_style_'.esc_attr($is_front).'" data-show-id="'.intval($the_id).'" data-server-id="'.$server_id.'" data-server-url="'.$rtmp_ip_uri.'"">';
514
515 print '<div class="wpstream_channel_status">'.$channel_status.'</div>';
516
517 print '<div class="server_notification"></div>';
518
519 print '<div class="event_thumb_wrapper" style="background-image:url('.$thumb.')"></div>';
520
521 print '<div class="event_title" data-prodid="'.$the_id.'">'.wp_trim_words(get_the_title($the_id),10);
522
523
524 /* print '***</br>'.get_post_meta($the_id,'obs_uri',true) .'***</br>'.
525 get_post_meta($the_id,'obs_stream',true).'***</br>'.
526 get_post_meta($the_id,'broadcast_url',true);
527 */
528 print '<div class="wpstream_channel_item_id">'.esc_html('#ID','wpstream').' '.$the_id.'</div>';
529 print '</div>';
530
531
532 print '<div class="start_event wpstream_button wpstream_tooltip_wrapper" data-show-id="'.$the_id.'" > '.esc_html__('TURN ON','wpstream');
533 print '<div class="wpstream_tooltip">'.esc_html__('Channel is now OFF. Click to turn ON.','wpestream').'</div>';
534 print '</div>';
535
536 print '<div class="wpstream_options_col1">';
537
538 print '<div class="wpstream_inactive_icon start_webcaster wpstream_stream_browser wpstream-button-icon wpstream_tooltip_wrapper" data-webcaster-url="'.$webcaster_url.'" data-show-id="'.$the_id.'"">';
539
540 print '<div class="wpstream_tooltip_disabled">'.esc_html__('Turn ON the channel to go live.','wpestream').'</div>';
541 print '<div class="wpstream_tooltip">'.esc_html__('Go live with your webcam','wpestream').'</div>';
542
543 print '<svg width="41" height="51" viewBox="0 0 41 51" fill="none" xmlns="http://www.w3.org/2000/svg">
544 <path d="M40.7646 44.2989C39.8782 41.4216 38.3361 38.7814 36.181 36.4522C35.7274 35.9619 35.1629 35.3518 34.4858 34.8356C34.0448 34.4996 33.4262 34.5281 33.0182 34.9035C29.358 38.2714 25.2628 39.9088 20.4979 39.9088H20.4853C15.7103 39.9059 11.6117 38.264 7.95648 34.889C7.52404 34.4896 6.85874 34.484 6.41953 34.8764C3.30565 37.6569 1.20501 40.9206 0.175434 44.5778C-0.276291 46.1833 0.15652 47.8497 1.33328 49.0353C2.22709 49.9362 3.39869 50.4173 4.61958 50.4173C5.0357 50.4173 5.45813 50.3613 5.87645 50.247C10.147 49.081 14.0772 48.4108 17.8916 48.1983C21.1954 48.014 24.4465 48.1323 27.5541 48.5495C29.9559 48.8718 32.4237 49.3888 35.0996 50.1299C36.823 50.6076 38.459 50.1562 39.7059 48.86C40.9268 47.5901 41.2933 46.0132 40.7651 44.2994L40.7646 44.2989ZM38.0572 47.274C37.3825 47.9754 36.6367 48.1823 35.7092 47.9257C32.9321 47.1565 30.3638 46.6187 27.8578 46.2827C24.6079 45.8465 21.2117 45.723 17.7643 45.9151C13.7874 46.1365 9.70183 46.8319 5.27439 48.041C4.43435 48.2706 3.5673 48.0403 2.9568 47.425C2.35932 46.8227 2.14793 46.0108 2.37712 45.1975C3.21567 42.2171 4.7982 39.6162 7.2018 37.2734C11.0641 40.5378 15.5276 42.193 20.4845 42.196H20.4978C25.4557 42.196 29.9251 40.5386 33.7967 37.2667C34.024 37.4904 34.254 37.7359 34.5032 38.0059C36.4236 40.0816 37.7951 42.4256 38.5799 44.9728C38.8603 45.8811 38.6941 46.6125 38.0581 47.274L38.0572 47.274ZM20.4954 30.7538C13.8088 30.7523 8.54664 25.4128 8.54379 18.6256C8.5412 12.2624 13.9961 6.83353 20.3776 6.84872C27.1094 6.86467 32.4526 12.1652 32.4488 18.8231C32.4447 25.4243 27.1038 30.7547 20.4954 30.7538V30.7538ZM29.4401 18.8383C29.5559 13.9512 25.4358 9.8445 20.5347 9.83671C15.5301 9.82892 11.6488 13.9279 11.5328 18.5667C11.4086 23.5202 15.344 27.7103 20.3381 27.7926C25.5542 27.8783 29.554 23.5758 29.4401 18.8383V18.8383ZM20.4917 25.1342C17.2131 25.2436 14.1541 22.4349 14.1567 18.8924C14.1593 15.2627 16.9642 12.4191 20.5858 12.4662C24.0109 12.5111 26.8269 15.2466 26.8362 18.8471C26.8451 22.4293 23.782 25.2436 20.4917 25.1342V25.1342ZM18.5119 13.9982C17.3006 13.9908 15.6202 15.656 15.6295 16.8543C15.6328 17.3209 15.961 17.661 16.3983 17.6513C17.5973 17.6246 19.2281 16.0169 19.2696 14.8205C19.2881 14.2742 19.0371 14.0016 18.5119 13.9982L18.5119 13.9982ZM20.4964 0.568359C10.4428 0.568359 2.26333 8.74761 2.26333 18.8014C2.26333 28.8551 10.4426 37.0345 20.4964 37.0345C30.5502 37.0345 38.7295 28.8553 38.7295 18.8014C38.7291 8.7478 30.5502 0.568359 20.4964 0.568359V0.568359ZM20.4964 33.3886C12.4528 33.3886 5.90919 26.8449 5.90919 18.8014C5.90919 11.3105 11.585 5.12093 18.8624 4.30631C18.8561 4.36009 18.8528 4.41423 18.8528 4.46912C18.8468 5.37368 19.6112 6.16064 20.4927 6.15846C21.3636 6.15586 22.1283 5.39706 22.142 4.52143C22.1431 4.44874 22.1372 4.3768 22.1279 4.30596C29.4067 5.11929 35.0849 11.3092 35.0849 18.802C35.0842 26.8456 28.5404 33.3892 20.4968 33.3892L20.4964 33.3886Z" fill="black"/>
545 </svg>';
546 print '</div>';
547
548
549 print '<div class="wpstream_inactive_icon wpstream_stream_pro wpstream-button-icon wpstream-trigger-modal wpstream_tooltip_wrapper" data-modal="wpestate_broadcast_modal" data-show-id="'.$the_id.'"">';
550
551 print '<div class="wpstream_tooltip_disabled">'.esc_html__('Turn ON the channel to go live.','wpestream').'</div>';
552 print '<div class="wpstream_tooltip">'.esc_html__('Go Live with external streaming app','wpestream').'</div>';
553
554 print '<svg width="51" height="38" viewBox="0 0 51 38" fill="none" xmlns="http://www.w3.org/2000/svg">
555 <path d="M48.1266 13.9634L41.891 17.5343V13.6438C41.891 10.8723 39.6525 8.63384 36.8811 8.63384H33.1504L30.1124 3.62393C28.7268 1.3324 26.2751 0 23.6103 0H10.2863C8.84722 0 7.67471 1.17251 7.67471 2.6116C7.67471 4.05068 8.84722 5.22319 10.2863 5.22319H23.6103C24.4631 5.22319 25.2093 5.64961 25.6888 6.3957L27.0744 8.63413L5.00991 8.63376C2.23843 8.63376 0 10.8722 0 13.6437V32.9901C0 35.7616 2.23843 38 5.00991 38H36.9342C39.7057 38 41.9441 35.7616 41.9441 32.9901V29.0461L48.1797 32.6169C49.2991 33.2564 50.6846 32.4571 50.6846 31.1778L50.6842 15.4022C50.6311 14.123 49.2455 13.3237 48.1261 13.9632L48.1266 13.9634ZM38.1603 32.9368C38.1603 33.6297 37.574 34.1625 36.9345 34.1625L5.01029 34.1629C4.31733 34.1629 3.78458 33.5766 3.78458 32.9372V13.5907C3.78458 12.8978 4.37086 12.365 5.01029 12.365H36.9345C37.6275 12.365 38.1603 12.9513 38.1603 13.5907V32.9368Z" fill="black"/>
556 <path d="M22.4917 21.585H9.70066C8.84784 21.585 8.15527 22.2779 8.15527 23.1304V28.247C8.15527 29.0998 8.84823 29.7923 9.70066 29.7923H22.4917C23.3445 29.7923 24.0371 29.0994 24.0371 28.247V23.1304C24.0371 22.2775 23.3445 21.585 22.4917 21.585Z" fill="black"/>
557 </svg>';
558 print '</div>';
559
560
561
562
563 print '<a href="'.esc_url($live_data_url).'" target="_blank" class="wpstream_inactive_icon wpstream_live_data wpstream_statistics_channel wpstream-button-icon wpstream_tooltip_wrapper" data-show-id="'.$the_id.'" >';
564
565 print '<div class="wpstream_tooltip_disabled">'.esc_html__('Turn ON the channel to see live stats.','wpestream').'</div>';
566 print '<div class="wpstream_tooltip">'.esc_html__('Live Statistics','wpestream').'</div>';
567
568 print'<svg width="50" height="42" viewBox="0 0 50 42" fill="none" xmlns="http://www.w3.org/2000/svg">
569 <path fill-rule="evenodd" clip-rule="evenodd" d="M48.9001 9.02344H40.3342C39.7288 9.02344 39.2344 9.51791 39.2344 10.1233V40.4275C39.2344 41.033 39.7288 41.5274 40.3342 41.5274H48.9001C49.5055 41.5274 50 41.0329 50 40.4275V10.1233C50 9.51791 49.5055 9.02344 48.9001 9.02344V9.02344Z" fill="black"/>
570 <path fill-rule="evenodd" clip-rule="evenodd" d="M35.821 22.4067H27.2551C26.6497 22.4067 26.1553 22.9012 26.1553 23.5066V40.4277C26.1553 41.0332 26.6497 41.5276 27.2551 41.5276H35.821C36.4264 41.5276 36.9209 41.0332 36.9209 40.4277V23.5066C36.9209 22.9012 36.4264 22.4067 35.821 22.4067V22.4067Z" fill="black"/>
571 <path fill-rule="evenodd" clip-rule="evenodd" d="M22.7439 0H14.178C13.5726 0 13.0781 0.494478 13.0781 1.09989V40.4275C13.0781 41.0329 13.5726 41.5274 14.178 41.5274H22.7439C23.3493 41.5274 23.8438 41.0329 23.8438 40.4275V1.09989C23.8438 0.49447 23.3493 0 22.7439 0V0Z" fill="black"/>
572 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.66573 15.2559H1.09987C0.49445 15.2559 -2.24584e-05 15.7512 -2.24584e-05 16.3558V40.4285C-2.24584e-05 41.0331 0.495325 41.5284 1.09987 41.5284H9.66573C10.2703 41.5284 10.7656 41.034 10.7656 40.4285V16.3558C10.7656 15.7503 10.2711 15.2559 9.66573 15.2559V15.2559Z" fill="black"/>
573 </svg>';
574 print '</a>';
575 print '</div>';
576
577 print '<div class="wpstream_options_col2">';
578 if($is_front==''){
579 print '<div class="wpstream_show_settings wpstream-button-icon wpstream-trigger-modal wpstream_tooltip_wrapper" data-modal="wpestate_settings_modal" data-show-id="'.$the_id.'" value="'.esc_html__('Settings','wpstream').'">';
580
581 print '<div class="wpstream_tooltip_disabled">'.esc_html__('Turn OFF the channel to change its settings.','wpestream').'</div>';
582 print '<div class="wpstream_tooltip">'.esc_html__('Channel Settings','wpestream').'</div>';
583
584 print '<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
585 <path d="M49.22 21.8648C48.82 21.6099 45.665 19.7247 44.415 19.15L42.8651 15.4C43.3251 14.1601 44.2099 10.6849 44.3652 10.0798H44.3649C44.4911 9.52035 44.3213 8.93514 43.9149 8.52987L41.47 6.09995C41.0658 5.69189 40.4795 5.52168 39.9201 5.65003C39.4601 5.75501 35.92 6.64994 34.5999 7.15012L30.8499 5.60021C30.3048 4.40012 28.4699 1.32529 28.1351 0.795199V0.79485C27.8337 0.301688 27.298 0.00069643 26.7201 0H23.2798C22.7057 0.000348769 22.1718 0.294715 21.8648 0.779859C21.6098 1.1799 19.7247 4.33487 19.15 5.58487L15.4 7.13478C14.1601 6.67476 10.6849 5.78996 10.0798 5.63469V5.63504C9.52035 5.50878 8.93513 5.67864 8.52987 6.08496L6.09995 8.52988C5.69189 8.9341 5.52168 9.52042 5.65003 10.0798C5.75501 10.5398 6.64994 14.0799 7.15012 15.4L5.60021 19.15C4.40012 19.6951 1.32529 21.53 0.795198 21.8648H0.79485C0.301688 22.1662 0.00069643 22.7019 0 23.2798V26.7149C0.000348751 27.2893 0.294715 27.8233 0.779858 28.1299C1.1799 28.3849 4.33486 30.27 5.58487 30.8448L7.13478 34.5948C6.67475 35.8347 5.78996 39.3099 5.63469 39.915H5.63504C5.50878 40.4747 5.67863 41.06 6.08496 41.4649L8.51487 43.8948V43.8951C8.9191 44.3032 9.50541 44.4731 10.0648 44.3451C10.5248 44.2401 14.0649 43.3451 15.385 42.845L19.135 44.3949C19.6801 45.595 21.515 48.6698 21.8498 49.1999C22.1525 49.6997 22.6956 50.0035 23.2798 50H26.7149C27.2893 49.9996 27.8233 49.7053 28.1299 49.2201C28.3849 48.8201 30.27 45.6651 30.8447 44.4151L34.5947 42.8652C35.8347 43.3252 39.3098 44.21 39.9149 44.3653V44.3649C40.4747 44.4912 41.0599 44.3213 41.4649 43.915L43.8948 41.4851H43.8951C44.3032 41.0809 44.473 40.4945 44.345 39.9352C44.2401 39.4751 43.3451 35.9351 42.8449 34.615L44.3949 30.865C45.5949 30.3198 48.6698 28.485 49.1999 28.1501C49.6997 27.8474 50.0034 27.3044 49.9999 26.7201V23.2799C50.0045 22.7047 49.7087 22.1683 49.2201 21.8649L49.22 21.8648ZM24.9995 35.8845C22.1099 35.882 19.3399 34.7314 17.2985 32.6866C15.2572 30.6414 14.1118 27.8694 14.1146 24.9798C14.1171 22.0903 15.2676 19.3199 17.3125 17.2785C19.3577 15.2372 22.1297 14.0921 25.0193 14.0946C27.9088 14.0974 30.6792 15.2477 32.7205 17.2928C34.7619 19.338 35.907 22.1101 35.9045 24.9996C35.8978 27.8879 34.7462 30.6557 32.7021 32.6964C30.6576 34.7367 27.8876 35.8834 24.9994 35.8845H24.9995Z" fill="black"/>
586 </svg>
587 </div>';
588
589
590 print '<a href="'.get_edit_post_link($the_id).'" class="wpstream_edit_channel wpstream-button-icon wpstream_tooltip_wrapper" target="_blank" data-show-id="'.$the_id.'"">';
591 print '<div class="wpstream_tooltip">'.esc_html__('Edit Channel','wpestream').'</div>';
592 print '<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
593 <path d="M44.8203 1.79549C42.4263 -0.598498 38.5591 -0.598498 36.1651 1.79549L4.67494 33.2246C4.55203 33.3475 4.49079 33.4088 4.42954 33.5317C4.42954 33.5317 4.42954 33.5929 4.36829 33.5929C4.30705 33.7159 4.24539 33.7771 4.24539 33.9V33.9613L0.0711091 47.5886C-0.113044 48.264 0.0711092 48.9389 0.500659 49.4301C0.868966 49.7984 1.29852 49.9826 1.78973 49.9826C1.97388 49.9826 2.15804 49.9826 2.34219 49.9213L15.9085 45.747H15.9697C16.0926 45.6858 16.2151 45.6858 16.2768 45.6241C16.2768 45.6241 16.338 45.6241 16.338 45.5629C16.4609 45.5016 16.5834 45.44 16.6451 45.3175L48.0742 13.8884C50.4682 11.4944 50.4682 7.62715 48.0742 5.23316L44.8203 1.79549Z" fill="black"/>
594 </svg>';
595 print '</a>';
596 }
597
598 print '<a href="'.get_permalink($the_id).'" target="_blank" class="wpstream_view_channel wpstream-button-icon wpstream_tooltip_wrapper" data-show-id="'.$the_id.'"">';
599 print '<div class="wpstream_tooltip">'.esc_html__('View Channel','wpestream').'</div>';
600 print '<svg width="50" height="32" viewBox="0 0 50 32" fill="none" xmlns="http://www.w3.org/2000/svg">
601 <path d="M18.6201 15.2828H21.8752C21.8752 14.069 22.8681 13.0207 24.1373 13.0207V9.76562C21.1032 9.76562 18.6201 12.2487 18.6201 15.2828Z" fill="black"/>
602 <path d="M24.855 0C12.9378 0 3.28272 10.9792 0.579292 14.3447C-0.193097 15.2826 -0.193097 16.662 0.579292 17.6553C3.28282 21.0208 12.9378 32 24.855 32C36.7722 32 46.4273 21.0208 49.1307 17.6553C49.9031 16.7174 49.9031 15.338 49.1307 14.3447C46.4275 10.9792 36.7722 0 24.855 0V0ZM24.855 25.8205C19.4482 25.8205 15.0344 21.4067 15.0344 15.9999C15.0344 10.5931 19.4482 6.17927 24.855 6.17927C30.2618 6.17927 34.6756 10.5931 34.6756 15.9999C34.6756 21.4067 30.2618 25.8205 24.855 25.8205Z" fill="black"/>
603 </svg>';
604 print '</a>';
605
606
607 print '<div class="wpstream_share_channel wpstream-button-icon wpstream-trigger-modal wpstream_tooltip_wrapper" data-modal="wpestate_share_modal" data-show-id="'.$the_id.'"">';
608 print '<div class="wpstream_tooltip">'.esc_html__('Share Channel','wpestream').'</div>';
609 print '<svg width="44" height="50" viewBox="0 0 44 50" fill="none" xmlns="http://www.w3.org/2000/svg">
610 <path d="M20.0777 20.5087L24.3481 17.9427C26.6432 16.5645 29.4554 16.2443 31.96 17.198C33.443 17.7642 35.1166 17.9363 36.852 17.6105C40.3163 16.9521 43.1162 14.1831 43.8115 10.7248C45.0606 4.51597 39.7751 -0.910703 33.5907 0.12835C30.2924 0.682061 27.5604 3.16211 26.5942 6.36168C26.4405 6.86646 26.3418 7.35835 26.2804 7.84466C25.9482 10.5028 24.2498 12.8044 21.9547 14.1827L19.3458 15.7456C17.1061 17.0869 14.3986 17.1792 11.9494 16.2748C10.9956 15.9241 9.96159 15.7271 8.88507 15.7271C3.39004 15.7271 -0.960663 20.7607 0.184097 26.4527C0.879447 29.911 3.67936 32.68 7.14364 33.3384C8.87902 33.6706 10.5525 33.492 12.0356 32.9259C14.5402 31.9721 17.3461 32.2919 19.6475 33.6706L23.906 36.2241C25.346 37.0855 26.2195 38.6424 26.2195 40.3159V40.3403C26.2195 45.8229 31.2287 50.1611 36.9018 49.0472C40.3602 48.3703 43.1415 45.583 43.8244 42.1246C44.9383 36.451 40.6 31.4423 35.1175 31.4423C34.0406 31.4423 33.007 31.6394 32.0532 31.9901C29.604 32.8944 26.9029 32.8022 24.6627 31.4608L20.0721 28.7038C18.6445 27.8484 17.7706 26.304 17.7706 24.6364V24.5875C17.7642 22.9208 18.6441 21.37 20.0777 20.5085L20.0777 20.5087Z" fill="black"/>
611 </svg>';
612 print '</div>';
613 print '</div>';
614
615
616
617
618
619
620 $this->wpstream_display_modal_seetings($the_id);
621 $this->wpstream_display_modal_share($the_id);
622 $this->wpstream_display_modal_broadcast($the_id,$external_software_streaming_class,$obs_uri,$obs_stream);
623
624 print '</div>';
625
626 }
627
628
629
630 /*
631 *
632 * Close modal button
633 *
634 */
635
636 public function wpstream_close_modal_button(){
637 print '<div class="wpstream_close_modal"></div>';
638 }
639
640 /*
641 *
642 * Display modal settings
643 *
644 */
645
646 public function wpstream_display_modal_seetings($the_id){
647 print '<div class="wpstream_modal_form wpestate_settings_modal">';
648 $this->wpstream_close_modal_button();
649 print '<h3>';
650 printf( esc_html__('Channel Settings (#ID %s)','wpstream'),$the_id);
651 print '</h3>';
652 $local_event_options = get_post_meta($the_id,'local_event_options',true);
653 if(!is_array($local_event_options)){
654 $local_event_options = get_option('wpstream_user_streaming_global_channel_options') ;
655 }
656
657 $local_array_exclude=array('ses_encrypt','vod_domain_lock','vod_encrypt');
658
659 print '<div class="wpstream_event_streaming_local">';
660 $this->user_streaming_global_channel_options('',$local_event_options, $local_array_exclude);
661 print '</div>';
662 print '</div>';
663 }
664
665
666 /*
667 *
668 * Display share settings
669 *
670 */
671 public function wpstream_display_modal_share($the_id){
672 print '<div class="wpstream_modal_form wpestate_share_modal">';
673 $this->wpstream_close_modal_button();
674 print '<h3>'.esc_html__('Share your Channel','wpstream').'</h3>';
675 $this->wpstream_social_share($the_id);
676 print '</div>';
677 }
678
679
680 /*
681 *
682 * Display broadcast modal
683 *
684 */
685
686 public function wpstream_display_modal_broadcast($the_id,$external_software_streaming_class,$obs_uri,$obs_stream){
687 print '<div class="wpstream_modal_form wpestate_broadcast_modal">';
688 $this->wpstream_close_modal_button();
689 print '<h3>'.esc_html__('Go Live with External Streaming App','wpstream').'</h3>';
690
691 print '<div class="wpstream_modal_explanations">'.esc_html__('Please choose your RTMP encoder/broadcaster','wpstream').'</div>';
692
693 print '<select class="wpstream_external_broadcast_options">';
694 print '<option value="wpstream_obs_settings">'.esc_html('OBS','wpstream').'</option>';
695 print '<option value="wpstream_streamyard_settings">'.esc_html('StreamYard','wpstream').'</option>';
696 print '<option value="wpstream_restream_settings">'.esc_html('Restream','wpstream').'</option>';
697 print '<option value="wpstream_wimx_settings">'.esc_html('vMix','wpstream').'</option>';
698 print '<option value="wpstream_wirecast_settings">'.esc_html('Wirecast','wpstream').'</option>';
699 print '<option value="wpstream_xplit_settings">'.esc_html('XSplit','wpstream').'</option>';
700 print '<option value="wpstream_larix_settings">'.esc_html('Larix Broadcaster','wpstream').'</option>';
701
702 print '</select>';
703
704 $this->wpstream_obs_settings($obs_uri,$obs_stream);
705 $this->wpstream_streamyard_settings($obs_uri,$obs_stream);
706 $this->wpstream_restream_settings($obs_uri,$obs_stream);
707 $this->wpstream_wmix_settings($obs_uri,$obs_stream);
708 $this->wpstream_wirecast_settings($obs_uri,$obs_stream);
709 $this->wpstream_xplit_settings($obs_uri,$obs_stream);
710 $this->wpstream_larix_settings($obs_uri,$obs_stream);
711
712 print '</div>';
713 }
714
715
716
717
718 /*
719 *
720 * Display OBS settings
721 *
722 */
723
724 public function wpstream_obs_settings($obs_uri,$obs_stream){
725
726 print '<div class="external_software_streaming wpstream_obs_settings" style="display:block;">';
727
728 print '<div class="external_software_streaming_details">';
729 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('Server:').' </strong>';
730 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
731 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
732
733 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream Key:').' </strong>
734 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
735 print '</div>';
736
737 print'</div>';
738
739 print ' <div class="wpstream_modal_explanations">';
740 print '<ul>
741 <li>1. Click Settings in the OBS Window and then Select Stream.</li>
742 <li>2. Choose Custom Streaming Server in the Stream Type dropdown menu.</li>
743 <li>3. In the URL box, type/paste your Server.</li>
744 <li>4. In the Stream key, type/paste your Stream key.</li>
745 <li>5. Save changes.Close the Settings window and click on the “Start Streaming” button in the main window of OBS.</li></ul>';
746
747 print '</div>';
748
749
750 print'</div>';
751 }
752
753 /*
754 *
755 * Display StreamYard settings
756 *
757 */
758
759 public function wpstream_streamyard_settings($obs_uri,$obs_stream){
760
761 print '<div class="external_software_streaming wpstream_streamyard_settings">';
762
763 print '<div class="external_software_streaming_details">';
764 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('RTMP server URL:').' </strong>';
765 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
766 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
767
768 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream key:').' </strong>
769 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
770 print '</div>';
771
772 print'</div>';
773
774 print ' <div class="wpstream_modal_explanations">';
775 print '<ul>
776 <li>1. Set up your destination by going to your StreamYard account.</li>
777 <li>2. Choose "Custom RTMP" and add the RTMP server URL and Stream key from WpStream.</li>
778 <li>3. Go to "Broadcasts" then "create a broadcast".</li>
779 <li>4. Enter Live Studio.</li>
780 <li>5. Adjust all your preferred settings and Click on "Go Live".</li></ul>';
781
782 print '</div>';
783
784
785 print'</div>';
786 }
787
788
789
790 /*
791 *
792 * Display StreamYard settings
793 *
794 */
795
796 public function wpstream_restream_settings($obs_uri,$obs_stream){
797
798 print '<div class="external_software_streaming wpstream_restream_settings">';
799
800 print '<div class="external_software_streaming_details">';
801 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('RTMP URL:').' </strong>';
802 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
803 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
804
805 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream key:').' </strong>
806 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
807 print '</div>';
808
809 print'</div>';
810
811 print ' <div class="wpstream_modal_explanations">';
812 print '<ul>
813 <li>1. Go to your Restream account and set up a destination or channel.</li>
814 <li>2. Choose "Custom RTMP" and add the RTMP URL and Stream Key from WpStream.</li>
815 <li>3. Click on "Add Channel".</li>
816 <li>4. Enter Live Studio.</li>
817 <li>5. Adjust your preferred settings and Go Live.</li></ul>';
818
819 print '</div>';
820
821
822 print'</div>';
823 }
824
825
826
827 /*
828 *
829 * Display Xplit settings
830 *
831 */
832
833
834 public function wpstream_xplit_settings($obs_uri,$obs_stream){
835 print '<div class="external_software_streaming wpstream_xplit_settings" style="display:none;">';
836 print '<div class="external_software_streaming_details">';
837 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('RTMP Url:').' </strong>';
838 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
839 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
840
841 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream Key:').' </strong>
842 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
843 print '</div>';
844
845 print'</div>';
846
847 print ' <div class="wpstream_modal_explanations">';
848 print '<ul>
849 <li>1. Click Broadcast in the XSplit Window and then click "Set up a new output".</li>
850 <li>2. Choose Custom RTMP in the Set up a new output dropdown menu.</li>
851 <li>3. In the URL box, type/paste your RTMP Url.</li>
852 <li>4. In the Stream key, type/paste your Stream key.</li>
853 <li>5. Save changes and click on the “Stream” button in the main window.</li></ul>';
854 print '</div>';
855
856 print '</div>';
857 }
858
859
860
861 /*
862 *
863 * Display WireCast settings
864 *
865 */
866
867
868 public function wpstream_wirecast_settings($obs_uri,$obs_stream){
869 print '<div class="external_software_streaming wpstream_wirecast_settings" style="display:none;">';
870
871 print '<div class="external_software_streaming_details">';
872 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('Address:').' </strong>';
873 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
874 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
875
876 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream:').' </strong>
877 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
878 print '</div>';
879
880 print'</div>';
881
882 print ' <div class="wpstream_modal_explanations">';
883 print '<ul>
884 <li>1. Click Output on the top of the screen and then Select Output Settings.</li>
885 <li>2. In the destination, choose RTMP Server and click OK.</li>
886 <li>3. In the Address box, type/paste your Address.</li>
887 <li>4. In the Stream box, type/paste your Stream key.</li>
888 <li>5. Click on OK to save changes just click the Output on the top of the screen and then Start/Stop Broadcasting.</li></ul>';
889 print '</div>';
890
891 print '</div>';
892 }
893
894
895
896 /*
897 *
898 * Display Larix settings
899 *
900 */
901
902
903 public function wpstream_larix_settings($obs_uri,$obs_stream){
904 print '<div class="external_software_streaming wpstream_larix_settings" style="display:none;">';
905 $larix_rtmp=$obs_uri.$obs_stream;
906 print '<div class="external_software_streaming_details">';
907 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('RTMP:').'</strong>';
908 print '<div class="wpstream_live_uri_text wpstream_larix_rtmp"></div>
909 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
910
911 print '</div>';
912
913 print'</div>';
914
915 print ' <div class="wpstream_modal_explanations">';
916 print '<ul>
917 <li>A. Scan the QR code.</li>
918 <li>or</li>
919 <li>B. Manually configure Larix with the above RTMP</li>';
920 if(wp_is_mobile() ){
921 print '
922 <li>or</li>
923 <li>C. Click on the button below </li></ul>';
924 }
925
926
927 print '</div>';
928
929
930 print '<img class="print_qrcode" src="" />';
931 if(wp_is_mobile() ){
932 print '<a href="" class="wpstream_start_with_larix_mobile" >Start Streaming with Larix</a>';
933 }
934
935
936
937 print '</div>';
938 }
939
940
941
942
943 /*
944 *
945 * Display Wmix settings
946 *
947 */
948
949
950 public function wpstream_wmix_settings($obs_uri,$obs_stream){
951 print '<div class="external_software_streaming wpstream_wimx_settings" style="display:none;">';
952
953 print '<div class="external_software_streaming_details">';
954 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('URL:').' </strong>';
955 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
956 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
957
958 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream Key:').' </strong>
959 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
960 print '</div>';
961
962 print'</div>';
963
964 print ' <div class="wpstream_modal_explanations">';
965 print '<ul>
966 <li>1. Click on the gear icon near the stream button on the bottom.</li>
967 <li>2. Choose a custom RTMP Server in destination.</li>
968 <li>3. In the URL box, type/paste your URL.</li>
969 <li>4. In the Stream key, type/paste your Stream key.</li>
970 <li>5. Save changes. You can start streaming by clicking on the stream button at the bottom of the dashboard.</li></ul>';
971 print '</div>';
972
973 print '</div>';
974 }
975
976
977
978 /*
979 * Set Settings
980 *
981 *
982 */
983
984 public function wpstream_settings(){
985
986 if($_SERVER['REQUEST_METHOD'] === 'POST'){
987 $allowed_html = array();
988 $exclude_array = array();
989 $allowed_html = array();
990
991
992
993 if( isset($_POST['user_streaming_channel_type_hidden']) && intval($_POST['user_streaming_channel_type_hidden'])==1 && !isset($_POST['stream_role']) ){
994 update_option( sanitize_key('wpstream_stream_role'), '' );
995 }
996
997 foreach($_POST as $variable=>$value){
998 if ($variable!='submit'){
999 if (!in_array($variable, $exclude_array) ){
1000 update_option( sanitize_key('wpstream_'.$variable), sanitize_text_field ($value) );
1001 }
1002
1003 if($variable=='stream_role'){
1004 update_option( sanitize_key('wpstream_stream_role'), $value );
1005 }
1006
1007 }
1008 }
1009
1010
1011 if( isset($_GET['tab']) && $_GET['tab']=='default_options' ){
1012 $event_settings=array();
1013 foreach($this->global_event_options as $key=>$option){
1014 $event_settings[$key]='';
1015 if(isset($_POST['wpstream_event_set_'.$key]) && $_POST['wpstream_event_set_'.$key]=='on'){
1016 $event_settings[$key]=1;
1017 }else{
1018 $event_settings[$key]=0;
1019 }
1020 }
1021 update_option('wpstream_user_streaming_global_channel_options',$event_settings);
1022 }
1023
1024
1025
1026
1027 // reset permalinkgs
1028 global $wp_rewrite;
1029
1030 update_option( "rewrite_rules", FALSE );
1031 $wp_rewrite->flush_rules( true );
1032
1033 }
1034
1035 $wpstream_settings_array =array(
1036 1 => array(
1037 'tab' => 'general_options',
1038 'label' => esc_html__('Slug for free video/channel pages ','wpstream'),
1039 'name' => 'free_media_slug',
1040 'type' => 'text',
1041 'details' => esc_html__('This will replace the default "wpstream" of all your free video/channel urls. Special characters like "&" are not permitted. To have your new slug show up you need to re-save the "Permalinks Settings" under Settings -> Permalinks, even if not making any changes.','wpstream'),
1042 ),
1043
1044 2 => array(
1045 'tab' => 'general_options',
1046 'label' => esc_html__('Non-Admin User Roles Allowed to Broadcast','wpstream'),
1047 'name' => 'stream_role',
1048 'type' => 'user_roles',
1049 'details' => esc_html__('These types of users can stream via frontend shortcodes / blocks. Single individual channels are automaticlally created for streaming by non-admins.','wpstream'),
1050
1051 ),
1052 3 => array(
1053 'tab' => 'general_options',
1054 'label' => esc_html__('Non Admin Streamers Channel Type.','wpstream'),
1055 'name' => 'user_streaming_channel_type',
1056 'type' => 'select',
1057 'select_values'=>array(
1058 'free' => esc_html__('Free Live Channel','wpstream'),
1059 'paid' => esc_html__('Pay-Per-View','wpstream')
1060 ),
1061 'details' => esc_html__('Choose whether the channels assigned to non-admins are free-for-all or pay-per-view (WooCommerce product).','wpstream'),
1062 ),
1063
1064 4 => array(
1065 'tab' => 'general_options',
1066 'label' => esc_html__('Default Pay-Per-View Price','wpstream'),
1067 'name' => 'user_streaming_default_price',
1068 'type' => 'text',
1069 'details' => esc_html__('Default price of pay-per-view channels assigned to non-admins.','wpstream'),
1070 ),
1071
1072
1073
1074 6 => array(
1075 'tab' => 'subscription_options',
1076 'label' => esc_html__('Use Global Subscription Mode','wpstream'),
1077 'name' => 'global_sub',
1078 'type' => 'slidertoogle',
1079 'details' => esc_html__('If enabled, a client can access all the media products (live and VOD) by purchasing a single subscription. The "WooCommerce Subscriptions" plugin is required.','wpstream'),
1080 ),
1081
1082 7 => array(
1083 'tab' => 'subscription_options',
1084 'label' => esc_html__('Subscription ID for Global Subscription Mode','wpstream'),
1085 'name' => 'global_sub_id',
1086 'type' => 'text',
1087 'details' => esc_html__('ID of the subscription product to be purchased for global access to media. All non-subscription video products that are not already attached to a subscription will be accessible to users that have purchased it.','wpstream'),
1088 ),
1089 8 => array(
1090 'tab' => 'messages_options',
1091 'label' => esc_html__('PPV not logged in message','wpstream'),
1092 'name' => 'product_not_login',
1093 'type' => 'text',
1094 'details' => esc_html__('This message will be displayed on top of the media player for pay-per-view items when user is not logged in.','wpstream'),
1095 'default' => esc_html__('You must be logged in to watch this video.','wpstream'),
1096 ),
1097 9 => array(
1098 'tab' => 'messages_options',
1099 'label' => esc_html__('PPV not purchased message','wpstream'),
1100 'name' => 'product_not_bought',
1101 'type' => 'text',
1102 'details' => esc_html__('This message will be displayed on top of the media player for common pay-per-view items that have not been purchased.','wpstream'),
1103 'default' => esc_html__('You did not yet purchase this item.','wpstream'),
1104 ),
1105 10 => array(
1106 'tab' => 'messages_options',
1107 'label' => esc_html__('Subscription not purchased message','wpstream'),
1108 'name' => 'product_not_subscribe',
1109 'type' => 'text',
1110 'details' => esc_html__('This message will be displayed on top of the media player for subscription-type pay-per-view items that have not been purchased.','wpstream'),
1111 'default' => esc_html__(' You did not yet subscribe to this item.','wpstream'),
1112 ),
1113 11 => array(
1114 'tab' => 'messages_options',
1115 'label' => esc_html__('Thank you message','wpstream'),
1116 'name' => 'product_thankyou',
1117 'type' => 'text',
1118 'details' => esc_html__('This message will be displayed on the thank you page (after purchase) and the confirmation email.','wpstream'),
1119 'default' => esc_html__('Thanks for your purchase. You can access your item at any time by visiting the following page: {item_link}','wpstream'),
1120 ),
1121
1122 12 => array(
1123 'tab' => 'messages_options',
1124 'label' => esc_html__('Thank you message','wpstream'),
1125 'name' => 'subscription_active',
1126 'type' => 'text',
1127 'details' => esc_html__('This message will be displayed on subscription product page.','wpstream'),
1128 'default' => esc_html__('Your Subscription is Active','wpstream'),
1129 ),
1130
1131 99 => array(
1132 'tab' => 'default_options',
1133 'label' => esc_html__('Events Options ','wpstream'),
1134 'name' => 'user_streaming_global_channel_options',
1135 'type' => 'user_streaming_global_channel_options',
1136 'details' => esc_html__('Global Options for live events.','wpstream'),
1137 ),
1138 );
1139
1140 $active_tab = 'general_options';
1141 if( isset( $_GET[ 'tab' ] ) ) {
1142 $active_tab = $_GET[ 'tab' ];
1143 }
1144
1145
1146 print '<div class="theme_options_tab_wpstream" style="display:block;" >
1147 <h1>'.__('WpStream Settings','wpstream').'</h1>
1148 <form method="post" action="" >';
1149
1150 print '<h2 class="nav-tab-wrapper">
1151 <a href="?page=wpstream_settings&tab=general_options" class="nav-tab '; echo $active_tab == 'general_options' ? 'nav-tab-active' : ''; echo '">General Options</a>
1152 <a href="?page=wpstream_settings&tab=default_options" class="nav-tab '; echo $active_tab == 'default_options' ? 'nav-tab-active' : ''; echo '">Default Channel Settings</a>
1153 <a href="?page=wpstream_settings&tab=subscription_options" class="nav-tab '; echo $active_tab == 'subscription_options' ? 'nav-tab-active' : ''; echo '">Subscription Options</a>
1154 <a href="?page=wpstream_settings&tab=messages_options" class="nav-tab '; echo $active_tab == 'messages_options' ? 'nav-tab-active' : ''; echo '">Customize Messages</a>
1155
1156 </h2>';
1157
1158 print '<div class="wpstream_option_wrapper">';
1159 foreach ($wpstream_settings_array as $key=>$option){
1160 if($option['tab']!=$active_tab){
1161 continue;
1162 }
1163
1164 print '<div class="wpstream_option">';
1165 $options_value = get_option('wpstream_'.$option['name']) ;
1166
1167
1168 if($option['type']=='user_roles'){
1169
1170 print '<label for="'.$option['name'].'">'.$option['label'].'</label>';
1171 print $this->wpstream_select_user_roles($option['name'],$options_value);
1172 print '<div class="settings_details">'.$option['details'].'</div>';
1173
1174 }else if($option['type']=='user_streaming_global_channel_options'){
1175
1176 $exclude_array=array();
1177 $this->user_streaming_global_channel_options($option['name'],$options_value,$exclude_array);
1178
1179
1180 }else if($option['type']=='text'){
1181
1182 if($options_value==''){
1183 $options_value='';
1184 if(isset($option['default'])){
1185 $options_value=$option['default'];
1186 }
1187 }
1188
1189 print '<label for="'.$option['name'].'">'.$option['label'].'</label>';
1190 print '<input id="'.$option['name'].'" type="'.$option['type'].'" size="36" name="'.$option['name'].'" value="'.esc_attr($options_value).'" />';
1191 print '<div class="settings_details">'.$option['details'].'</div>';
1192
1193 } else if($option['type']=='select'){
1194
1195 print '<label for="'.$option['name'].'">'.$option['label'].'</label>';
1196 print '<select id="'.$option['name'].'" name="'.$option['name'].'" >';
1197 foreach($option['select_values'] as $key=>$value){
1198 print '<option value="'.$key.'" ';
1199 if( $key == esc_html($options_value) ){
1200 print ' selected ';
1201 }
1202 print '>'.$value.'</option>';
1203 }
1204 print '</select>';
1205 print '<input type="hidden" name="'.$option['name'].'_hidden" value="1" >';
1206 print '<div class="settings_details">'.$option['details'].'</div>';
1207
1208 } else if($option['type']=='slidertoogle'){
1209 print '<label for="'.$option['name'].'">'.$option['label'].'</label>';
1210 print '<label class="wpstream_switch">
1211 <input type="hidden" class="wpstream_event_option_itemc" value="0" name="'.$option['name'].'" >
1212 <input type="checkbox" class="wpstream_event_option_itemc" value="1" name="'.$option['name'].'" ';
1213
1214 if( intval($options_value) !==0 ){
1215 print ' checked ';
1216 }
1217
1218
1219
1220 print '> <span class="slider round"></span>';
1221 print '</label>';
1222 print '<div class="settings_details">'.$option['details'].'</div>';
1223 }
1224 print '</div>';
1225 }
1226 print '</div>';
1227
1228
1229 print '<input type="submit" name="submit" class="wpstream_button wpstream_button_action" value="'.__('Save Changes','wpstream').'" />';
1230
1231
1232 print '</form>';
1233 print '</div>';
1234
1235 }
1236
1237
1238
1239 /**
1240 * Set user roles
1241 *
1242 * @since 3.0.1
1243 */
1244
1245 public function user_streaming_global_channel_options($name,$value,$local_array=''){
1246
1247 foreach($this->global_event_options as $key=>$option){
1248
1249 if( is_array($local_array) && !in_array($key,$local_array)){
1250 print '<div class="wpstream_setting_event_unit_wrapper">';
1251
1252 print '<label for="'.$option['name'].'">'.$option['name'].'</label>';
1253
1254 print '
1255 <label class="wpstream_switch">
1256 <input type="checkbox" class="wpstream_event_option_item" data-attr-ajaxname="'.esc_attr($key).'" name="wpstream_event_set_'.esc_attr($key).'" ';
1257 if( isset($value[$key]) ){
1258 if( intval($value[$key]) !==0 ){
1259 print ' checked ';
1260 }
1261 }else{
1262 if($option['defaults']=='yes') {
1263 print ' checked ';
1264 }
1265 }
1266
1267
1268 print '> <span class="slider round"></span>';
1269 print '</label>';
1270 print '<div class="settings_details">'.$option['details'].'</div>';
1271
1272
1273 print '</div>';
1274 }
1275 }
1276
1277
1278 }
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288 /*
1289 * Set user roles
1290 *
1291 * @since 3.0.1
1292 */
1293
1294 public function wpstream_select_user_roles($name,$value){
1295 if($value==''){
1296 $value=array();
1297 }
1298
1299 $roles = get_editable_roles();
1300 $return = '<select id="wpstream_user_roles" name="'.esc_html($name).'[]" multiple>';
1301 unset( $roles['administrator'] );
1302
1303 foreach ($roles as $key=>$role){
1304 $return .= '<option value="'.$key.'" ';
1305 if( in_array($key, $value) ){
1306 $return .= ' selected ';
1307 }
1308 $return .= '>'.$role['name'].'</option>';
1309 }
1310 $return .= '</select>';
1311
1312
1313 return $return;
1314 }
1315
1316
1317 /*
1318 * Set credential admin function
1319 *
1320 * @since 3.0.1
1321 */
1322 public function wpstream_set_wpstream_credentials(){
1323
1324 if($_SERVER['REQUEST_METHOD'] === 'POST'){
1325 $allowed_html = array();
1326 $exclude_array = array();
1327 $allowed_html = array();
1328
1329 foreach($_POST as $variable=>$value){
1330 if ($variable!='submit'){
1331 if (!in_array($variable, $exclude_array) ){
1332 update_option( sanitize_key('wpstream_'.$variable), wp_kses ($value,$allowed_html) );
1333 }
1334 }
1335 }
1336
1337
1338
1339
1340 update_option('wp_estate_token_expire',0);
1341 update_option('wp_estate_curent_token',' ');
1342 delete_transient( 'wpstream_token_api');
1343 delete_transient('wpstream_token_request_30');
1344 delete_transient('wpstream_request_pack_data_per_user_transient');
1345 }
1346
1347
1348 $allowed_html = array();
1349
1350
1351
1352 $wpstream_options_array =array(
1353 2 => array(
1354 'label' => 'WpStream.net Username or Email',
1355 'name' => 'api_username',
1356 'type' => 'text',
1357 ),
1358 3 => array(
1359 'label' => 'WpStream.net Password',
1360 'name' => 'api_password',
1361 'type' => 'password',
1362 ),
1363
1364 );
1365
1366
1367 $token = $this->main->wpstream_live_connection->wpstream_get_token();
1368 $pack_details = $this->main->wpstream_live_connection->wpstream_request_pack_data_per_user();
1369
1370 $this->main->show_user_data($pack_details);
1371
1372 print '<form method="post" action="" >';
1373 print '<div class="theme_options_tab_wpstream" style="display:block;" >
1374 <h1>'.__('WpStream Credentials','wpstream').'</h1>';
1375
1376
1377 if( get_option('wpstream_api_username')=='' || get_option('wpstream_api_password')== ' '){
1378 echo '<div class="api_not_conected wpstream_orange">'.__('To connect your plugin, enter your WpStream credentials below or go <a href="https://wpstream.net/my-account/" target="_blank">here</a> to create an account.','wpstream').'</div>';
1379 }else if($token==''){
1380 echo '<div class="api_not_conected">'.__(' Incorrect username or password. Please check your credentials or go <a href="https://wpstream.net/my-account/edit-account/" target="_blank">here</a> to reset your password.','wpstream').'</div>';
1381 }else if( $this->main->wpstream_live_connection->wpstream_client_check_api_status() ){
1382 echo '<div class="api_conected">'.__('Connected to WpStream.net!','wpstream').'</div>';
1383 }else{
1384 echo '<div class="api_not_conected wpstream_brown">'.__('Failed to connect to WpStream.net. Please address CURL connectivity with your hosting provider.','wpstream').'</div>';
1385 }
1386 print '<div class="wpstream_option_wrapper">';
1387 foreach ($wpstream_options_array as $key=>$option){
1388 print '<div class="wpstream_option">';
1389
1390 $options_value = esc_html( get_option('wpstream_'.$option['name'],'') );
1391 print '<label for="'.$option['name'].'">'.$option['label'].'</label>';
1392 print '<input id="'.$option['name'].'" type="'.$option['type'].'" size="36" name="'.$option['name'].'" value="'.esc_html($options_value).'" />';
1393
1394 print '</div>';
1395 }
1396 print '</div>';
1397
1398
1399 print '<input type="submit" name="submit" class="wpstream_button wpstream_button_action" value="'.__('Save Changes','wpstream').'" />';
1400
1401 print '<h3>Video Tutorials</h3>';
1402
1403 print '<a class="how_to_videos" target="_blank" href="https://youtu.be/9DQrxsKcpmQ">How to Live Stream to WordPress with OBS</a>';
1404 print '<a class="how_to_videos" target="_blank" href="https://youtu.be/qMSjJCskAfM">How to Live Stream to WordPress in less than 3 Minutes</a>';
1405 print '<a class="how_to_videos" target="_blank" href="https://youtu.be/h6myD_vhKcg">How to Live-Stream to WordPress using your iPhone</a>';
1406
1407 print '<a style="margin-top:10px;" href="https://www.youtube.com/channel/UCIjItiJc4Z7aJApj3W6ArJA" target="_blank" class="how_to_videos">More Tutorials On Our YouTube Channel</a>';
1408
1409
1410 print '</div>';
1411 print '</form>';
1412
1413 print '<div class="theme_options_tab_wpstream" style="display:block;" >';
1414 $link_new = admin_url('admin.php?page=wpstream_live_channels');
1415 $link_new_paid = admin_url('post-new.php?post_type=product').'&new_stream='. rawurlencode('new');
1416 $link_new_free = admin_url('post-new.php?post_type=wpstream_product');
1417
1418
1419 print '<a href="'.esc_url($link_new_free).'" class="wpstream_no_chanel_add_channel">'.esc_html__('Create new Free-To-View channel','wpstream').'</a>';
1420 print '<a href="'.esc_url($link_new_paid).'" class="wpstream_no_chanel_add_channel">'.esc_html__('Create Pay-Per-View channel','wpstream').'</a>';
1421 print '<a href="'.esc_url($link_new).'" class="wpstream_no_chanel_add_channel">'.esc_html('My Channels','wpstream').'</a>';
1422 print '</div>';
1423
1424
1425 }
1426
1427
1428
1429 /**
1430 * Media Management
1431 *
1432 * @since 3.0.1
1433 */
1434
1435 public function wpstream_media_management(){
1436 $pack_details = $this->main->wpstream_live_connection->wpstream_request_pack_data_per_user();
1437
1438 $this->main->show_user_data($pack_details);
1439
1440
1441 print '<div id="wpstream_media_upload"><h3>'.__('Upload New Recording','wpstream').'</h3>'.$this->wpstream_present_media_upload().'</div>';
1442
1443 print '<div id="wpstream_file_management"><h3 id="video_management_title">'.__('Your Recordings','wpstream').'</h3>'.$this->wpstream_present_file_management().'</div>';
1444
1445
1446 }
1447
1448
1449
1450
1451 /**
1452 *
1453 *
1454 * WpStream Pagination
1455 *
1456 * @since 3.0.1
1457 *
1458 *
1459 */
1460
1461 public function wpstream_pagination($pages , $range = 2) {
1462 $return='';
1463 $showitems = ($range * 2) + 1;
1464 $paged = ( isset( $_GET['paged'] ) ) ? intval($_GET['paged']) : 1;
1465
1466
1467 if (1 != $pages && $pages != 0) {
1468 $return.= '<ul class="pagination wpstream_pagination">';
1469 $return.= "<li class=\"roundleft\"><a href='" . get_pagenum_link($paged - 1) . "'><</a></li>";
1470
1471 $last_page = get_pagenum_link($pages);
1472 for ($i = 1; $i <= $pages; $i++) {
1473 if (1 != $pages && (!($i >= $paged + $range + 1 || $i <= $paged - $range - 1) || $pages <= $showitems )) {
1474 if ($paged == $i) {
1475 $return.= '<li class="active"><a href="' . esc_url(get_pagenum_link($i)) . '" >' . $i . '</a><li>';
1476 } else {
1477 $return.= '<li><a href="' . esc_url(get_pagenum_link($i)) . '" >' . $i . '</a><li>';
1478 }
1479 }
1480 }
1481
1482 $prev_page = get_pagenum_link($paged + 1);
1483 if (($paged + 1) > $pages) {
1484 $prev_page = get_pagenum_link($paged);
1485 } else {
1486 $prev_page = get_pagenum_link($paged + 1);
1487 }
1488
1489
1490 $return.= "<li class=\"roundright\"><a href='" . $prev_page . "'>></a><li>";
1491 $return.= "<li class=\"roundright\"><a href='" . $last_page . "'>>><li>";
1492 $return.= "</ul>";
1493 }
1494 return $return;
1495 }
1496
1497
1498
1499
1500
1501
1502 /**
1503 * Media upload
1504 *
1505 * @since 3.0.1
1506 */
1507 public function wpstream_present_media_upload(){
1508 $to_return='';
1509 $formInputs=$this->main->wpstream_live_connection->wpstream_get_signed_form_upload_data();
1510
1511
1512
1513
1514 if($formInputs['success'] === 'notenough'){
1515 $to_return.='<div class="wpstream_upload_alert">'.esc_html__('You do not have enough streaming data or storage to upload a video!','wpstream').'</div>';
1516 return $to_return;
1517 }
1518
1519 if($formInputs['success'] ===true):
1520 $to_return.='<div class="wpstream_upload_container">';
1521 $to_return.='<div id="wpstream_uploaded_mes">'.esc_html__('Please select or drop a video file. Do not close this window during the upload!','wpstream').'</div>';
1522 $to_return.='<form action="https://wpstream-video.s3.amazonaws.com/"
1523 method="POST"
1524 enctype="multipart/form-data"
1525 data-singleFileUploads="true"
1526 data-limitMultiFileUploads="1"
1527 data-limitConcurrentUploads="1"
1528 class="direct-upload">';
1529
1530 $to_return.='<input id="wpstream_upload" type="file" class="inputfile inputfile-1" value="Pick a video file" name="file" multiple>';
1531 $to_return.='<label for="wpstream_upload"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" viewBox="0 0 20 17"><path d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z"/></svg> <span id="wpstream_label_action">Choose a file&hellip;</span></label>';
1532
1533
1534 $to_return.='<div class="wpstream_file_drop_color">';
1535 $to_return.='<div class="wpstream_form_ex">'.esc_html__('Drop a video file here!','wpstream').'</div>';
1536 $to_return.='<div class="wpstream_form_ex_details">'.__('The Video File must be encoded with the following settings:
1537
1538 Container: <strong>MP4</strong>,
1539 Video codec: <strong>H264</strong>,
1540 Audio codec: <strong>AAC</strong>. Media will fail to play if it does not follow the above settings.
1541 You may use a tool like MediaInfo to verify your file. Also you may convert it with specialized software like HandBrake.','wpstream').'<strong> '.esc_html__('Accepted file extensions: .mp4, .mov','wpstream').'</strong></div>';
1542 if(is_array($formInputs)){
1543 foreach ($formInputs['ref'] as $name => $value) {
1544 $to_return.='<input type="hidden" name="'. $name.'" value="'.$value.'">';
1545 }
1546 }
1547
1548 $to_return.='
1549 <div class="progress-bar-area"></div></div>
1550 </form>';
1551
1552 $to_return.='</div>';
1553 endif;
1554
1555 return $to_return;
1556
1557 }
1558
1559
1560
1561
1562
1563 /**
1564 * Display movie list
1565 *
1566 * @since 3.0.1
1567 */
1568 public function wpstream_present_file_management(){
1569 $video_list_raw = $this->main->wpstream_live_connection->wpstream_get_videos_from_api();
1570
1571 $video_list_raw_array=array();
1572 if(isset($video_list_raw['items'])){
1573 $video_list_raw_array=$video_list_raw['items'];
1574 }
1575
1576 $keys = array_column($video_list_raw_array, 'time');
1577 array_multisort($keys, SORT_DESC , $video_list_raw_array);
1578
1579 $to_return='';
1580
1581 if(is_array($video_list_raw['items'])){
1582 foreach ($video_list_raw_array as $key =>$video){
1583
1584
1585 $video_size = intval($video['size']/1048576);
1586 $video_name = esc_html($video['name']);
1587 if($video_name!=''):
1588 $to_return.='<div class="wpstream_video_wrapper">';
1589
1590 $to_return.='<div class="wpstream_video_title">';
1591 $to_return.='<div class="wpstream_video_notice"></div></div>';
1592 $to_return.='<div class="wpstream_video_title"><strong class="storage_file_name">'.esc_html__('File Name :','wpstream').'</strong>'.'<span class="storage_file_name_real">'.$video_name.'</span><span class="storage_file_size">'.$video_size.' MB </span></div>';
1593 $to_return.=' <div class="wpstream_delete_media" ';
1594 $to_return.=' onclick="return confirm(\' Are you sure you wish to delete '.$video_name.'?\')" data-filename="'.$video_name.'">'.esc_html__('delete file','wpstream').'</div>';
1595 $to_return.='<div class="wpstream_get_download_link" data-filename="'.$video_name.'">'.esc_html__('download','wpstream').'</div>';
1596 $to_return.='<a href="" class="wpstream_download_link">'.esc_html__('Click to download! The url will work for the next 20 minutes!','wpstream').'</a>';
1597
1598 $add_free_video_url=admin_url('post-new.php?post_type=wpstream_product_vod').'&new_video_name='. rawurlencode($video_name);
1599 $add_paid_video_url=admin_url('post-new.php?post_type=product').'&new_video_name='. rawurlencode($video_name);
1600
1601
1602
1603 $to_return .='<a class="create_new_free_video" href="'.esc_url($add_free_video_url).'">'.esc_html__('Create new Free-To-View VOD from this recording').'</a>';
1604 $to_return .='<a class="create_new_ppv_video" href="'.esc_url($add_paid_video_url).'">'.esc_html__('Create new Pay-Per-View VOD from this recording').'</a>';
1605
1606 $to_return.='</div>';
1607 endif;
1608
1609 }
1610 $current_page= get_current_screen();
1611
1612
1613 } else {
1614 $to_return.= '<div class="wpstream_video_wrapper">'.esc_html__('You don\'t have any videos.','wpstream').'</div>';
1615 }
1616 return $to_return;
1617 }
1618
1619
1620 /**
1621 * Set defualt channels values
1622 *
1623 * @since 3.0.1
1624 */
1625
1626
1627
1628
1629 public function wpstream_publish_wpstream_product($post_id,$post){
1630 if( $post->post_type == 'wpstream_product' ){
1631 update_post_meta ($post_id,'local_event_options_test','working_on_'.$post_id);
1632 $to_save_option=array();
1633
1634 $global_options= get_option('wpstream_user_streaming_global_channel_options');
1635
1636 $local_events = get_post_meta ($post_id ,'local_event_options',true) ;
1637
1638 if( $local_events =='' ){
1639 if( is_array($global_options) ){
1640 foreach($global_options as $key=>$value){
1641 $to_save_option[sanitize_key($key)]=sanitize_text_field($value);
1642 }
1643
1644 update_post_meta ($post_id,'local_event_options',$to_save_option);
1645
1646 }
1647 }
1648
1649
1650 }
1651 }
1652
1653 /**
1654 * save meta options
1655 *
1656 * @since 3.0.1
1657 */
1658 public function wpstream_free_product_update_post($post_id,$post){
1659
1660 if(!is_object($post) || !isset($post->post_type)) {
1661 return;
1662 }
1663
1664
1665
1666
1667
1668
1669
1670 if( $post->post_type == 'wpstream_product' ||
1671 $post->post_type == 'wpstream_product_vod' ):
1672
1673 $allowed_keys=array(
1674 'wpstream_product_type',
1675 'wpstream_free_video',
1676 'wpstream_free_video_external'
1677 );
1678
1679
1680 foreach ($_POST as $key => $value) {
1681 if( !is_array ($value) ){
1682 if (in_array ($key, $allowed_keys)) {
1683 $postmeta = sanitize_text_field ( $value );
1684 update_post_meta($post_id, sanitize_key($key), $postmeta );
1685 }
1686 }
1687 }
1688
1689 endif;
1690
1691 }
1692
1693
1694 /**
1695 * save meta options
1696 *
1697 * @since 3.0.1
1698 */
1699 public function add_wpstream_product_metaboxes() {
1700 add_meta_box( 'add_wpstream_product_metaboxes-sectionid', __( 'Video On Demand Settings', 'wpstream' ),array($this,'display_meta_options'),'wpstream_product_vod' ,'normal','default');
1701 }
1702
1703
1704 /**
1705 * make woocomerce virtual products
1706 *
1707 * @since 3.0.1
1708 */
1709
1710
1711 public function wpstream_make_product_virtual($post_id,$post){
1712 global $post;
1713 if(isset($post->ID)){
1714 if ( $post->post_type !== 'product' ) return;
1715 $term_list = wp_get_post_terms($post->ID, 'product_type');
1716 if( $term_list[0]->name=='video_on_demand' || $term_list[0]->name=='live_stream'){
1717 update_post_meta( $post->ID, '_virtual', 'yes' );
1718 }
1719 }
1720 }
1721
1722
1723
1724 /**
1725 * render meta options
1726 *
1727 * @since 3.0.1
1728 */
1729 public function display_meta_options( $post ) {
1730 wp_nonce_field( plugin_basename( __FILE__ ), 'estate_agent_noncename' );
1731 global $post;
1732
1733 $is_live = '';
1734 $is_video = '';
1735 $is_video_external = '';
1736 if( isset( $_GET['new_video_name']) && $_GET['new_video_name']!='' ){
1737 $is_video = ' selected ';
1738 $wpstream_free_video = esc_html( $_GET['new_video_name']);
1739 }else{
1740 $wpstream_product_type = esc_html(get_post_meta($post->ID, 'wpstream_product_type', true));
1741 $wpstream_free_video = esc_html(get_post_meta($post->ID, 'wpstream_free_video', true));
1742
1743 if($wpstream_product_type==1){
1744 $is_live = ' selected ';
1745 }
1746
1747 if($wpstream_product_type==2){
1748 $is_video = ' selected ';
1749 }
1750
1751 if($wpstream_product_type==3){
1752 $is_video_external = ' selected ';
1753 }
1754 }
1755
1756 print'
1757 <p class="meta-options">
1758 <label for="wpstream_product_type">'.__('Media Type:','wpstream').' </label><br />
1759 <select id="wpstream_product_type" name="wpstream_product_type">
1760 <option value="2" '.$is_video.'>'.__('Recording','wpstream').'</option>
1761 <option value="3" '.$is_video_external.'>'.__('Self Hosted or External Video','wpstream').'</option>
1762 </select>
1763 </p>
1764 ';
1765
1766
1767 $video_list = $this->main->wpstream_live_connection->wpstream_get_videos();
1768
1769
1770 print '
1771 <p class="meta-options video_free">
1772 <label for="wpstream_free_video">'.__('Choose video:','wpstream').' </label><br />
1773 <select id="wpstream_free_video" name="wpstream_free_video">';
1774
1775 if(is_array($video_list)){
1776 foreach ($video_list as $key=>$value){
1777 print '<option value="'.$key.'"';
1778 if($wpstream_free_video === $key){
1779 print ' selected ';
1780 }
1781 print '>'.$value.'</option>';
1782 }
1783 }
1784
1785 print'
1786 </select>
1787 </p>
1788 ';
1789
1790 $wpstream_free_video_external= esc_html(get_post_meta($post->ID, 'wpstream_free_video_external', true));
1791 print '<p class="meta-options1 video_free_external">
1792 <label for="wpstream_free_video_external">'.__('Video:','wpstream').' </label><br />
1793
1794 <input id="wpstream_free_video_external" type="text" size="36" name="wpstream_free_video_external" value="'.$wpstream_free_video_external.'" />
1795 <input id="wpstream_free_video_external_button" type="button" size="40" class="upload_button button" value="'.esc_html__('Select Video','wpstream').'" />';
1796 if($wpstream_product_type==2){
1797 $show_recording='';
1798 $show_external='style="display:none"';
1799 }else{
1800 $show_recording='style="display:none"';
1801 $show_external='';
1802 }
1803 print '<p '.$show_recording.' class="wpstream_option_vod_source wpstream_show_recording">'.esc_html__('Choose one of your existing recordings.','wpstream').'</p>';
1804 print '<p '. $show_external.' class="wpstream_option_vod_source wpstream_show_external">'.esc_html__('Upload a video from your computer or paste the URL of a YouTube/Vimeo/external video.','wpstream').'</p>';
1805
1806 print '</p> ';
1807 }
1808
1809
1810
1811
1812
1813
1814
1815 /**
1816 * Add new product types to Woocommerce select product type
1817 *
1818 * @since 3.0.1
1819 */
1820 public function wpstream_add_products( $types ){
1821 $types[ 'live_stream' ] = __( 'Live Channel','wpestream' );
1822 $types[ 'video_on_demand' ] = __( 'Video On Demand','wpestream' );
1823
1824 return $types;
1825 }
1826
1827
1828
1829 /**
1830 * Js action to do when user pick live stream or video on demand
1831 *
1832 * @since 3.0.1
1833 */
1834
1835 public function wpstream_products_custom_js() {
1836 if ( 'product' != get_post_type() ) :
1837 return;
1838 endif;
1839
1840 ?>
1841 <script type='text/javascript'>
1842 jQuery( document ).ready( function() {
1843 jQuery('.options_group.pricing' ).addClass ( 'show_if_live_stream' ).show();
1844 jQuery('.options_group.pricing' ).addClass ( 'show_if_video_on_demand' ).show();
1845 jQuery('._sold_individually_field').parent().addClass('show_if_live_stream').show();
1846 jQuery('._sold_individually_field').parent().addClass('show_if_video_on_demand').show();
1847 jQuery('._sold_individually_field').show();
1848
1849 var selected = jQuery('#product-type').val();
1850 });
1851 </script>
1852 <?php
1853
1854 }
1855
1856
1857 /**
1858 * Add custom classes to the product types
1859 *
1860 * @since 3.0.1
1861 */
1862
1863 public function wpstream_hide_attributes_data_panel( $tabs) {
1864
1865 $tabs['shipping']['class'][] = 'hide_if_live_stream hide_if_video_on_demand';
1866 $tabs['inventory']['class'][] = 'show_if_live_stream show_if_video_on_demand';
1867 // $tabs['general']['class'][] = 'show_if_live_stream show_if_video_on_demand';
1868
1869 return $tabs;
1870 }
1871
1872
1873
1874 /**
1875 * Hide buy now on products if Netflix mode
1876 *
1877 * @since 3.12
1878 */
1879
1880
1881 public function wpstream_hide_buy_now_subscription_mode( $purchaseable_product_wpblog,$product){
1882 $product_id=$product->get_id();
1883
1884 $term_list = wp_get_post_terms($product_id, 'product_type');
1885
1886 $subscription_model = esc_html( get_option('wpstream_global_sub','')) ;
1887
1888 if($subscription_model==1){ // if we have Neflix mode
1889 if( $term_list[0]->name=='live_stream' || $term_list[0]->name=='video_on_demand' ){
1890 return false;
1891 }
1892 }
1893
1894 return $purchaseable_product_wpblog;
1895 }
1896
1897
1898
1899
1900
1901
1902 /**
1903 * Add custom fields to custom product types
1904 *
1905 * @since 3.0.1
1906 */
1907
1908 public function wpstream_add_custom_general_fields() {
1909
1910 global $woocommerce, $post;
1911 if(function_exists('wcs_user_has_subscription')){
1912 echo '<div class="options_group show_if_subscription">';
1913 woocommerce_wp_select(
1914 array(
1915 'id' => '_subscript_live_event',
1916 'label' => __( 'Is a subscription based live channel ?', 'woocommerce' ),
1917 'options' => array("yes"=>"yes","no"=>"no")
1918 )
1919 );
1920 echo '</div>';
1921 }
1922
1923 echo '<div class="options_group show_if_live_stream" style="border:none;"></div>';
1924 echo '<div class="options_group show_if_video_on_demand">';
1925 $selected='';
1926 if( isset( $_GET['new_video_name']) && $_GET['new_video_name']!='' ){
1927 $selected=esc_html($_GET['new_video_name']);
1928 }
1929 if($selected==''){
1930 $selected= get_post_meta($post->ID,'_movie_url',true);
1931 }
1932
1933 woocommerce_wp_select(
1934 array(
1935 'id' => '_movie_url',
1936 'label' => __( 'Library video file', 'woocommerce' ),
1937 'options' => $this->main->wpstream_live_connection->wpstream_get_videos(),
1938 'selected'=> true,
1939 'value' => $selected
1940 )
1941 );
1942
1943
1944
1945 echo '</div>';
1946
1947 if(function_exists('wcs_user_has_subscription')){
1948 $selected_sub='';
1949 echo '<div class="options_group show_if_video_on_demand show_if_live_stream">';
1950 if( isset( $_GET['wpstream_parent_sub']) && $_GET['wpstream_parent_sub']!='' ){
1951 $selected_sub=esc_html($_GET['wpstream_parent_sub']);
1952 }
1953 if($selected_sub==''){
1954 $selected_sub= get_post_meta($post->ID,'_wpstream_parent_sub',true);
1955 }
1956 woocommerce_wp_select(
1957 array(
1958 'id' => '_wpstream_parent_sub',
1959 'name' => '_wpstream_parent_sub[]',
1960 'label' => __( 'Attach to subscription', 'woocommerce' ),
1961 'options' => $this->wpstream_return_subscriptions_created(),
1962 'selected'=> true,
1963 'value' => $selected_sub,
1964 'custom_attributes' => array('multiple' => 'multiple')
1965 )
1966 );
1967
1968 echo '</div>';
1969
1970 }
1971 }
1972
1973
1974 public function wpstream_return_subscriptions_created(){
1975 $return=array('0'=>'none');
1976
1977 $args = array(
1978 'post_type' => 'product',
1979 'posts_per_page' => -1,
1980 'orderby' => 'title',
1981 'order' => 'ASC',
1982 'tax_query' => array(
1983 'relation' => 'AND',
1984 array(
1985 'taxonomy' => 'product_type',
1986 'field' => 'slug',
1987 'terms' => array( 'subscription'),
1988 )
1989 )
1990 );
1991
1992 $subscriptions = new WP_Query($args);
1993 if($subscriptions->have_posts()):
1994 while ($subscriptions->have_posts()): $subscriptions->the_post();
1995 $return[ get_the_ID() ] = get_the_title();
1996 endwhile;
1997 endif;
1998
1999 wp_reset_postdata();
2000 return $return;
2001
2002 }
2003
2004
2005
2006
2007
2008
2009 /**
2010 * Save custom fields
2011 *
2012 * @since 3.0.1
2013 */
2014
2015 public function wpstream_add_custom_general_fields_save( $post_id ){
2016
2017 $permited_values = array(
2018 '_movie_url',
2019 '_subscript_live_event',
2020 '_wpstream_parent_sub',
2021
2022 );
2023
2024
2025
2026 foreach($_POST as $key=>$value){
2027 update_post_meta( $post_id, 'event_passed', 0 );
2028 if( in_array($key, $permited_values) ){
2029 if( !empty( $_POST[$key] ) ){
2030 $key = sanitize_key($key);
2031 $value = sanitize_text_field($_POST[$key]);
2032
2033 if($key=='_wpstream_parent_sub'){
2034 $value= $_POST[$key];
2035 $value = array_map("sanitize_text_field", $value);
2036
2037 }
2038 update_post_meta( $post_id, $key, $value );
2039 }
2040 }
2041 }
2042 //die();
2043
2044 }
2045
2046 /**
2047 * Add to cart redirect
2048 *
2049 * @since 3.0.1
2050 */
2051
2052 public function wpstream_add_to_cart() {
2053 wc_get_template( 'single-product/add-to-cart/simple.php' );
2054 }
2055
2056
2057 /**
2058 * Replace add to cart button
2059 *
2060 * @since 3.0.1
2061 */
2062 public function replacing_add_to_cart_button( $button, $product ) {
2063 global $product;
2064 $product_type = $product->get_type();
2065
2066 if($product_type==='live_stream' || $product_type=='video_on_demand'){
2067 return $button = '<a class="button" href="'.get_site_url().'/shop/?add-to-cart=' .$product->get_id(). '&quantity=1">' . __( 'Add to Cart', 'woocommerce' ) . '</a>';
2068 }else{
2069 return $button;
2070 }
2071 }
2072
2073
2074 /**
2075 * Admin notices
2076 *
2077 * @since 3.0.1
2078 */
2079 public function wpstream_admin_notice() {
2080 global $pagenow;
2081 global $typenow;
2082
2083 $wpstream_notices = get_option('wpstream_notices');
2084
2085
2086 if ( !in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
2087 if( !is_array($wpstream_notices) ||
2088 !isset($wpstream_notices['wpstream_woo_notice']) ||
2089 ( isset($wpestate_notices['wpstream_woo_notice']) && $wpestate_notices['wpstream_woo_notice']!='yes') ){
2090
2091
2092 print '<div class="notice wpstream_notices notice-error is-dismissible" data-notice-type="wpstream_woo_notice" >
2093 <p>'.__( 'WpStream Pay-Per-View Live Streaming and VOD only works with WooCommerce - Please enable and activate the WooCommerce plugin if you want to monetize your Live Events or Recorded Videos', 'wpstream' ).'</p>
2094 </div>';
2095 }
2096 }
2097
2098 if( !in_array ('curl', get_loaded_extensions())) {
2099 print '<div class="notice notice-error is-dismissible">
2100 <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.', 'wpstream' ).'</p>
2101 </div>';
2102 }
2103
2104
2105 $ajax_nonce = wp_create_nonce( "wpstream_notice_nonce" );
2106 print '<input type="hidden" id="wpstream_notice_nonce" value="'.esc_html($ajax_nonce).'"/>';
2107
2108 }
2109
2110 /**
2111 * Admin notices
2112 *
2113 * @since 3.0.1
2114 */
2115 public function wpstream_update_cache_notice(){
2116
2117 //check_ajax_referer( 'wpstream_notice_nonce', 'security' );
2118
2119 $notice_type = esc_html($_POST['notice_type']);
2120 $notices = get_option('wp_stream_notices');
2121
2122 if(! is_array($notices) ){
2123 $notices=array();
2124 }
2125
2126 $notices[$notice_type]='yes';
2127
2128 update_option('wpstream_notices',$notices);
2129 die();
2130 }
2131
2132
2133
2134 /**
2135 * Activate metaboxes for Streaming controls on sidebar
2136 *
2137 * @since 3.0.1
2138 */
2139 public function wpstream_startstreaming_sidebar_meta() {
2140 global $post;
2141 $term_list = wp_get_post_terms($post->ID, 'product_type');
2142
2143 add_meta_box('wpstream-sidebar-meta', esc_html__('Live Streaming', 'wpstream'), array($this,'wpstream_start_stream_meta'), 'wpstream_product', 'side', 'high');
2144
2145 $is_subscription_live_event = esc_html(get_post_meta($post->ID,'_subscript_live_event',true));
2146 if(!is_wp_error( $term_list )){
2147 if( isset($term_list[0]->name) ){
2148 if( $term_list[0]->name=='live_stream' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='yes' ) ){
2149 add_meta_box('wpstream-sidebar-meta', esc_html__('Live Streaming', 'wpstream'), array($this,'wpstream_start_stream_meta'), 'product', 'side', 'high');
2150 }
2151 }
2152 }
2153
2154 }
2155
2156 /**
2157 * edited 4.0
2158 *
2159 * Show Streaming controls on sidebar
2160 *
2161 * @since 3.0.1
2162 */
2163 public function wpstream_start_stream_meta(){
2164 global $live_event_for_user;
2165 $live_event_for_user = $this->main->wpstream_live_connection->wpstream_get_live_event_for_user();
2166
2167 global $post;
2168 $local_event_options = get_post_meta ($post->ID,'local_event_options','');
2169
2170
2171
2172 if( get_post_status($post->ID)!='auto-draft' ){
2173 $ajax_nonce = wp_create_nonce( "wpstream_start_event_nonce" );
2174 print '<input type="hidden" id="wpstream_start_event_nonce" value="'.$ajax_nonce.'">';
2175
2176 $this->wpstream_live_stream_unit($post->ID);
2177 print '<div class="wpstream_modal_background"></div>';
2178 print '<div class="wpstream_error_modal_notification"><div class="wpstream_error_content">er1</div>
2179 <div class="wpstream_error_ok wpstream_button" type="button">'.esc_html__('Close','wpstream').'</div>
2180 </div>';
2181 }else{
2182 esc_html_e('To Go Live, please publish your channel first !','wpstream');
2183 }
2184 }
2185 }