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

3,283 lines 152.2 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 wp_enqueue_style( 'wpstream-on-boarding-css', plugin_dir_url( __FILE__ ) . 'css/wpstream-admin-onboarding.css', array(), rand(1,999999999999), 'all' );
155
156
157 }
158
159 /**
160 * Register the JavaScript for the admin area.
161 *
162 * @since 3.0.1
163 */
164 public function enqueue_scripts() {
165
166 wp_enqueue_script("jquery-ui-slider");
167 wp_enqueue_script("jquery-ui-datepicker");
168 wp_enqueue_script('jquery.fileupload', plugin_dir_url( __FILE__ ) .'js/jquery.fileupload.js?v='.time(),array(), WPSTREAM_PLUGIN_VERSION, true);
169 wp_enqueue_script('wpstream-admin-control', plugin_dir_url( __FILE__ ) .'js/admin_control.js?v='.time(),array(), WPSTREAM_PLUGIN_VERSION, true);
170 wp_localize_script('wpstream-admin-control', 'wpstream_admin_control_vars',
171 array(
172 'admin_url' => get_admin_url(),
173 'loading_url' => WPSTREAM_PLUGIN_DIR_URL.'/img/loading.gif',
174 'download_mess' => esc_html__('Click to download!','wpstream'),
175 'uploading' => esc_html('We are uploading your file.Do not close this window!','wpstream'),
176 'upload_complete2' => esc_html('Upload Complete! You can upload another file!','wpstream'),
177 'not_accepted' => esc_html('The file is not an accepted video format','wpstream'),
178 'upload_complete' => esc_html('Upload Complete!','wpstream'),
179 'no_band' => esc_html('Not enough streaming data.','wpsteam'),
180 'no_band_no_store' => esc_html('Not enough streaming data or storage.','wpsteam')
181
182 ));
183
184
185
186 wp_enqueue_script('wpstream-start-streaming_admin', plugin_dir_url( __DIR__ ) .'/public/js/start_streaming.js?v='.time(),array(), WPSTREAM_PLUGIN_VERSION, true);
187 wp_localize_script('wpstream-start-streaming_admin', 'wpstream_start_streaming_vars',
188 array(
189 'admin_url' => get_admin_url(),
190 'loading_url' => WPSTREAM_PLUGIN_DIR_URL.'/img/loading.gif',
191 'download_mess' => esc_html__('Click to download!','wpstream'),
192 'uploading' => esc_html('We are uploading your file.Do not close this window!','wpstream'),
193 'upload_complete2' => esc_html('Upload Complete! You can upload another file!','wpstream'),
194 'not_accepted' => esc_html('The file is not an accepted video format','wpstream'),
195 'upload_complete' => esc_html('Upload Complete!','wpstream'),
196 'no_band' => esc_html('Not enough streaming data.','wpsteam'),
197 'no_band_no_store' => esc_html('Not enough streaming data or storage.','wpsteam'),
198
199 'start_streaming_action'=> esc_html__('TURNING ON','wpstream'),
200 'stop_streaming_action' => esc_html__('TURNING OFF','wpstream'),
201 'start_streaming' => esc_html__('TURN ON','wpstream'),
202 'stop_streaming' => esc_html__('TURN OFF','wpstream'),
203 'turned_on_tooltip' => esc_html__('Channel is now OFF. Click to turn ON.','wpstream'),
204 'turned_off_tooltip' => esc_html__('Click to turn channel off. This will interrupt any ongoing broadcast.','wpstream'),
205 'turning_on_tooltip' => esc_html__('Turning a channel on may take 1-2 minutes or more. Please be patient.','wpstream'),
206 'turning_off_tooltip' => esc_html__('This may take a few minutes.','wpstream'),
207 'error1' => esc_html__('You don\'t have enough data to start a new event!','wpstream'),
208 'failed_event_creation' => esc_html__('Failed to start the channel. Please try again in a few minutes.','wpstream'),
209 'channel_turning_on' => esc_html__('Channel is turning on','wpstream'),
210 'channel_turning_off' => esc_html__('Channel is turning off','wpstream'),
211 'channel_on' => esc_html__('Channel is ON','wpstream'),
212 'channel_off' => esc_html__('Channel is OFF','wpstream'),
213 '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')
214 ));
215
216
217 wp_enqueue_script('wpstream-on-boarding-js', plugin_dir_url( __DIR__ ) .'/admin/js/wpstream-onboarding2.js?v='.time(),array(), WPSTREAM_PLUGIN_VERSION, true);
218 wp_localize_script('wpstream-on-boarding-js', 'wpstreamonboarding_js_vars',
219 array(
220 'admin_url' => get_admin_url(),
221 'plugin_url' => get_dashboard_url().'/plugins.php',
222 'upload_url' => get_dashboard_url().'admin.php?page=wpstream_recordings'
223
224 ));
225
226 }
227
228
229 /**
230 * Add Plugin Administation menu
231 *
232 * @since 3.0.1
233 */
234
235 public function wpstream_manage_admin_menu() {
236
237 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 );
238 add_submenu_page( 'wpstream_credentials', __('WpStream Credentials','wpestream'), __('Credentials','wpestream'), 'administrator', 'wpstream_credentials', array($this,'wpstream_set_wpstream_credentials') );
239 add_submenu_page( 'wpstream_credentials', __('WpStream Live Channels','wpestream'), __('All Channels','wpestream'), 'administrator', 'wpstream_live_channels', array( $this,'wpstream_new_general_set'));
240 add_submenu_page( 'wpstream_credentials', __('WpStream Recordings','wpestream'), __('Recordings','wpestream'), 'administrator', 'wpstream_recordings', array($this,'wpstream_media_management'));
241 add_submenu_page( 'wpstream_credentials', __('WpStream Settings','wpestream'), __('Settings','wpestream'), 'administrator', 'wpstream_settings', array($this,'wpstream_settings'));
242
243 add_submenu_page( 'wpstream_credentials', __('WpStream Quick Start','wpestream'), __('WpStream Quick Start','wpestream'), 'administrator', 'wpstream_onboard', array($this,'wpstream_pre_onboard_display'));
244
245
246
247
248 }
249
250
251
252
253 /**
254 * Shows events wpstream
255 *
256 * @since 3.0.1
257 */
258
259 public function wpstream_new_general_set() {
260
261 $no_channel=1;
262
263 if(class_exists ('WC_Subscription')){
264
265 }
266
267 //event_passed
268 $args = array(
269 'posts_per_page' => -1,
270 'post_type' => 'product',
271 'post_status' => 'publish',
272 'meta_query' => array(
273 array(
274 'key' => 'event_passed',
275 'value' => 1,
276 'compare' => '!=',
277 )
278 ),
279
280 'tax_query' => array(
281 'relation' => 'AND',
282 array(
283 'taxonomy' => 'product_type',
284 'field' => 'slug',
285 'terms' => array('live_stream','subscription')
286 )
287 ),
288 );
289
290
291
292 $event_list = new WP_Query($args);
293 global $live_event_for_user;
294 $live_event_for_user = $this->main->wpstream_live_connection->wpstream_get_live_event_for_user();
295 $pack_details = $this->main->wpstream_live_connection->wpstream_request_pack_data_per_user();
296
297 $this->main->show_user_data($pack_details);
298 if( $event_list->have_posts()){
299
300
301 print '<div class="pack_details_wrapper_transparent">
302 <h3>'.__('Your Pay-Per-View Channel List','wpstream').'</h3>';
303
304
305 $link_new = admin_url('post-new.php?post_type=product').'&new_stream='. rawurlencode('new');
306
307 print '<a href="'.esc_url($link_new).'" class="wpstream_create_new_product_link">'.esc_html__('Create new Pay-Per-View channel.','wpstream').'</a>';
308 print '</div>';
309
310 print '<div style="clear: both;"></div><div class="event_list_wrapper">';
311
312 while ($event_list->have_posts()): $event_list->the_post();
313
314 $the_id = get_the_ID();
315 $is_subscription_live_event = esc_html(get_post_meta($the_id,'_subscript_live_event',true));
316 $term_list = wp_get_post_terms($the_id, 'product_type');
317
318 if( $term_list[0]->name=='subscription' && $is_subscription_live_event=='no'){
319 continue;
320 }
321
322 $this->wpstream_live_stream_unit($the_id);
323
324 endwhile;
325
326 print'</div>';
327 $no_channel=1;
328 }else{
329 $no_channel=0;
330 }
331
332
333 $ajax_nonce = wp_create_nonce( "wpstream_start_event_nonce" );
334 print '<input type="hidden" id="wpstream_start_event_nonce" value="'.$ajax_nonce.'">';
335 $current_user = wp_get_current_user();
336 $allowded_html = array();
337 $userID = $current_user->ID;
338 $user_live_streams = get_user_meta($userID,'live_shows');
339
340
341 wp_reset_postdata();
342
343
344
345
346 // free
347
348 $args_free = array(
349 'posts_per_page' => -1,
350 'post_type' => 'wpstream_product',
351 'post_status' => 'publish',
352
353
354 );
355 $event_list_free = new WP_Query($args_free);
356
357
358 if( $event_list_free->have_posts()){
359 print '<div class="pack_details_wrapper_transparent">
360 <h3>'.__('Free-To-View Channels','wpstream').'</h3>';
361
362 $link_new = admin_url('post-new.php?post_type=wpstream_product');
363 print '<a href="'.esc_url($link_new).'" class="wpstream_create_new_product_link">'.esc_html__('Create new Free-To-View channel.','wpstream').'</a>';
364 print '</div>';
365 print '<div style="clear: both;"></div><div class="event_list_wrapper">';
366
367 while ($event_list_free->have_posts()): $event_list_free->the_post();
368
369
370 $the_id = get_the_ID();
371
372 if( get_post_meta ($the_id,'event_passed',true)!=1){
373 $this->wpstream_live_stream_unit($the_id);
374 }
375
376 endwhile;
377
378 print'</div><div class="wpstream_modal_background"></div>';
379 print '<div class="wpstream_error_modal_notification"><div class="wpstream_error_content">er2</div>
380 <div class="wpstream_error_ok wpstream_button" type="button">'.esc_html__('Close','wpstream').'</div>
381 </div>';
382 $no_channel=1;
383 }else{
384 $no_channel=0;
385 }
386
387
388
389
390 $link_new_paid = admin_url('post-new.php?post_type=product').'&new_stream='. rawurlencode('new');
391 $link_new_free = admin_url('post-new.php?post_type=wpstream_product');
392 print '<div class="no_events_warning"> ';
393 if($event_list->found_posts==0){
394 print '<div class="no_events_warning_mes">'.__('* You do not have any Pay-Per-View channels!','wpstream').'</div>';
395 }
396 if($event_list_free->found_posts==0){
397 print '<div class="no_events_warning_mes">'. __('* You do not have any free channels!','wpstream').'</div>';
398 }
399
400 print '<a href="'.esc_url($link_new_free).'" class="wpstream_no_chanel_add_channel">'.esc_html__('Add new Free-To-View channel ','wpstream').'</a>';
401 print '<a href="'.esc_url($link_new_paid).'" class="wpstream_no_chanel_add_channel">'.esc_html__('Add new Pay-Per-View channel ','wpstream').'</a>';
402
403 print '</div>';
404
405
406
407
408 }
409 // end wpstream_new_general_set
410
411
412 /**
413 * Social share
414 *
415 * @since 3.0.1
416 */
417
418 public function wpstream_social_share($the_id){
419 $protocol = is_ssl() ? 'https' : 'http';
420 $pinterest = wp_get_attachment_image_src(get_post_thumbnail_id($the_id), 'full');
421 $link = esc_url ( get_permalink($the_id) );
422 $title = get_the_title($the_id);
423 $twiter_status = urlencode( $title.' '.$link);
424 $email_link = 'subject='.urlencode ( $title ) .'&body='. urlencode( esc_url($link));
425
426 $facebook_link = esc_html($protocol).'://www.facebook.com/sharer.php?u='. esc_url($link) .'&amp;t='. urlencode(get_the_title());
427
428 ?>
429 <div class="wpstream_social_share_wrapper">
430
431 <a href="<?php print esc_url( $facebook_link); ?>" target="_blank" class="social_facebook wpstream_sharing_social">
432 <span class="dashicons dashicons-facebook-alt"></span>
433 </a>
434
435 <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">
436 <span class="dashicons dashicons-twitter"></span>
437 </a>
438
439 <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">
440 <span class="dashicons dashicons-pinterest"></span>
441 </a>
442
443 <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">
444 <span class="dashicons dashicons-whatsapp"></span>
445 </a>
446
447 <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">
448 <span class="dashicons dashicons-linkedin"></span>
449 </a>
450
451 <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">
452 <span class="dashicons dashicons-reddit"></span>
453 </a>
454
455 <a href="mailto:email@email.com?<?php echo trim(esc_html($email_link));?>" data-action="share email" class="social_email wpstream_sharing_social">
456 <span class="dashicons dashicons-email-alt"></span>
457 </a>
458
459 <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>
460 <?php
461 print '</div>';
462 }
463
464
465
466
467 /**
468 * Shows event unit card in admin
469 *
470 * @since 3.0.1
471 */
472
473 public function wpstream_live_stream_unit($the_id,$is_front=''){
474 global $live_event_for_user;
475 global $wpstream_plugin;
476 $current_user = wp_get_current_user();
477
478 if( !current_user_can('administrator')){
479 if($is_front=='' ){
480 print '<div class="event_list_unit">';
481 esc_html_e('You are not allowed to broadcast.','wpstream');
482 print '</div>';
483 return;
484 }
485
486 }
487
488 if( !$this->main->wpstream_check_user_can_stream() ){
489 print '<div class="event_list_unit">';
490 esc_html_e('You are not allowed to broadcast','wpstream');
491 print '</div>';
492 return;
493 }
494
495
496 $live_class='';
497 if(isset($live_event_for_user[$the_id])) {
498 $live_class=" wpstream_show_started";
499 }
500
501
502 if(has_post_thumbnail($the_id)){
503 $thumb = get_the_post_thumbnail_url($the_id,'thumbnail');
504 }else{
505 $thumb= plugin_dir_url( dirname( __FILE__ ) ). 'img/plugin-logo.png';
506 }
507
508 $pending_streaming_class = 'hide_stream_data';
509 $external_software_streaming_class = '';
510 $obs_uri = '';
511 $obs_stream = '';
512 $live_data_url = '';
513
514 if( $live_event_for_user=='' && $is_front=='front' ){
515 $live_event_for_user = $this->main->wpstream_live_connection->wpstream_get_live_event_for_user();
516 }
517 $channel_status = esc_html__('Channel is OFF','wpstream');
518 if(is_array($live_event_for_user) && isset($live_event_for_user[$the_id])) {
519 $pending_streaming_class = 'pending_trigger';
520 $live_data_url = get_post_meta($the_id,'qos_url',true);
521 // $channel_status = esc_html__('Channel is on','wpstream');
522 }
523
524 $server_id = get_post_meta($the_id,'server_id',true);
525 $obs_uri = get_post_meta($the_id,'obs_uri',true);
526 $obs_stream = get_post_meta($the_id,'obs_stream',true);
527 $webcaster_url = get_post_meta($the_id,'webcaster_url',true);
528 $rtmp_ip_uri = '';
529
530 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.'"">';
531
532 print '<div class="wpstream_channel_status">'.$channel_status.'</div>';
533
534 print '<div class="server_notification"></div>';
535
536 print '<div class="event_thumb_wrapper" style="background-image:url('.$thumb.')"></div>';
537
538 print '<div class="event_title" data-prodid="'.$the_id.'">'.wp_trim_words(get_the_title($the_id),10);
539
540
541 /* print '***</br>'.get_post_meta($the_id,'obs_uri',true) .'***</br>'.
542 get_post_meta($the_id,'obs_stream',true).'***</br>'.
543 get_post_meta($the_id,'broadcast_url',true);
544 */
545 print '<div class="wpstream_channel_item_id">'.esc_html('#ID','wpstream').' '.$the_id.'</div>';
546 print '</div>';
547
548
549 print '<div class="start_event wpstream_button wpstream_tooltip_wrapper" data-show-id="'.$the_id.'" > '.esc_html__('TURN ON','wpstream');
550 print '<div class="wpstream_tooltip">'.esc_html__('Channel is now OFF. Click to turn ON.','wpestream').'</div>';
551 print '</div>';
552
553 print '<div class="wpstream_options_col1 wpstream_stream_browser_wrapper">';
554
555 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.'"">';
556
557 print '<div class="wpstream_tooltip_disabled">'.esc_html__('Turn ON the channel to go live.','wpestream').'</div>';
558 print '<div class="wpstream_tooltip">'.esc_html__('Go live with your webcam','wpestream').'</div>';
559
560 print '<svg width="41" height="51" viewBox="0 0 41 51" fill="none" xmlns="http://www.w3.org/2000/svg">
561 <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"/>
562 </svg>';
563 print '</div>';
564
565
566 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.'"">';
567
568 print '<div class="wpstream_tooltip_disabled">'.esc_html__('Turn ON the channel to go live.','wpestream').'</div>';
569 print '<div class="wpstream_tooltip">'.esc_html__('Go Live with external streaming app','wpestream').'</div>';
570
571 print '<svg width="51" height="38" viewBox="0 0 51 38" fill="none" xmlns="http://www.w3.org/2000/svg">
572 <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"/>
573 <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"/>
574 </svg>';
575 print '</div>';
576
577
578
579
580 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.'" >';
581
582 print '<div class="wpstream_tooltip_disabled">'.esc_html__('Turn ON the channel to see live stats.','wpestream').'</div>';
583 print '<div class="wpstream_tooltip">'.esc_html__('Live Statistics','wpestream').'</div>';
584
585 print'<svg width="50" height="42" viewBox="0 0 50 42" fill="none" xmlns="http://www.w3.org/2000/svg">
586 <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"/>
587 <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"/>
588 <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"/>
589 <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"/>
590 </svg>';
591 print '</a>';
592 print '</div>';
593
594 print '<div class="wpstream_options_col2 wpstream_show_settings_wrapper">';
595 if($is_front==''){
596 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').'">';
597
598 print '<div class="wpstream_tooltip_disabled">'.esc_html__('Turn OFF the channel to change its settings.','wpestream').'</div>';
599 print '<div class="wpstream_tooltip">'.esc_html__('Channel Settings','wpestream').'</div>';
600
601 print '<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
602 <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"/>
603 </svg>
604 </div>';
605
606
607 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.'"">';
608 print '<div class="wpstream_tooltip">'.esc_html__('Edit Channel','wpestream').'</div>';
609 print '<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
610 <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"/>
611 </svg>';
612 print '</a>';
613 }
614
615 print '<a href="'.get_permalink($the_id).'" target="_blank" class="wpstream_view_channel wpstream-button-icon wpstream_tooltip_wrapper" data-show-id="'.$the_id.'"">';
616 print '<div class="wpstream_tooltip">'.esc_html__('View Channel','wpestream').'</div>';
617 print '<svg width="50" height="32" viewBox="0 0 50 32" fill="none" xmlns="http://www.w3.org/2000/svg">
618 <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"/>
619 <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"/>
620 </svg>';
621 print '</a>';
622
623
624 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.'"">';
625 print '<div class="wpstream_tooltip">'.esc_html__('Share Channel','wpestream').'</div>';
626 print '<svg width="44" height="50" viewBox="0 0 44 50" fill="none" xmlns="http://www.w3.org/2000/svg">
627 <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"/>
628 </svg>';
629 print '</div>';
630 print '</div>';
631
632
633
634
635
636
637 $this->wpstream_display_modal_seetings($the_id);
638 $this->wpstream_display_modal_share($the_id);
639 $this->wpstream_display_modal_broadcast($the_id,$external_software_streaming_class,$obs_uri,$obs_stream);
640
641 print '</div>';
642
643 }
644
645
646
647 /*
648 *
649 * Close modal button
650 *
651 */
652
653 public function wpstream_close_modal_button(){
654 print '<div class="wpstream_close_modal"></div>';
655 }
656
657 /*
658 *
659 * Display modal settings
660 *
661 */
662
663 public function wpstream_display_modal_seetings($the_id){
664 print '<div class="wpstream_modal_form wpestate_settings_modal">';
665 $this->wpstream_close_modal_button();
666 print '<h3>';
667 printf( esc_html__('Channel Settings (#ID %s)','wpstream'),$the_id);
668 print '</h3>';
669 $local_event_options = get_post_meta($the_id,'local_event_options',true);
670 if(!is_array($local_event_options)){
671 $local_event_options = get_option('wpstream_user_streaming_global_channel_options') ;
672 }
673
674 $local_array_exclude=array('ses_encrypt','vod_domain_lock','vod_encrypt');
675
676 print '<div class="wpstream_event_streaming_local">';
677 $this->user_streaming_global_channel_options('',$local_event_options, $local_array_exclude);
678 print '</div>';
679 print '</div>';
680 }
681
682
683 /*
684 *
685 * Display share settings
686 *
687 */
688 public function wpstream_display_modal_share($the_id){
689 print '<div class="wpstream_modal_form wpestate_share_modal">';
690 $this->wpstream_close_modal_button();
691 print '<h3>'.esc_html__('Share your Channel','wpstream').'</h3>';
692 $this->wpstream_social_share($the_id);
693 print '</div>';
694 }
695
696
697 /*
698 *
699 * Display broadcast modal
700 *
701 */
702
703 public function wpstream_display_modal_broadcast($the_id,$external_software_streaming_class,$obs_uri,$obs_stream){
704 print '<div class="wpstream_modal_form wpestate_broadcast_modal">';
705 $this->wpstream_close_modal_button();
706 print '<h3>'.esc_html__('Go Live with External Streaming App','wpstream').'</h3>';
707
708 print '<div class="wpstream_modal_explanations">'.esc_html__('Please choose your RTMP encoder/broadcaster','wpstream').'</div>';
709
710 print '<select class="wpstream_external_broadcast_options">';
711 print '<option value="wpstream_obs_settings">'.esc_html('OBS','wpstream').'</option>';
712 print '<option value="wpstream_streamyard_settings">'.esc_html('StreamYard','wpstream').'</option>';
713 print '<option value="wpstream_restream_settings">'.esc_html('Restream','wpstream').'</option>';
714 print '<option value="wpstream_wimx_settings">'.esc_html('vMix','wpstream').'</option>';
715 print '<option value="wpstream_wirecast_settings">'.esc_html('Wirecast','wpstream').'</option>';
716 print '<option value="wpstream_xplit_settings">'.esc_html('XSplit','wpstream').'</option>';
717 print '<option value="wpstream_larix_settings">'.esc_html('Larix Broadcaster','wpstream').'</option>';
718
719 print '</select>';
720
721 $this->wpstream_obs_settings($obs_uri,$obs_stream);
722 $this->wpstream_streamyard_settings($obs_uri,$obs_stream);
723 $this->wpstream_restream_settings($obs_uri,$obs_stream);
724 $this->wpstream_wmix_settings($obs_uri,$obs_stream);
725 $this->wpstream_wirecast_settings($obs_uri,$obs_stream);
726 $this->wpstream_xplit_settings($obs_uri,$obs_stream);
727 $this->wpstream_larix_settings($obs_uri,$obs_stream);
728
729 print '</div>';
730 }
731
732
733
734
735 /*
736 *
737 * Display OBS settings
738 *
739 */
740
741 public function wpstream_obs_settings($obs_uri,$obs_stream){
742
743 print '<div class="external_software_streaming wpstream_obs_settings" style="display:block;">';
744
745 print '<div class="external_software_streaming_details">';
746 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('Server:').' </strong>';
747 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
748 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
749
750 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream Key:').' </strong>
751 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
752 print '</div>';
753
754 print'</div>';
755
756 print ' <div class="wpstream_modal_explanations">';
757 print '<ul>
758 <li>1. Click Settings in the OBS Window and then Select Stream.</li>
759 <li>2. Choose Custom Streaming Server in the Stream Type dropdown menu.</li>
760 <li>3. In the URL box, type/paste your Server.</li>
761 <li>4. In the Stream key, type/paste your Stream key.</li>
762 <li>5. Save changes.Close the Settings window and click on the “Start Streaming” button in the main window of OBS.</li></ul>';
763
764 print '</div>';
765
766
767 print'</div>';
768 }
769
770 /*
771 *
772 * Display StreamYard settings
773 *
774 */
775
776 public function wpstream_streamyard_settings($obs_uri,$obs_stream){
777
778 print '<div class="external_software_streaming wpstream_streamyard_settings">';
779
780 print '<div class="external_software_streaming_details">';
781 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('RTMP server URL:').' </strong>';
782 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
783 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
784
785 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream key:').' </strong>
786 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
787 print '</div>';
788
789 print'</div>';
790
791 print ' <div class="wpstream_modal_explanations">';
792 print '<ul>
793 <li>1. Set up your destination by going to your StreamYard account.</li>
794 <li>2. Choose "Custom RTMP" and add the RTMP server URL and Stream key from WpStream.</li>
795 <li>3. Go to "Broadcasts" then "create a broadcast".</li>
796 <li>4. Enter Live Studio.</li>
797 <li>5. Adjust all your preferred settings and Click on "Go Live".</li></ul>';
798
799 print '</div>';
800
801
802 print'</div>';
803 }
804
805
806
807 /*
808 *
809 * Display StreamYard settings
810 *
811 */
812
813 public function wpstream_restream_settings($obs_uri,$obs_stream){
814
815 print '<div class="external_software_streaming wpstream_restream_settings">';
816
817 print '<div class="external_software_streaming_details">';
818 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('RTMP URL:').' </strong>';
819 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
820 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
821
822 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream key:').' </strong>
823 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
824 print '</div>';
825
826 print'</div>';
827
828 print ' <div class="wpstream_modal_explanations">';
829 print '<ul>
830 <li>1. Go to your Restream account and set up a destination or channel.</li>
831 <li>2. Choose "Custom RTMP" and add the RTMP URL and Stream Key from WpStream.</li>
832 <li>3. Click on "Add Channel".</li>
833 <li>4. Enter Live Studio.</li>
834 <li>5. Adjust your preferred settings and Go Live.</li></ul>';
835
836 print '</div>';
837
838
839 print'</div>';
840 }
841
842
843
844 /*
845 *
846 * Display Xplit settings
847 *
848 */
849
850
851 public function wpstream_xplit_settings($obs_uri,$obs_stream){
852 print '<div class="external_software_streaming wpstream_xplit_settings" style="display:none;">';
853 print '<div class="external_software_streaming_details">';
854 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('RTMP Url:').' </strong>';
855 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
856 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
857
858 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream Key:').' </strong>
859 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
860 print '</div>';
861
862 print'</div>';
863
864 print ' <div class="wpstream_modal_explanations">';
865 print '<ul>
866 <li>1. Click Broadcast in the XSplit Window and then click "Set up a new output".</li>
867 <li>2. Choose Custom RTMP in the Set up a new output dropdown menu.</li>
868 <li>3. In the URL box, type/paste your RTMP Url.</li>
869 <li>4. In the Stream key, type/paste your Stream key.</li>
870 <li>5. Save changes and click on the “Stream” button in the main window.</li></ul>';
871 print '</div>';
872
873 print '</div>';
874 }
875
876
877
878 /*
879 *
880 * Display WireCast settings
881 *
882 */
883
884
885 public function wpstream_wirecast_settings($obs_uri,$obs_stream){
886 print '<div class="external_software_streaming wpstream_wirecast_settings" style="display:none;">';
887
888 print '<div class="external_software_streaming_details">';
889 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('Address:').' </strong>';
890 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
891 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
892
893 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream:').' </strong>
894 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
895 print '</div>';
896
897 print'</div>';
898
899 print ' <div class="wpstream_modal_explanations">';
900 print '<ul>
901 <li>1. Click Output on the top of the screen and then Select Output Settings.</li>
902 <li>2. In the destination, choose RTMP Server and click OK.</li>
903 <li>3. In the Address box, type/paste your Address.</li>
904 <li>4. In the Stream box, type/paste your Stream key.</li>
905 <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>';
906 print '</div>';
907
908 print '</div>';
909 }
910
911
912
913 /*
914 *
915 * Display Larix settings
916 *
917 */
918
919
920 public function wpstream_larix_settings($obs_uri,$obs_stream){
921 print '<div class="external_software_streaming wpstream_larix_settings" style="display:none;">';
922 $larix_rtmp=$obs_uri.$obs_stream;
923 print '<div class="external_software_streaming_details">';
924 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('RTMP:').'</strong>';
925 print '<div class="wpstream_live_uri_text wpstream_larix_rtmp"></div>
926 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
927
928 print '</div>';
929
930 print'</div>';
931
932 print ' <div class="wpstream_modal_explanations">';
933 print '<ul>
934 <li>A. Scan the QR code.</li>
935 <li>or</li>
936 <li>B. Manually configure Larix with the above RTMP</li>';
937 if(wp_is_mobile() ){
938 print '
939 <li>or</li>
940 <li>C. Click on the button below </li></ul>';
941 }
942
943
944 print '</div>';
945
946
947 print '<img class="print_qrcode" src="" />';
948 if(wp_is_mobile() ){
949 print '<a href="" class="wpstream_start_with_larix_mobile" >Start Streaming with Larix</a>';
950 }
951
952
953
954 print '</div>';
955 }
956
957
958
959
960 /*
961 *
962 * Display Wmix settings
963 *
964 */
965
966
967 public function wpstream_wmix_settings($obs_uri,$obs_stream){
968 print '<div class="external_software_streaming wpstream_wimx_settings" style="display:none;">';
969
970 print '<div class="external_software_streaming_details">';
971 print '<div class="event_list_unit_notificationx"><strong>'.esc_html__('URL:').' </strong>';
972 print '<div class="wpstream_live_uri_text">' . $obs_uri.'</div>
973 <div class="copy_live_uri">'.__('copy','wpstream').'</div>';
974
975 print '<div class="event_list_stream_key_wrap"><strong>'.__('Stream Key:').' </strong>
976 <div class="wpstream_live_key_text">'. $obs_stream.'</div><div class="copy_live_key">'.__('copy','wpstream').'</div></div>';
977 print '</div>';
978
979 print'</div>';
980
981 print ' <div class="wpstream_modal_explanations">';
982 print '<ul>
983 <li>1. Click on the gear icon near the stream button on the bottom.</li>
984 <li>2. Choose a custom RTMP Server in destination.</li>
985 <li>3. In the URL box, type/paste your URL.</li>
986 <li>4. In the Stream key, type/paste your Stream key.</li>
987 <li>5. Save changes. You can start streaming by clicking on the stream button at the bottom of the dashboard.</li></ul>';
988 print '</div>';
989
990 print '</div>';
991 }
992
993
994
995 /*
996 * Set Settings
997 *
998 *
999 */
1000
1001 public function wpstream_settings(){
1002
1003 if( !current_user_can('administrator') ){
1004 die('Only for administrators');
1005 }
1006
1007
1008 if($_SERVER['REQUEST_METHOD'] === 'POST'){
1009 if( !wp_verify_nonce($_POST['wpstream-settings-nonce'],'wpstream-settings-nonce') ){
1010 die('Security check');
1011 }
1012
1013 $allowed_html = array();
1014 $exclude_array = array();
1015 $allowed_html = array();
1016
1017
1018
1019 if( isset($_POST['user_streaming_channel_type_hidden']) && intval($_POST['user_streaming_channel_type_hidden'])==1 && !isset($_POST['stream_role']) ){
1020 update_option( sanitize_key('wpstream_stream_role'), '' );
1021 }
1022
1023 foreach($_POST as $variable=>$value){
1024 if ($variable!='submit'){
1025 if (!in_array($variable, $exclude_array) ){
1026 update_option( sanitize_key('wpstream_'.$variable), sanitize_text_field ($value) );
1027 }
1028
1029 if($variable=='stream_role'){
1030 update_option( sanitize_key('wpstream_stream_role'), $value );
1031 }
1032
1033 }
1034 }
1035
1036
1037 if( isset($_GET['tab']) && $_GET['tab']=='default_options' ){
1038 $event_settings=array();
1039 foreach($this->global_event_options as $key=>$option){
1040 $event_settings[$key]='';
1041 if(isset($_POST['wpstream_event_set_'.$key]) && $_POST['wpstream_event_set_'.$key]=='on'){
1042 $event_settings[$key]=1;
1043 }else{
1044 $event_settings[$key]=0;
1045 }
1046 }
1047 update_option('wpstream_user_streaming_global_channel_options',$event_settings);
1048 }
1049
1050
1051
1052
1053 // reset permalinkgs
1054 global $wp_rewrite;
1055
1056 update_option( "rewrite_rules", FALSE );
1057 $wp_rewrite->flush_rules( true );
1058
1059 }
1060
1061 $wpstream_settings_array =array(
1062 1 => array(
1063 'tab' => 'general_options',
1064 'label' => esc_html__('Slug for free video/channel pages ','wpstream'),
1065 'name' => 'free_media_slug',
1066 'type' => 'text',
1067 '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'),
1068 ),
1069
1070 2 => array(
1071 'tab' => 'general_options',
1072 'label' => esc_html__('Non-Admin User Roles Allowed to Broadcast','wpstream'),
1073 'name' => 'stream_role',
1074 'type' => 'user_roles',
1075 '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'),
1076
1077 ),
1078 3 => array(
1079 'tab' => 'general_options',
1080 'label' => esc_html__('Non Admin Streamers Channel Type.','wpstream'),
1081 'name' => 'user_streaming_channel_type',
1082 'type' => 'select',
1083 'select_values'=>array(
1084 'free' => esc_html__('Free Live Channel','wpstream'),
1085 'paid' => esc_html__('Pay-Per-View','wpstream')
1086 ),
1087 'details' => esc_html__('Choose whether the channels assigned to non-admins are free-for-all or pay-per-view (WooCommerce product).','wpstream'),
1088 ),
1089
1090 4 => array(
1091 'tab' => 'general_options',
1092 'label' => esc_html__('Default Pay-Per-View Price','wpstream'),
1093 'name' => 'user_streaming_default_price',
1094 'type' => 'text',
1095 'details' => esc_html__('Default price of pay-per-view channels assigned to non-admins.','wpstream'),
1096 ),
1097
1098
1099
1100 6 => array(
1101 'tab' => 'subscription_options',
1102 'label' => esc_html__('Use Global Subscription Mode','wpstream'),
1103 'name' => 'global_sub',
1104 'type' => 'slidertoogle',
1105 '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'),
1106 ),
1107
1108 7 => array(
1109 'tab' => 'subscription_options',
1110 'label' => esc_html__('Subscription ID for Global Subscription Mode','wpstream'),
1111 'name' => 'global_sub_id',
1112 'type' => 'text',
1113 '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'),
1114 ),
1115 8 => array(
1116 'tab' => 'messages_options',
1117 'label' => esc_html__('PPV not logged in message','wpstream'),
1118 'name' => 'product_not_login',
1119 'type' => 'text',
1120 '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'),
1121 'default' => esc_html__('You must be logged in to watch this video.','wpstream'),
1122 ),
1123 9 => array(
1124 'tab' => 'messages_options',
1125 'label' => esc_html__('PPV not purchased message','wpstream'),
1126 'name' => 'product_not_bought',
1127 'type' => 'text',
1128 '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'),
1129 'default' => esc_html__('You did not yet purchase this item.','wpstream'),
1130 ),
1131 10 => array(
1132 'tab' => 'messages_options',
1133 'label' => esc_html__('Subscription not purchased message','wpstream'),
1134 'name' => 'product_not_subscribe',
1135 'type' => 'text',
1136 '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'),
1137 'default' => esc_html__(' You did not yet subscribe to this item.','wpstream'),
1138 ),
1139 11 => array(
1140 'tab' => 'messages_options',
1141 'label' => esc_html__('Thank you message','wpstream'),
1142 'name' => 'product_thankyou',
1143 'type' => 'text',
1144 'details' => esc_html__('This message will be displayed on the thank you page (after purchase) and the confirmation email.','wpstream'),
1145 'default' => esc_html__('Thanks for your purchase. You can access your item at any time by visiting the following page: {item_link}','wpstream'),
1146 ),
1147
1148 12 => array(
1149 'tab' => 'messages_options',
1150 'label' => esc_html__('Subscription Active message','wpstream'),
1151 'name' => 'subscription_active',
1152 'type' => 'text',
1153 'details' => esc_html__('This message will be displayed on subscription product page.','wpstream'),
1154 'default' => esc_html__('Your Subscription is Active','wpstream'),
1155 ),
1156 13 => array(
1157 'tab' => 'messages_options',
1158 'label' => esc_html__('You are not live message','wpstream'),
1159 'name' => 'you_are_not_live',
1160 'type' => 'text',
1161 'details' => esc_html__('This message will be displayed in player.','wpstream'),
1162 'default' => esc_html__('We are not live at this moment. Please check back later.','wpstream'),
1163 ),
1164
1165
1166
1167
1168 99 => array(
1169 'tab' => 'default_options',
1170 'label' => esc_html__('Events Options ','wpstream'),
1171 'name' => 'user_streaming_global_channel_options',
1172 'type' => 'user_streaming_global_channel_options',
1173 'details' => esc_html__('Global Options for live events.','wpstream'),
1174 ),
1175 );
1176
1177 $active_tab = 'general_options';
1178 if( isset( $_GET[ 'tab' ] ) ) {
1179 $active_tab = $_GET[ 'tab' ];
1180 }
1181
1182
1183 print '<div class="theme_options_tab_wpstream" style="display:block;" >
1184 <h1>'.__('WpStream Settings','wpstream').'</h1>
1185 <form method="post" action="" >';
1186
1187 print '<h2 class="nav-tab-wrapper">
1188 <a href="?page=wpstream_settings&tab=general_options" class="nav-tab '; echo $active_tab == 'general_options' ? 'nav-tab-active' : ''; echo '">General Options</a>
1189 <a href="?page=wpstream_settings&tab=default_options" class="nav-tab '; echo $active_tab == 'default_options' ? 'nav-tab-active' : ''; echo '">Default Channel Settings</a>
1190 <a href="?page=wpstream_settings&tab=subscription_options" class="nav-tab '; echo $active_tab == 'subscription_options' ? 'nav-tab-active' : ''; echo '">Subscription Options</a>
1191 <a href="?page=wpstream_settings&tab=messages_options" class="nav-tab '; echo $active_tab == 'messages_options' ? 'nav-tab-active' : ''; echo '">Customize Messages</a>
1192
1193 </h2>';
1194
1195 print '<div class="wpstream_option_wrapper">';
1196
1197 switch ($active_tab) {
1198 case 'general_options':
1199 $help_link='https://docs.wpstream.net/docs/general-settings/';
1200 break;
1201 case 'default_options':
1202 $help_link='https://docs.wpstream.net/docs/default-settings/';
1203 break;
1204 case 'subscription_options':
1205 $help_link='https://docs.wpstream.net/docs/subscription-options/';
1206 break;
1207 case 'messages_options':
1208 $help_link='https://docs.wpstream.net/docs/customize-messages/';
1209 break;
1210 }
1211
1212 print '<div class="wpstream_options_help"><a href="'.esc_url($help_link).'" target="_blank" >Video Help</a></div>';
1213
1214 foreach ($wpstream_settings_array as $key=>$option){
1215 if($option['tab']!=$active_tab){
1216 continue;
1217 }
1218
1219 print '<div class="wpstream_option">';
1220 $options_value = get_option('wpstream_'.$option['name']) ;
1221
1222
1223 if($option['type']=='user_roles'){
1224
1225 print '<label for="'.$option['name'].'">'.$option['label'].'</label>';
1226 print $this->wpstream_select_user_roles($option['name'],$options_value);
1227 print '<div class="settings_details">'.$option['details'].'</div>';
1228
1229 }else if($option['type']=='user_streaming_global_channel_options'){
1230
1231 $exclude_array=array();
1232 $this->user_streaming_global_channel_options($option['name'],$options_value,$exclude_array);
1233
1234
1235 }else if($option['type']=='text'){
1236
1237 if($options_value==''){
1238 $options_value='';
1239 if(isset($option['default'])){
1240 $options_value=$option['default'];
1241 }
1242 }
1243
1244 print '<label for="'.$option['name'].'">'.$option['label'].'</label>';
1245 print '<input id="'.$option['name'].'" type="'.$option['type'].'" size="36" name="'.$option['name'].'" value="'.esc_attr($options_value).'" />';
1246 print '<div class="settings_details">'.$option['details'].'</div>';
1247
1248 } else if($option['type']=='select'){
1249
1250 print '<label for="'.$option['name'].'">'.$option['label'].'</label>';
1251 print '<select id="'.$option['name'].'" name="'.$option['name'].'" >';
1252 foreach($option['select_values'] as $key=>$value){
1253 print '<option value="'.$key.'" ';
1254 if( $key == esc_html($options_value) ){
1255 print ' selected ';
1256 }
1257 print '>'.$value.'</option>';
1258 }
1259 print '</select>';
1260 print '<input type="hidden" name="'.$option['name'].'_hidden" value="1" >';
1261 print '<div class="settings_details">'.$option['details'].'</div>';
1262
1263 } else if($option['type']=='slidertoogle'){
1264 print '<label for="'.$option['name'].'">'.$option['label'].'</label>';
1265 print '<label class="wpstream_switch">
1266 <input type="hidden" class="wpstream_event_option_itemc" value="0" name="'.$option['name'].'" >
1267 <input type="checkbox" class="wpstream_event_option_itemc" value="1" name="'.$option['name'].'" ';
1268
1269 if( intval($options_value) !==0 ){
1270 print ' checked ';
1271 }
1272
1273
1274
1275 print '> <span class="wpstream_slider round"></span>';
1276 print '</label>';
1277 print '<div class="settings_details">'.$option['details'].'</div>';
1278 }
1279 print '</div>';
1280 }
1281 print '</div>';
1282
1283
1284 print '<input type="submit" name="submit" class="wpstream_button wpstream_button_action" value="'.__('Save Changes','wpstream').'" />';
1285
1286 print '<input name="wpstream-settings-nonce" type="hidden" value="'.wp_create_nonce('wpstream-settings-nonce').'" /> ';
1287 print '</form>';
1288 print '</div>';
1289
1290 }
1291
1292
1293
1294 /**
1295 * Set user roles
1296 *
1297 * @since 3.0.1
1298 */
1299
1300 public function user_streaming_global_channel_options($name,$value,$local_array=''){
1301
1302 foreach($this->global_event_options as $key=>$option){
1303
1304 if( is_array($local_array) && !in_array($key,$local_array)){
1305 print '<div class="wpstream_setting_event_unit_wrapper">';
1306
1307 print '<label for="'.$option['name'].'">'.$option['name'].'</label>';
1308
1309 print '
1310 <label class="wpstream_switch">
1311 <input type="checkbox" class="wpstream_event_option_item" data-attr-ajaxname="'.esc_attr($key).'" name="wpstream_event_set_'.esc_attr($key).'" ';
1312 if( isset($value[$key]) ){
1313 if( intval($value[$key]) !==0 ){
1314 print ' checked ';
1315 }
1316 }else{
1317 if($option['defaults']=='yes') {
1318 print ' checked ';
1319 }
1320 }
1321
1322
1323 print '> <span class="wpstream_slider round"></span>';
1324 print '</label>';
1325 print '<div class="settings_details">'.$option['details'].'</div>';
1326
1327
1328 print '</div>';
1329 }
1330 }
1331
1332
1333 }
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343 /*
1344 * Set user roles
1345 *
1346 * @since 3.0.1
1347 */
1348
1349 public function wpstream_select_user_roles($name,$value){
1350 if($value==''){
1351 $value=array();
1352 }
1353
1354 $roles = get_editable_roles();
1355 $return = '<select id="wpstream_user_roles" name="'.esc_html($name).'[]" multiple>';
1356 unset( $roles['administrator'] );
1357
1358 foreach ($roles as $key=>$role){
1359 $return .= '<option value="'.$key.'" ';
1360 if( in_array($key, $value) ){
1361 $return .= ' selected ';
1362 }
1363 $return .= '>'.$role['name'].'</option>';
1364 }
1365 $return .= '</select>';
1366
1367
1368 return $return;
1369 }
1370
1371
1372 /*
1373 * Set credential admin function
1374 *
1375 * @since 3.0.1
1376 */
1377 public function wpstream_set_wpstream_credentials(){
1378
1379 if($_SERVER['REQUEST_METHOD'] === 'POST'){
1380 $allowed_html = array();
1381 $exclude_array = array();
1382 $allowed_html = array();
1383
1384 foreach($_POST as $variable=>$value){
1385 if ($variable!='submit'){
1386 if (!in_array($variable, $exclude_array) ){
1387 update_option( sanitize_key('wpstream_'.$variable), wp_kses ($value,$allowed_html) );
1388 }
1389 }
1390 }
1391
1392
1393
1394
1395 update_option('wp_estate_token_expire',0);
1396 update_option('wp_estate_curent_token',' ');
1397 delete_transient( 'wpstream_token_api');
1398 delete_transient('wpstream_token_request_30');
1399 delete_transient('wpstream_request_pack_data_per_user_transient');
1400 }
1401
1402
1403 $allowed_html = array();
1404
1405
1406
1407 $wpstream_options_array =array(
1408 2 => array(
1409 'label' => 'WpStream.net Username or Email',
1410 'name' => 'api_username',
1411 'type' => 'text',
1412 ),
1413 3 => array(
1414 'label' => 'WpStream.net Password',
1415 'name' => 'api_password',
1416 'type' => 'password',
1417 ),
1418
1419 );
1420
1421
1422 $token = $this->main->wpstream_live_connection->wpstream_get_token();
1423 $pack_details = $this->main->wpstream_live_connection->wpstream_request_pack_data_per_user();
1424
1425 $this->main->show_user_data($pack_details);
1426
1427 print '<form method="post" action="" >';
1428 print '<div class="theme_options_tab_wpstream" style="display:block;" >
1429 <h1>'.__('WpStream Credentials','wpstream').'</h1>';
1430
1431
1432 if( get_option('wpstream_api_username')=='' || get_option('wpstream_api_password')== '' ){
1433 echo '<div class="api_not_conected wpstream_orange">';
1434 $admin_url_onboard=get_admin_url().'admin.php?page=wpstream_onboard';
1435 printf ( __('To connect your plugin, enter your WpStream credentials below or go <a href="%s" target="_blank">here</a> to create an account.','wpstream'),$admin_url_onboard);
1436 echo '</div>';
1437
1438 }else if($token==''){
1439 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>';
1440 }else if( $this->main->wpstream_live_connection->wpstream_client_check_api_status() ){
1441 echo '<div class="api_conected">'.__('Connected to WpStream.net!','wpstream').'</div>';
1442 }else{
1443 echo '<div class="api_not_conected wpstream_brown">'.__('Failed to connect to WpStream.net. Please address CURL connectivity with your hosting provider.','wpstream').'</div>';
1444 }
1445 print '<div class="wpstream_option_wrapper">';
1446 foreach ($wpstream_options_array as $key=>$option){
1447 print '<div class="wpstream_option">';
1448
1449 $options_value = esc_html( get_option('wpstream_'.$option['name'],'') );
1450 print '<label for="'.$option['name'].'">'.$option['label'].'</label>';
1451 print '<input id="'.$option['name'].'" type="'.$option['type'].'" size="36" name="'.$option['name'].'" value="'.esc_html($options_value).'" />';
1452
1453 print '</div>';
1454 }
1455 print '</div>';
1456
1457
1458 print '<input type="submit" name="submit" class="wpstream_button wpstream_button_action" value="'.__('Save Changes','wpstream').'" />';
1459
1460 print '<h3>Video Tutorials</h3>';
1461
1462 print '<a class="how_to_videos" target="_blank" href="https://youtu.be/9DQrxsKcpmQ">How to Live Stream to WordPress with OBS</a>';
1463 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>';
1464 print '<a class="how_to_videos" target="_blank" href="https://youtu.be/h6myD_vhKcg">How to Live-Stream to WordPress using your iPhone</a>';
1465
1466 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>';
1467
1468
1469 print '</div>';
1470 print '</form>';
1471
1472 print '<div class="theme_options_tab_wpstream" style="display:block;" >';
1473 $link_new = admin_url('admin.php?page=wpstream_live_channels');
1474 $link_new_paid = admin_url('post-new.php?post_type=product').'&new_stream='. rawurlencode('new');
1475 $link_new_free = admin_url('post-new.php?post_type=wpstream_product');
1476
1477
1478 print '<a href="'.esc_url($link_new_free).'" class="wpstream_no_chanel_add_channel">'.esc_html__('Create new Free-To-View channel','wpstream').'</a>';
1479 print '<a href="'.esc_url($link_new_paid).'" class="wpstream_no_chanel_add_channel">'.esc_html__('Create Pay-Per-View channel','wpstream').'</a>';
1480 print '<a href="'.esc_url($link_new).'" class="wpstream_no_chanel_add_channel">'.esc_html('My Channels','wpstream').'</a>';
1481 print '</div>';
1482
1483
1484 }
1485
1486
1487
1488 /**
1489 * Media Management
1490 *
1491 * @since 3.0.1
1492 */
1493
1494 public function wpstream_media_management(){
1495 $pack_details = $this->main->wpstream_live_connection->wpstream_request_pack_data_per_user();
1496
1497 $this->main->show_user_data($pack_details);
1498
1499
1500 print '<div id="wpstream_media_upload"><h3>'.__('Upload New Recording','wpstream').'</h3>'.$this->wpstream_present_media_upload().'</div>';
1501
1502 print '<div id="wpstream_file_management"><h3 id="video_management_title">'.__('Your Recordings','wpstream').'</h3>'.$this->wpstream_present_file_management().'</div>';
1503
1504
1505 }
1506
1507
1508
1509
1510 /**
1511 *
1512 *
1513 * WpStream Pagination
1514 *
1515 * @since 3.0.1
1516 *
1517 *
1518 */
1519
1520 public function wpstream_pagination($pages , $range = 2) {
1521 $return='';
1522 $showitems = ($range * 2) + 1;
1523 $paged = ( isset( $_GET['paged'] ) ) ? intval($_GET['paged']) : 1;
1524
1525
1526 if (1 != $pages && $pages != 0) {
1527 $return.= '<ul class="pagination wpstream_pagination">';
1528 $return.= "<li class=\"roundleft\"><a href='" . get_pagenum_link($paged - 1) . "'><</a></li>";
1529
1530 $last_page = get_pagenum_link($pages);
1531 for ($i = 1; $i <= $pages; $i++) {
1532 if (1 != $pages && (!($i >= $paged + $range + 1 || $i <= $paged - $range - 1) || $pages <= $showitems )) {
1533 if ($paged == $i) {
1534 $return.= '<li class="active"><a href="' . esc_url(get_pagenum_link($i)) . '" >' . $i . '</a><li>';
1535 } else {
1536 $return.= '<li><a href="' . esc_url(get_pagenum_link($i)) . '" >' . $i . '</a><li>';
1537 }
1538 }
1539 }
1540
1541 $prev_page = get_pagenum_link($paged + 1);
1542 if (($paged + 1) > $pages) {
1543 $prev_page = get_pagenum_link($paged);
1544 } else {
1545 $prev_page = get_pagenum_link($paged + 1);
1546 }
1547
1548
1549 $return.= "<li class=\"roundright\"><a href='" . $prev_page . "'>></a><li>";
1550 $return.= "<li class=\"roundright\"><a href='" . $last_page . "'>>><li>";
1551 $return.= "</ul>";
1552 }
1553 return $return;
1554 }
1555
1556
1557
1558
1559
1560
1561 /**
1562 * Media upload
1563 *
1564 * @since 3.0.1
1565 */
1566 public function wpstream_present_media_upload(){
1567 $to_return='';
1568 $formInputs=$this->main->wpstream_live_connection->wpstream_get_signed_form_upload_data();
1569
1570
1571
1572
1573 if( !$formInputs['success'] ){
1574 $to_return.='<div class="wpstream_upload_alert">'.esc_html__('There isn\'t enough storage space under your account to upload a new item. Please delete some videos or upgrade your subscription.','wpstream').'</div>';
1575 return $to_return;
1576 }
1577
1578 if($formInputs['success'] ===true){
1579
1580
1581
1582 $to_return.='<div class="wpstream_upload_container">';
1583 $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>';
1584 $to_return.='<form action="https://wpstream-video.s3.amazonaws.com/"
1585 method="POST"
1586 enctype="multipart/form-data"
1587 data-singleFileUploads="true"
1588 data-limitMultiFileUploads="1"
1589 data-limitConcurrentUploads="1"
1590 class="direct-upload">';
1591
1592 $to_return.='<input id="wpstream_upload" type="file" class="inputfile inputfile-1" value="Pick a video file" name="file" multiple>';
1593 $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>';
1594
1595
1596 $to_return.='<div class="wpstream_file_drop_color">';
1597 $to_return.='<div class="wpstream_form_ex">'.esc_html__('Drop a video file here!','wpstream').'</div>';
1598 $to_return.='<div class="wpstream_form_ex_details">'.__('The Video File must be encoded with the following settings:
1599
1600 Container: <strong>MP4</strong>,
1601 Video codec: <strong>H264</strong>,
1602 Audio codec: <strong>AAC</strong>. Media will fail to play if it does not follow the above settings.
1603 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>';
1604 if(is_array($formInputs)){
1605 foreach ($formInputs['ref'] as $name => $value) {
1606 $to_return.='<input type="hidden" name="'. $name.'" value="'.$value.'">';
1607 }
1608 }
1609
1610 $to_return.='
1611 <div class="progress-bar-area"></div></div>
1612 </form>';
1613
1614 $to_return.='</div>';
1615 }
1616
1617 return $to_return;
1618
1619 }
1620
1621
1622
1623
1624
1625 /**
1626 * Display movie list
1627 *
1628 * @since 3.0.1
1629 */
1630 public function wpstream_present_file_management(){
1631 $video_list_raw = $this->main->wpstream_live_connection->wpstream_get_videos_from_api();
1632
1633 $video_list_raw_array=array();
1634 if(isset($video_list_raw['items'])){
1635 $video_list_raw_array=$video_list_raw['items'];
1636 }
1637
1638 $keys = array_column($video_list_raw_array, 'time');
1639 array_multisort($keys, SORT_DESC , $video_list_raw_array);
1640
1641 $to_return='';
1642
1643 if(is_array($video_list_raw['items'])){
1644 foreach ($video_list_raw_array as $key =>$video){
1645
1646
1647 $video_size = intval($video['size']/1048576);
1648 $video_name = esc_html($video['name']);
1649 if($video_name!=''):
1650 $to_return.='<div class="wpstream_video_wrapper">';
1651
1652 $to_return.='<div class="wpstream_video_title">';
1653 $to_return.='<div class="wpstream_video_notice"></div></div>';
1654 $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>';
1655 $to_return.=' <div class="wpstream_delete_media" ';
1656 $to_return.=' onclick="return confirm(\' Are you sure you wish to delete '.$video_name.'?\')" data-filename="'.$video_name.'">'.esc_html__('delete file','wpstream').'</div>';
1657 $to_return.='<div class="wpstream_get_download_link" data-filename="'.$video_name.'">'.esc_html__('download','wpstream').'</div>';
1658 $to_return.='<a href="" class="wpstream_download_link">'.esc_html__('Click to download! The url will work for the next 20 minutes!','wpstream').'</a>';
1659
1660 $add_free_video_url=admin_url('post-new.php?post_type=wpstream_product_vod').'&new_video_name='. rawurlencode($video_name);
1661 $add_paid_video_url=admin_url('post-new.php?post_type=product').'&new_video_name='. rawurlencode($video_name);
1662
1663
1664
1665 $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>';
1666 $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>';
1667
1668 $to_return.='</div>';
1669 endif;
1670
1671 }
1672 $current_page= get_current_screen();
1673
1674
1675 } else {
1676 $to_return.= '<div class="wpstream_video_wrapper">'.esc_html__('You don\'t have any videos.','wpstream').'</div>';
1677 }
1678 return $to_return;
1679 }
1680
1681
1682 /**
1683 * Set defualt channels values
1684 *
1685 * @since 3.0.1
1686 */
1687
1688
1689
1690
1691 public function wpstream_publish_wpstream_product($post_id,$post){
1692 if( $post->post_type == 'wpstream_product' ){
1693 update_post_meta ($post_id,'local_event_options_test','working_on_'.$post_id);
1694 $to_save_option=array();
1695
1696 $global_options= get_option('wpstream_user_streaming_global_channel_options');
1697
1698 $local_events = get_post_meta ($post_id ,'local_event_options',true) ;
1699
1700 if( $local_events =='' ){
1701 if( is_array($global_options) ){
1702 foreach($global_options as $key=>$value){
1703 $to_save_option[sanitize_key($key)]=sanitize_text_field($value);
1704 }
1705
1706 update_post_meta ($post_id,'local_event_options',$to_save_option);
1707
1708 }
1709 }
1710
1711
1712 }
1713 }
1714
1715 /**
1716 * save meta options
1717 *
1718 * @since 3.0.1
1719 */
1720 public function wpstream_free_product_update_post($post_id,$post){
1721
1722 if(!is_object($post) || !isset($post->post_type)) {
1723 return;
1724 }
1725
1726
1727
1728
1729
1730
1731
1732 if( $post->post_type == 'wpstream_product' ||
1733 $post->post_type == 'wpstream_product_vod' ):
1734
1735 $allowed_keys=array(
1736 'wpstream_product_type',
1737 'wpstream_free_video',
1738 'wpstream_free_video_external'
1739 );
1740
1741
1742 foreach ($_POST as $key => $value) {
1743 if( !is_array ($value) ){
1744 if (in_array ($key, $allowed_keys)) {
1745 $postmeta = sanitize_text_field ( $value );
1746 update_post_meta($post_id, sanitize_key($key), $postmeta );
1747 }
1748 }
1749 }
1750
1751 endif;
1752
1753 }
1754
1755
1756 /**
1757 * save meta options
1758 *
1759 * @since 3.0.1
1760 */
1761 public function add_wpstream_product_metaboxes() {
1762 add_meta_box( 'add_wpstream_product_metaboxes-sectionid', __( 'Video On Demand Settings', 'wpstream' ),array($this,'display_meta_options'),'wpstream_product_vod' ,'normal','default');
1763 }
1764
1765
1766 /**
1767 * make woocomerce virtual products
1768 *
1769 * @since 3.0.1
1770 */
1771
1772
1773 public function wpstream_make_product_virtual($post_id,$post){
1774 global $post;
1775 if(isset($post->ID)){
1776 if ( $post->post_type !== 'product' ) return;
1777 $term_list = wp_get_post_terms($post->ID, 'product_type');
1778 if( $term_list[0]->name=='video_on_demand' || $term_list[0]->name=='live_stream'){
1779 update_post_meta( $post->ID, '_virtual', 'yes' );
1780 }
1781 }
1782 }
1783
1784
1785
1786 /**
1787 * render meta options
1788 *
1789 * @since 3.0.1
1790 */
1791 public function display_meta_options( $post ) {
1792 wp_nonce_field( plugin_basename( __FILE__ ), 'estate_agent_noncename' );
1793 global $post;
1794
1795 $is_live = '';
1796 $is_video = '';
1797 $is_video_external = '';
1798 if( isset( $_GET['new_video_name']) && $_GET['new_video_name']!='' ){
1799 $is_video = ' selected ';
1800 $wpstream_free_video = esc_html( $_GET['new_video_name']);
1801 }else{
1802 $wpstream_product_type = esc_html(get_post_meta($post->ID, 'wpstream_product_type', true));
1803 $wpstream_free_video = esc_html(get_post_meta($post->ID, 'wpstream_free_video', true));
1804
1805 if($wpstream_product_type==1){
1806 $is_live = ' selected ';
1807 }
1808
1809 if($wpstream_product_type==2){
1810 $is_video = ' selected ';
1811 }
1812
1813 if($wpstream_product_type==3){
1814 $is_video_external = ' selected ';
1815 }
1816 }
1817
1818 print'
1819 <p class="meta-options">
1820 <label for="wpstream_product_type">'.__('Media Type:','wpstream').' </label><br />
1821 <select id="wpstream_product_type" name="wpstream_product_type">
1822 <option value="2" '.$is_video.'>'.__('Recording','wpstream').'</option>
1823 <option value="3" '.$is_video_external.'>'.__('Self Hosted or External Video','wpstream').'</option>
1824 </select>
1825 </p>
1826 ';
1827
1828
1829 $video_list = $this->main->wpstream_live_connection->wpstream_get_videos();
1830
1831
1832 print '
1833 <p class="meta-options video_free">
1834 <label for="wpstream_free_video">'.__('Choose video:','wpstream').' </label><br />
1835 <select id="wpstream_free_video" name="wpstream_free_video">';
1836
1837 if(is_array($video_list)){
1838 foreach ($video_list as $key=>$value){
1839 print '<option value="'.$key.'"';
1840 if($wpstream_free_video === $key){
1841 print ' selected ';
1842 }
1843 print '>'.$value.'</option>';
1844 }
1845 }
1846
1847 print'
1848 </select>
1849 </p>
1850 ';
1851
1852 $wpstream_free_video_external= esc_html(get_post_meta($post->ID, 'wpstream_free_video_external', true));
1853 print '<p class="meta-options1 video_free_external">
1854 <label for="wpstream_free_video_external">'.__('Video:','wpstream').' </label><br />
1855
1856 <input id="wpstream_free_video_external" type="text" size="36" name="wpstream_free_video_external" value="'.$wpstream_free_video_external.'" />
1857 <input id="wpstream_free_video_external_button" type="button" size="40" class="upload_button button" value="'.esc_html__('Select Video','wpstream').'" />';
1858 if($wpstream_product_type==2){
1859 $show_recording='';
1860 $show_external='style="display:none"';
1861 }else{
1862 $show_recording='style="display:none"';
1863 $show_external='';
1864 }
1865 print '<p '.$show_recording.' class="wpstream_option_vod_source wpstream_show_recording">'.esc_html__('Choose one of your existing recordings.','wpstream').'</p>';
1866 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>';
1867
1868 print '</p> ';
1869 }
1870
1871
1872
1873
1874
1875
1876
1877 /**
1878 * Add new product types to Woocommerce select product type
1879 *
1880 * @since 3.0.1
1881 */
1882 public function wpstream_add_products( $types ){
1883 $types[ 'live_stream' ] = __( 'Live Channel','wpestream' );
1884 $types[ 'video_on_demand' ] = __( 'Video On Demand','wpestream' );
1885
1886 return $types;
1887 }
1888
1889
1890
1891 /**
1892 * Js action to do when user pick live stream or video on demand
1893 *
1894 * @since 3.0.1
1895 */
1896
1897 public function wpstream_products_custom_js() {
1898 if ( 'product' != get_post_type() ) :
1899 return;
1900 endif;
1901
1902 ?>
1903 <script type='text/javascript'>
1904 jQuery( document ).ready( function() {
1905 jQuery('.options_group.pricing' ).addClass ( 'show_if_live_stream' ).show();
1906 jQuery('.options_group.pricing' ).addClass ( 'show_if_video_on_demand' ).show();
1907 jQuery('._sold_individually_field').parent().addClass('show_if_live_stream').show();
1908 jQuery('._sold_individually_field').parent().addClass('show_if_video_on_demand').show();
1909 jQuery('._sold_individually_field').show();
1910
1911 var selected = jQuery('#product-type').val();
1912 });
1913 </script>
1914 <?php
1915
1916 }
1917
1918
1919 /**
1920 * Add custom classes to the product types
1921 *
1922 * @since 3.0.1
1923 */
1924
1925 public function wpstream_hide_attributes_data_panel( $tabs) {
1926
1927 $tabs['shipping']['class'][] = 'hide_if_live_stream hide_if_video_on_demand';
1928 $tabs['inventory']['class'][] = 'show_if_live_stream show_if_video_on_demand';
1929 // $tabs['general']['class'][] = 'show_if_live_stream show_if_video_on_demand';
1930
1931 return $tabs;
1932 }
1933
1934
1935
1936 /**
1937 * Hide buy now on products if Netflix mode
1938 *
1939 * @since 3.12
1940 */
1941
1942
1943 public function wpstream_hide_buy_now_subscription_mode( $purchaseable_product_wpblog,$product){
1944 $product_id=$product->get_id();
1945
1946 $term_list = wp_get_post_terms($product_id, 'product_type');
1947
1948 $subscription_model = esc_html( get_option('wpstream_global_sub','')) ;
1949
1950 if($subscription_model==1){ // if we have Neflix mode
1951 if( $term_list[0]->name=='live_stream' || $term_list[0]->name=='video_on_demand' ){
1952 return false;
1953 }
1954 }
1955
1956 return $purchaseable_product_wpblog;
1957 }
1958
1959
1960
1961
1962
1963
1964 /**
1965 * Add custom fields to custom product types
1966 *
1967 * @since 3.0.1
1968 */
1969
1970 public function wpstream_add_custom_general_fields() {
1971
1972 global $woocommerce, $post;
1973 if(function_exists('wcs_user_has_subscription')){
1974 echo '<div class="options_group show_if_subscription">';
1975 woocommerce_wp_select(
1976 array(
1977 'id' => '_subscript_live_event',
1978 'label' => __( 'Is a subscription based live channel ?', 'woocommerce' ),
1979 'options' => array("yes"=>"yes","no"=>"no")
1980 )
1981 );
1982 echo '</div>';
1983 }
1984
1985 echo '<div class="options_group show_if_live_stream" style="border:none;"></div>';
1986 echo '<div class="options_group show_if_video_on_demand">';
1987 $selected='';
1988 if( isset( $_GET['new_video_name']) && $_GET['new_video_name']!='' ){
1989 $selected=esc_html($_GET['new_video_name']);
1990 }
1991 if($selected==''){
1992 $selected= get_post_meta($post->ID,'_movie_url',true);
1993 }
1994
1995 woocommerce_wp_select(
1996 array(
1997 'id' => '_movie_url',
1998 'label' => __( 'Choose video', 'woocommerce' ),
1999 'options' => $this->main->wpstream_live_connection->wpstream_get_videos(),
2000 'selected'=> true,
2001 'value' => $selected
2002 )
2003 );
2004
2005
2006
2007 echo '</div>';
2008
2009 if(function_exists('wcs_user_has_subscription')){
2010 $selected_sub='';
2011 echo '<div class="options_group show_if_video_on_demand show_if_live_stream">';
2012 if( isset( $_GET['wpstream_parent_sub']) && $_GET['wpstream_parent_sub']!='' ){
2013 $selected_sub=esc_html($_GET['wpstream_parent_sub']);
2014 }
2015 if($selected_sub==''){
2016 $selected_sub= get_post_meta($post->ID,'_wpstream_parent_sub',true);
2017 }
2018 woocommerce_wp_select(
2019 array(
2020 'id' => '_wpstream_parent_sub',
2021 'name' => '_wpstream_parent_sub[]',
2022 'label' => __( 'Attach to subscription', 'woocommerce' ),
2023 'options' => $this->wpstream_return_subscriptions_created(),
2024 'selected'=> true,
2025 'value' => $selected_sub,
2026 'custom_attributes' => array('multiple' => 'multiple')
2027 )
2028 );
2029
2030 echo '</div>';
2031
2032 }
2033 }
2034
2035
2036 public function wpstream_return_subscriptions_created(){
2037 $return=array('0'=>'none');
2038
2039 $args = array(
2040 'post_type' => 'product',
2041 'posts_per_page' => -1,
2042 'orderby' => 'title',
2043 'order' => 'ASC',
2044 'tax_query' => array(
2045 'relation' => 'AND',
2046 array(
2047 'taxonomy' => 'product_type',
2048 'field' => 'slug',
2049 'terms' => array( 'subscription'),
2050 )
2051 )
2052 );
2053
2054 $subscriptions = new WP_Query($args);
2055 if($subscriptions->have_posts()):
2056 while ($subscriptions->have_posts()): $subscriptions->the_post();
2057 $return[ get_the_ID() ] = get_the_title();
2058 endwhile;
2059 endif;
2060
2061 wp_reset_postdata();
2062 return $return;
2063
2064 }
2065
2066
2067
2068
2069
2070
2071 /**
2072 * Save custom fields
2073 *
2074 * @since 3.0.1
2075 */
2076
2077 public function wpstream_add_custom_general_fields_save( $post_id ){
2078
2079 $permited_values = array(
2080 '_movie_url',
2081 '_subscript_live_event',
2082 '_wpstream_parent_sub',
2083
2084 );
2085
2086
2087
2088 foreach($_POST as $key=>$value){
2089 update_post_meta( $post_id, 'event_passed', 0 );
2090 if( in_array($key, $permited_values) ){
2091 if( !empty( $_POST[$key] ) ){
2092 $key = sanitize_key($key);
2093 $value = sanitize_text_field($_POST[$key]);
2094
2095 if($key=='_wpstream_parent_sub'){
2096 $value= $_POST[$key];
2097 $value = array_map("sanitize_text_field", $value);
2098
2099 }
2100 update_post_meta( $post_id, $key, $value );
2101 }
2102 }
2103 }
2104 //die();
2105
2106 }
2107
2108 /**
2109 * Add to cart redirect
2110 *
2111 * @since 3.0.1
2112 */
2113
2114 public function wpstream_add_to_cart() {
2115 wc_get_template( 'single-product/add-to-cart/simple.php' );
2116 }
2117
2118
2119 /**
2120 * Replace add to cart button
2121 *
2122 * @since 3.0.1
2123 */
2124 public function replacing_add_to_cart_button( $button, $product ) {
2125 global $product;
2126 $product_type = $product->get_type();
2127
2128 if($product_type==='live_stream' || $product_type=='video_on_demand'){
2129 return $button = '<a class="button" href="'.get_site_url().'/shop/?add-to-cart=' .$product->get_id(). '&quantity=1">' . __( 'Add to Cart', 'woocommerce' ) . '</a>';
2130 }else{
2131 return $button;
2132 }
2133 }
2134
2135
2136 /**
2137 * Admin notices
2138 *
2139 * @since 3.0.1
2140 */
2141 public function wpstream_admin_notice() {
2142 global $pagenow;
2143 global $typenow;
2144
2145 $wpstream_notices = get_option('wpstream_notices');
2146
2147 /*
2148 if ( !in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
2149 if( !is_array($wpstream_notices) ||
2150 !isset($wpstream_notices['wpstream_woo_notice']) ||
2151 ( isset($wpestate_notices['wpstream_woo_notice']) && $wpestate_notices['wpstream_woo_notice']!='yes') ){
2152
2153
2154 print '<div class="notice wpstream_notices notice-error is-dismissible" data-notice-type="wpstream_woo_notice" >
2155 <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>
2156 </div>';
2157 }
2158 }
2159 */
2160
2161 if( !in_array ('curl', get_loaded_extensions())) {
2162 print '<div class="notice notice-error is-dismissible">
2163 <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>
2164 </div>';
2165 }
2166
2167
2168 $ajax_nonce = wp_create_nonce( "wpstream_notice_nonce" );
2169 print '<input type="hidden" id="wpstream_notice_nonce" value="'.esc_html($ajax_nonce).'"/>';
2170
2171 }
2172
2173 /**
2174 * Admin notices
2175 *
2176 * @since 3.0.1
2177 */
2178 public function wpstream_update_cache_notice(){
2179
2180 //check_ajax_referer( 'wpstream_notice_nonce', 'security' );
2181
2182 $notice_type = esc_html($_POST['notice_type']);
2183 $notices = get_option('wp_stream_notices');
2184
2185 if(! is_array($notices) ){
2186 $notices=array();
2187 }
2188
2189 $notices[$notice_type]='yes';
2190
2191 update_option('wpstream_notices',$notices);
2192 die();
2193 }
2194
2195
2196
2197
2198 /**
2199 * Activate metaboxes for Streaming controls on sidebar
2200 *
2201 * @since 3.0.1
2202 */
2203 public function wpstream_startstreaming_sidebar_meta() {
2204 global $post;
2205 $term_list = wp_get_post_terms($post->ID, 'product_type');
2206
2207 add_meta_box('wpstream-sidebar-meta', esc_html__('Live Streaming', 'wpstream'), array($this,'wpstream_start_stream_meta'), 'wpstream_product', 'side', 'high');
2208
2209 $is_subscription_live_event = esc_html(get_post_meta($post->ID,'_subscript_live_event',true));
2210 if(!is_wp_error( $term_list )){
2211 if( isset($term_list[0]->name) ){
2212 if( $term_list[0]->name=='live_stream' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='yes' ) ){
2213 add_meta_box('wpstream-sidebar-meta', esc_html__('Live Streaming', 'wpstream'), array($this,'wpstream_start_stream_meta'), 'product', 'side', 'high');
2214 }
2215 }
2216 }
2217
2218 }
2219
2220 /**
2221 * edited 4.0
2222 *
2223 * Show Streaming controls on sidebar
2224 *
2225 * @since 3.0.1
2226 */
2227 public function wpstream_start_stream_meta(){
2228 global $live_event_for_user;
2229 $live_event_for_user = $this->main->wpstream_live_connection->wpstream_get_live_event_for_user();
2230
2231 global $post;
2232 $local_event_options = get_post_meta ($post->ID,'local_event_options','');
2233
2234
2235
2236 if( get_post_status($post->ID)!='auto-draft' ){
2237 $ajax_nonce = wp_create_nonce( "wpstream_start_event_nonce" );
2238 print '<input type="hidden" id="wpstream_start_event_nonce" value="'.$ajax_nonce.'">';
2239
2240 $this->wpstream_live_stream_unit($post->ID);
2241 print '<div class="wpstream_modal_background"></div>';
2242 print '<div class="wpstream_error_modal_notification"><div class="wpstream_error_content">er1</div>
2243 <div class="wpstream_error_ok wpstream_button" type="button">'.esc_html__('Close','wpstream').'</div>
2244 </div>';
2245 }else{
2246 esc_html_e('To Go Live, please publish your channel first !','wpstream');
2247 }
2248 }
2249
2250
2251
2252
2253
2254
2255 /**
2256 *
2257 *
2258 *
2259 */
2260 public function add_dashboard_page() {
2261 add_dashboard_page( '', '', 'administrator', 'wpstream-onboarding', '' );
2262 }
2263
2264
2265
2266
2267
2268 public function wpstream_load_onboarding_wizard() {
2269
2270 // Check for wizard-specific parameter
2271 // Allow plugins to disable the onboarding wizard
2272 // Check if current user is allowed to save settings.
2273
2274
2275 // Don't load the interface if doing an ajax call.
2276 if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
2277 return;
2278 }
2279
2280 set_current_screen();
2281
2282 // Remove an action in the Gutenberg plugin ( not core Gutenberg ) which throws an error.
2283 remove_action( 'admin_print_styles', 'gutenberg_block_editor_admin_print_styles' );
2284
2285 $this->actual_load_onboarding_wizard();
2286
2287 }
2288
2289
2290 /*
2291 * Add on boarding to footer
2292 */
2293
2294
2295
2296 public function wpstream_admin_footer_onboarding(){
2297 if( isset($_GET['page']) && $_GET['page']==='wpstream_onboard') {
2298 $this->wpstream_onboard_display();
2299 }
2300 }
2301
2302
2303 /*
2304 * On Board Display
2305 *
2306 */
2307
2308 public function wpstream_pre_onboard_display(){
2309 $pack_details = $this->main->wpstream_live_connection->wpstream_request_pack_data_per_user();
2310
2311 $this->main->show_user_data($pack_details);
2312
2313
2314 $thumb= plugin_dir_url( dirname( __FILE__ ) ). 'img/logo_onboarding.svg';
2315 ?>
2316
2317 <div class="wpstream_quick_start_wrapper">
2318 <img class="wpstream_onboarding_logo" src="<?php echo esc_url($thumb); ?>" />
2319
2320 <h1><?php print esc_html__('WpStream','wpstream').' <span class="header_special">'.esc_html__('Quick Start','wpstream').'</span>';?></h1>
2321
2322
2323 <p>
2324 <?php esc_html_e('The quick start guide will help you set up Live Streaming, Video On Demand, and Monetization in a fun and interactive way. Give it a shot! ','wpstream');?>
2325 </p>
2326
2327 <div id="wpstream_trigger_quick_start" class="wpstream_button wpstream_button_action"><?php esc_html_e('Start the Guide','wpstream');?></div>
2328
2329
2330
2331 </div>
2332
2333
2334
2335 <script type="text/javascript">
2336 //<![CDATA[
2337 jQuery(document).ready(function(){
2338 jQuery(".wpstream_on_boarding_wrapper").show();
2339 jQuery(".wpstream_modal_background_onboard").show();
2340 });
2341
2342 //]]>
2343 </script>
2344
2345 <?php
2346
2347 }
2348
2349
2350
2351
2352
2353
2354
2355
2356 /*
2357 *
2358 * On Boarding Content
2359 *
2360 */
2361
2362
2363 public function wpstream_onboard_display() {
2364 $this->onboarding_wizard_header();
2365 $this->wpstream_onboarding_step1();
2366 $this->wpstream_onboarding_step2();
2367 $this->wpstream_onboarding_step3_live_streaming();
2368 $this->wpstream_onboarding_step_3_A_live_streaming_free_view();
2369 $this->wpstream_onboarding_step_3_B_live_streaming_pay_per_view();
2370 $this->wpstream_onboarding_step4_vod();
2371 $this->wpstream_onboarding_step_4_free_vod();
2372 $this->wpstream_onboarding_step_4_ppv_vod();
2373 $this->onboarding_wizard_footer();
2374 }
2375
2376
2377 /*
2378 *
2379 * On Boarding Step 1 - the login/register
2380 *
2381 */
2382
2383
2384 public function wpstream_onboarding_step1(){
2385
2386 $wpstream_options_array =array(
2387 2 => array(
2388 'label' => 'WpStream.net Username or Email',
2389 'name' => 'api_username',
2390 'type' => 'text',
2391 ),
2392 3 => array(
2393 'label' => 'WpStream.net Password',
2394 'name' => 'api_password',
2395 'type' => 'password',
2396 ),
2397
2398 );
2399 $token = $this->main->wpstream_live_connection->wpstream_get_token();
2400
2401 ?>
2402 <div class="wpstream_step_wrapper wpstream_step_1" id="wpstream_step_1">
2403 <div class="wpstream_has_credential">
2404 <h1><?php esc_html_e('WpStream Account','wpstream');?></h1>
2405
2406 <div class="wpstream_on_board_login_wrapper_explanations">
2407 <?php esc_html_e('A WpStream account is required to make use of the plugin.','wpstream');?>
2408 </div>
2409
2410
2411 <div class="wpstream_check_account_status">
2412 Checking if you are already logged.....
2413 </div>
2414
2415 <div class="wpstream_onboarding_notification"></div>
2416
2417 <div class="wpstream_option_wrapper wpstream_on_board_login_wrapper">
2418 <h2><?php esc_html_e('Login with your WpStream Account','wpstream');?></h2>
2419 <?php
2420
2421 foreach ($wpstream_options_array as $key=>$option){
2422 print '<div class="wpstream_option">';
2423
2424 $options_value = esc_html( get_option('wpstream_'.$option['name'],'') );
2425 print '<label for="'.$option['name'].'">'.$option['label'].'</label>';
2426 print '<input id="'.$option['name'].'" type="'.$option['type'].'" size="36" name="'.$option['name'].'" value="'.esc_html($options_value).'" />';
2427
2428 print '</div>';
2429 }
2430 ?>
2431 <input type="submit" name="submit" class="wpstream_button wpstream_button_action wpstream_onboard_login" value="<?php esc_html_e('Login','wpstream');?>" />
2432 </div>
2433
2434
2435
2436
2437 <div class="wpstream_on_board_register_wrapper">
2438 <h2><?php esc_html_e('Register for a WpStream Account','wpstream');?></h2>
2439 <div class="wpstream_option">
2440 <label for="wpstream_register_email"><?php esc_html_e('Your Email','wpstream');?></label>
2441 <input id="wpstream_register_email" type="text" size="36" name="wpstream_register_email" value="<?php echo get_option('admin_email'); ?>" />
2442
2443 </div>
2444
2445 <div class="wpstream_option">
2446 <label for="wpstream_register_password"><?php esc_html_e('Your Password','wpstream');?></label>
2447 <input id="wpstream_register_password" type="text" size="36" name="wpstream_register_password" value="<?php echo $this->randomPassword();?>" />
2448 </div>
2449
2450
2451 <?php
2452
2453 $curl_response_decoded['capthca']='';
2454 $curl_response_decoded['capthca_id']='';
2455
2456
2457 if( isset($_GET['page']) && $_GET['page']==='wpstream_onboard') {
2458 $url = 'user/getcapthca';
2459 $curl_post_fields = array();
2460 $curl_response = $this->main->wpstream_live_connection->wpstream_baker_do_curl_base($url,$curl_post_fields);
2461 $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY);
2462
2463 }
2464
2465 ?>
2466 <div class="wpstream_option">
2467 <?php print '<div id="wpstream_capthca">'.$curl_response_decoded['capthca'].'</div>';?>
2468 <label for="wpstream_register_captcha"><?php esc_html_e('Type the characters above','wpstream');?></label>
2469
2470 <input id="wpstream_register_captcha" type="text" size="36" name="wpstream_register_captcha" />
2471 <input id="wpstream_register_captcha_id" type="hidden" size="36" name="wpstream_register_captcha_id" value="<?php echo esc_html($curl_response_decoded['capthca_id']); ?>" />
2472 </div>
2473
2474
2475
2476 <input type="submit" name="submit" class="wpstream_button wpstream_button_action wpstream_onboard_register" value="<?php esc_html_e('register','wpstream');?>" />
2477 </div>
2478
2479
2480 <div id="wpstream_onboarding_action_login"><?php esc_html_e('I already have a WpStream Account','wpstream');?></div>
2481
2482 <div id="wpstream_onboarding_action_register"><?php esc_html_e('Back to Registration','wpstream');?></div>
2483
2484 </div>
2485
2486
2487 <?php
2488 $ajax_nonce = wp_create_nonce( "wpstream_onboarding_nonce");
2489 print'<input type="hidden" id="wpstream_onboarding_nonce" value="'.esc_html($ajax_nonce).'" /> ';
2490
2491 ?>
2492
2493
2494 <div id="wpstream_on_board" class="wpstream_action_next_step" data-nextthing="wpstream_step_2" style="display:none;" >Move to step 2</div>
2495 </div>
2496 <?php
2497
2498 if(trim($token)!==''){
2499 print '<div id="wpstream_have_token"></div>';
2500 }
2501 }
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512 /*
2513 *
2514 * Generate random pass
2515 *
2516 */
2517
2518 public function randomPassword() {
2519 $alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
2520 $pass = array(); //remember to declare $pass as an array
2521 $alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
2522 for ($i = 0; $i < 8; $i++) {
2523 $n = rand(0, $alphaLength);
2524 $pass[] = $alphabet[$n];
2525 }
2526 return implode($pass); //turn the array into a string
2527 }
2528
2529
2530 /*
2531 *
2532 *
2533 *
2534 */
2535
2536 public function wpstream_onboarding_step2(){
2537 ?>
2538
2539 <div class="wpstream_step_wrapper wpstream_step_2" id="wpstream_step_2">
2540 <h1>Welcome to <span class="header_special">WpStream</span>! How would you like to start?</h1>
2541
2542 <div class="wpstream_accordion_header wpstream_action_next_step" data-nextthing="wpstream_step_3" ><?php esc_html_e('Go LIVE!','wpstream');?></div>
2543 <div class="wpstram_or">or</div>
2544 <div class="wpstream_accordion_header wpstream_action_next_step" data-nextthing="wpstream_step_4" ><?php esc_html_e('Create a Video-On-Demand (VOD)','wpstream');?></div>
2545
2546 </div>
2547
2548
2549 <?php
2550 }
2551
2552 /*
2553 *
2554 *
2555 *
2556 */
2557
2558 public function wpstream_onboarding_step3_live_streaming(){
2559 ?>
2560
2561 <div class="wpstream_step_wrapper wpstream_step_3 wpstream_onboarding_live" id="wpstream_step_3">
2562 <h1><?php esc_html_e('Do you want to charge a fee for watching?','wpstream'); ?></h1>
2563
2564 <div class="wpstream_accordion_header wpstream_action_next_step" data-nextthing="wpstream_step_3a"><?php esc_html_e('No - Free-To-View (FTV)','wpstream');?></div>
2565 <div class="wpstram_or">or</div>
2566 <div class="wpstream_accordion_header wpstream_action_next_step" data-nextthing="wpstream_step_3b" ><?php esc_html_e('Yes - Pay-Per-View (PPV)','wpstream');?></div>
2567
2568 <div class="wpstream_initial_onboarding_controls_wrapper">
2569 <span class="wpstream_onboard_initial_bubble_prev" data-step="wpstream_step_2"><?php esc_html_e('Prev','wpstream');?></span>
2570 </div>
2571
2572 </div>
2573
2574
2575 <?php
2576 }
2577
2578
2579 /*
2580 *
2581 *
2582 *
2583 */
2584 public function wpstream_onboarding_step_3_A_live_streaming_free_view(){
2585 ?>
2586
2587 <div class="wpstream_step_wrapper wpstream_step_3a wpstream_onboarding_live" id="wpstream_step_3a">
2588 <h1><?php esc_html_e('Let’s create your first FTV live channel','wpstream');?></h1>
2589
2590 <div id="wpstream_onboard_live_notice" class="wpstream_onboarding_notification"></div>
2591 <div id="wpstream_onboard_live" class="wpstream_accordion_container">
2592 <label>Name your first Free-To-View channel</label>
2593 <input type="text" name="channel_name" id="wpstream_onboarding_channel_name" class="wpstream_onboarding_channel_name" value="<?php esc_html_e('My first FTV channel','wpstream');?>" >
2594 <input type="submit" name="submit" id="wpstream_on_board_create_channel" class="wpstream_button wpstream_button_action wpstream_onboard_live_action" value="<?php esc_html_e('Create Channel','wpstream');?>" />
2595
2596 </div>
2597
2598 <div class="wpstream_initial_onboarding_controls_wrapper">
2599 <span class="wpstream_onboard_initial_bubble_prev" data-step="wpstream_step_3"><?php esc_html_e('Prev','wpstream');?></span>
2600 </div>
2601
2602 </div>
2603
2604
2605 <?php
2606 }
2607
2608
2609 /*
2610 *
2611 *
2612 *
2613 */
2614
2615 public function wpstream_onboarding_step_3_B_live_streaming_pay_per_view(){
2616 ?>
2617
2618 <div class="wpstream_step_wrapper wpstream_step_3a wpstream_onboarding_live" id="wpstream_step_3b">
2619 <h1><?php esc_html_e('Make your live stream Pay Per View','wpstream');?></h1>
2620 <?php
2621 if ( class_exists( 'WooCommerce' ) ) {
2622 ?>
2623 <div id="wpstream_onboard_live_ppv_notice" class="wpstream_onboarding_notification"></div>
2624 <div id="wpstream_onboard_live_ppv" class="wpstream_accordion_container">
2625 <label><?php esc_html_e('Choose a name for your channel','wpstream');?></label>
2626 <input type="text" name="channel_name" id="wpstream_onboarding_channel_name_ppv" class="wpstream_onboarding_channel_name" value="<?php esc_html_e('My First PPV Channel','wpstream');?>">
2627 <label><?php esc_html_e('Pay-Per-View Price ($)','wpstream');?></label>
2628 <input type="text" name="channel_name" id="wpstream_onboarding_event_price_ppv" class="wpstream_onboarding_event_price" value="10">
2629 <input type="submit" name="submit" id="wpstream_onboard_live_ppv_action" class="wpstream_button wpstream_button_action wpstream_onboard_live_ppv_action" value="<?php esc_html_e('Create Channel','wpstream');?>" />
2630
2631 </div>
2632 <?php
2633 } else {
2634 $this->wpstream_onboarding_woo_warning();
2635 } ?>
2636
2637
2638 <div class="wpstream_initial_onboarding_controls_wrapper">
2639 <span class="wpstream_onboard_initial_bubble_prev" data-step="wpstream_step_3"><?php esc_html_e('Prev','wpstream');?></span>
2640 </div>
2641 </div>
2642 <?php
2643 }
2644
2645
2646
2647
2648
2649
2650 /*
2651 * WooCommerce not installed Warning
2652 *
2653 *
2654 */
2655
2656 public function wpstream_onboarding_woo_warning(){
2657 print'<div class="wpstream_warning_onboarding">
2658 '.esc_html__('Pay-Per-View streaming requires WooCommerce. Please install the WooCommerce plugin and try again.','wpstream').'
2659 </br>
2660 <div class="wpstream_install_plugin">'. esc_html__('Install WooCommerce','wpstream').'</div>
2661
2662 <div class="wpstream_onboarding_tryagain">'.esc_html__('Try Again','wpstream').'</div>
2663 </div>';
2664 }
2665
2666
2667 /*
2668 *
2669 *
2670 *
2671 */
2672
2673 public function wpstream_onboarding_step4_vod(){
2674 ?>
2675 <div class="wpstream_step_wrapper wpstream_step_4 wpstream_onboarding_vod" id="wpstream_step_4">
2676 <h1><?php esc_html_e('Do you want to charge a fee for watching?','wpstream');?></h1>
2677
2678 <div class="wpstream_accordion_header wpstream_action_next_step" data-control="wpstream_onboard_vod_free" data-nextthing="wpstream_step_4a" ><?php esc_html_e('No - Free-To-View (FTV)','wpstream'); ?></div>
2679 <div class="wpstram_or">or</div>
2680 <div class="wpstream_accordion_header wpstream_action_next_step" data-control="wpstream_onboard_vod_ppv" data-nextthing="wpstream_step_4b" ><?php esc_html_e('Yes - Pay-Per-View (PPV)','wpstream'); ?></div>
2681
2682
2683 <div class="wpstream_initial_onboarding_controls_wrapper">
2684 <span class="wpstream_onboard_initial_bubble_prev" data-step="wpstream_step_2"><?php esc_html_e('Prev','wpstream');?></span>
2685 </div>
2686
2687 </div>
2688 <?php
2689 }
2690
2691
2692 /*
2693 *
2694 *
2695 *
2696 */
2697 public function wpstream_onboarding_step_4_free_vod(){
2698
2699 $current_screen=get_current_screen();
2700 if($current_screen->base !=='wpstream_page_wpstream_onboard'){
2701 return;
2702 }
2703
2704 $token = $this->main->wpstream_live_connection->wpstream_get_token();
2705 $video_list = array();
2706 if($token!=''){
2707 $video_list = $this->main->wpstream_live_connection->wpstream_get_videos();
2708 }
2709
2710 ?>
2711
2712 <div class="wpstream_step_wrapper wpstream_step_3a wpstream_onboarding_live" id="wpstream_step_4a">
2713 <h1><?php esc_html_e('Let’s create your first Free-To-View VOD','wpstream');?></h1>
2714
2715
2716
2717 <?php
2718 if( count($video_list) !== 0 ) {
2719 ?>
2720 <div id="wpstream_onboard_vod_free_notice" class="wpstream_onboarding_notification"></div>
2721 <div id="wpstream_onboard_vod_free" class="wpstream_accordion_container">
2722 <label><?php esc_html_e('Name your FTV Video-On-Demand','wpstream')?></label>
2723 <input type="text" name="channel_name" class="wpstream_onboarding_vod_name" id="wpstream_onboarding_vod_name" value="<?php esc_html_e('My First FTV VOD','wpstream');?>" >
2724 <?php $this->wpstream_show_vod_dropdown_onboarding($video_list); ?>
2725 <input type="submit" name="submit" class="wpstream_button wpstream_button_action wpstream_onboard_vod_free_action" id="wpstream_onboard_vod_free_action" value="<?php esc_html_e('Create FTV VOD','wpstream');?>" />
2726 </div>
2727
2728 <?php }else{
2729 $this->wpstream_obboarding_file_warning();
2730 } ?>
2731
2732
2733
2734 <div class="wpstream_initial_onboarding_controls_wrapper">
2735 <span class="wpstream_onboard_initial_bubble_prev" data-step="wpstream_step_4"><?php esc_html_e('Prev','wpstream');?></span>
2736 </div>
2737
2738 </div>
2739
2740
2741 <?php
2742 }
2743
2744 /*
2745 *
2746 *
2747 *
2748 */
2749
2750 public function wpstream_show_vod_dropdown_onboarding($video_list,$appendix=''){
2751
2752 print '<label>'.esc_html__('Choose Recording','wpstream').'</label>
2753 <select name="wpstream_free_vod_file_name" id="wpstream_free_vod_file_name'.$appendix.'">
2754 <option value="">'.esc_html__('Please select a recording from the list','wpstream').'</option>';
2755
2756 if(is_array($video_list)){
2757 foreach ($video_list as $key=>$value){
2758 print '<option value="'.$key.'"';
2759 print '>'.$value.'</option>';
2760 }
2761 }
2762 print'</select>';
2763
2764 }
2765
2766
2767
2768 /*
2769 *
2770 *
2771 *
2772 */
2773 public function wpstream_obboarding_file_warning(){
2774 print '<div class="wpstream_warning_onboarding">
2775 '.esc_html__('A recording is needed to create a VOD from. There are no recordings under your account. You can create new recordings by recording a live channel or uploading video files directly.','wpstream').'
2776 </br>
2777 <div class="wpstream_upload_video">'.esc_html__('Upload Video','wpstream').'</div>
2778
2779 <div class="wpstream_onboarding_tryagain">'.esc_html__('Try Again','wpstream').'</div>
2780 </div>';
2781 }
2782
2783
2784
2785
2786 /*
2787 *
2788 *
2789 *
2790 */
2791 public function wpstream_onboarding_step_4_ppv_vod(){
2792 $current_screen=get_current_screen();
2793
2794 if($current_screen->base !=='wpstream_page_wpstream_onboard'){
2795 return;
2796 }
2797
2798 $token = $this->main->wpstream_live_connection->wpstream_get_token();
2799 $video_list = array();
2800 if($token!=''){
2801 $video_list = $this->main->wpstream_live_connection->wpstream_get_videos();
2802 }
2803 ?>
2804
2805 <div class="wpstream_step_wrapper wpstream_step_3a wpstream_onboarding_live" id="wpstream_step_4b">
2806 <h1><?php esc_html_e('Let\'s create your first Pay-Per-View VOD','wpstream');?></h1>
2807
2808 <div id="wpstream_onboard_vod_ppv_notice" class="wpstream_onboarding_notification"></div>
2809 <?php
2810 if( count($video_list) !== 0 ) {
2811 if ( class_exists( 'WooCommerce' ) ) {
2812 ?>
2813 <div id="wpstream_onboard_vod_ppv" class="wpstream_accordion_container">
2814 <label><?php esc_html_e('Name your PPV Video-On-Demand','wpstream'); ?></label>
2815 <input type="text" name="channel_name" class="wpstream_onboarding_ppv_vod_name" id="wpstream_onboarding_ppv_vod_name" value="<?php esc_html_e('My First PPV VOD','wpstream');?>">
2816
2817 <?php $this->wpstream_show_vod_dropdown_onboarding($video_list,'_for_ppv'); ?>
2818
2819 <label><?php esc_html_e('Pay-Per-View Price','wpstream');?></label>
2820 <input type="text" name="channel_name" class="wpstream_onboarding_vod_price" id="wpstream_onboarding_vod_price" value="10">
2821 <input type="submit" name="submit" class="wpstream_button wpstream_button_action wpstream_onboard_vod_ppv_action" id="wpstream_onboard_vod_ppv_action" value="<?php esc_html_e('Create PPV VOD','wpstream');?>" />
2822
2823 </div>
2824 <?php }else{
2825 $this->wpstream_onboarding_woo_warning();
2826 }
2827
2828
2829 }else{
2830 $this->wpstream_obboarding_file_warning();
2831 }
2832 ?>
2833
2834
2835 <div class="wpstream_initial_onboarding_controls_wrapper">
2836 <span class="wpstream_onboard_initial_bubble_prev" data-step="wpstream_step_4"><?php esc_html_e('Prev','wpstream');?></span>
2837 </div>
2838
2839 </div>
2840
2841
2842 <?php
2843 }
2844
2845
2846
2847
2848 /*
2849 *
2850 * On boarding Header
2851 *
2852 */
2853 public function onboarding_wizard_header() {
2854 $thumb= plugin_dir_url( dirname( __FILE__ ) ). 'img/logo_onboarding.svg';
2855 ?>
2856
2857 <div class="wpstream_on_boarding_wrapper">
2858 <div class="wpstream_close_onboarding wpstream_close_initial_onboarding"></div>
2859 <img class="wpstream_onboarding_logo" src="<?php echo esc_url($thumb); ?>" />
2860 <div class="wpstream_close_onboarding_warning"></div>
2861
2862 <?php
2863 }
2864
2865
2866
2867
2868
2869 /*
2870 *
2871 * On Boarding Footer
2872 *
2873 */
2874 public function onboarding_wizard_footer() {
2875 ?>
2876 <div class="wpstream_modal_back"></div>
2877 </div>
2878 <div class="wpstream_modal_background_onboard"></div>
2879 <?php
2880 }
2881
2882
2883
2884 /*
2885 *
2886 * On Boarding create PPV channel
2887 *
2888 */
2889
2890
2891 public function wpstream_on_board_create_channel_ppv(){
2892 check_ajax_referer( 'wpstream_onboarding_nonce', 'security' );
2893 $current_user = wp_get_current_user();
2894
2895 if(current_user_can('administrator')){
2896 $channel_name = sanitize_text_field($_POST['channel_name']);
2897 $channel_price = floatval($_POST['channel_price']);
2898 $my_post = array(
2899 'post_title' => $channel_name,
2900 'post_content' => '',
2901 'post_status' => 'publish',
2902 'post_type' => 'product',
2903 'post_author' => $current_user->ID
2904 );
2905
2906 // Insert the post into the database
2907 $post_id = wp_insert_post( $my_post );
2908
2909 if(is_wp_error($post_id)){
2910 echo json_encode( array('succes'=>false) );
2911 }else{
2912
2913 $product = wc_get_product($post_id);
2914 $price = wc_format_decimal($channel_price);
2915
2916 $product = wc_get_product( $post_id );
2917 $product->set_price( $price );
2918 $product->set_regular_price( $price ); // To be sure
2919 $product->save();
2920 update_post_meta ($post_id,'event_passed',0);
2921 wp_set_object_terms( $post_id, 'live_stream', 'product_type' );
2922
2923
2924
2925
2926 $permalink = get_edit_post_link($post_id);
2927
2928 $permalink= add_query_arg( 'onboard', 'yes', $permalink );
2929 $permalink= add_query_arg( 'branch', '2', $permalink );
2930
2931
2932 echo json_encode( array(
2933 'success'=> true,
2934 'link' => ($permalink)
2935 ));
2936 }
2937
2938 }
2939 die();
2940 }
2941
2942 /*
2943 *
2944 * On Boarding create channel
2945 *
2946 */
2947
2948
2949 public function wpstream_on_board_create_channel(){
2950 check_ajax_referer( 'wpstream_onboarding_nonce', 'security' );
2951 $current_user = wp_get_current_user();
2952
2953 if(current_user_can('administrator')){
2954 $channel_name=sanitize_text_field($_POST['channel_name']);
2955 $my_post = array(
2956 'post_title' => $channel_name,
2957 'post_content' => '',
2958 'post_status' => 'publish',
2959 'post_type' => 'wpstream_product',
2960 'post_author' => $current_user->ID
2961 );
2962
2963 // Insert the post into the database
2964 $post_id = wp_insert_post( $my_post );
2965
2966 if(is_wp_error($post_id)){
2967 echo json_encode( array('succes'=>false) );
2968 }else{
2969 $permalink = get_edit_post_link($post_id);
2970
2971 $permalink= add_query_arg( 'onboard', 'yes', $permalink );
2972 $permalink= add_query_arg( 'branch', '1', $permalink );
2973
2974
2975 echo json_encode( array(
2976 'success'=> true,
2977 'link' => ($permalink)
2978 ));
2979 }
2980
2981 }
2982 die();
2983 }
2984
2985
2986
2987 /*
2988 *
2989 * On Boarding create free vod
2990 *
2991 */
2992
2993
2994 public function wpstream_on_board_create_free_vod(){
2995 $current_user = wp_get_current_user();
2996 check_ajax_referer( 'wpstream_onboarding_nonce', 'security' );
2997 if(current_user_can('administrator')){
2998 $channel_name =sanitize_text_field($_POST['channel_name']);
2999 $file_name =sanitize_text_field($_POST['file_name']);
3000 $my_post = array(
3001 'post_title' => $channel_name,
3002 'post_content' => '',
3003 'post_status' => 'publish',
3004 'post_type' => 'wpstream_product_vod',
3005 'post_author' => $current_user->ID
3006 );
3007
3008 // Insert the post into the database
3009 $post_id = wp_insert_post( $my_post );
3010
3011 if(is_wp_error($post_id)){
3012 echo json_encode( array('succes'=>false) );
3013 }else{
3014 update_post_meta($post_id, 'wpstream_product_type', 2);
3015 update_post_meta($post_id, 'wpstream_free_video', $file_name);
3016
3017
3018 $permalink = get_edit_post_link($post_id);
3019
3020 $permalink= add_query_arg( 'onboard', 'yes', $permalink );
3021 $permalink= add_query_arg( 'branch', '3', $permalink );
3022
3023
3024 echo json_encode( array(
3025 'success'=> true,
3026 'link' => ($permalink)
3027 ));
3028 }
3029
3030 }
3031 die();
3032 }
3033
3034
3035 /*
3036 *
3037 * On Boarding create ppv vod
3038 *
3039 */
3040
3041
3042 public function wpstream_on_board_create_ppv_vod(){
3043 $current_user = wp_get_current_user();
3044 check_ajax_referer( 'wpstream_onboarding_nonce', 'security' );
3045
3046 if(current_user_can('administrator')){
3047 $channel_name = sanitize_text_field($_POST['channel_name']);
3048 $vod_price = floatval($_POST['vod_price']);
3049 $file_name = sanitize_text_field($_POST['file_name']);
3050
3051 $my_post = array(
3052 'post_title' => $channel_name,
3053 'post_content' => '',
3054 'post_status' => 'publish',
3055 'post_type' => 'product',
3056 'post_author' => $current_user->ID
3057 );
3058
3059 // Insert the post into the database
3060 $post_id = wp_insert_post( $my_post );
3061
3062 if(is_wp_error($post_id)){
3063 echo json_encode( array('succes'=>false) );
3064 }else{
3065
3066 $product = wc_get_product($post_id);
3067 $price = wc_format_decimal($vod_price);
3068
3069 $product = wc_get_product( $post_id );
3070 $product->set_price( $price );
3071 $product->set_regular_price( $price ); // To be sure
3072 $product->save();
3073 update_post_meta ($post_id,'event_passed',0);
3074 update_post_meta ($post_id,'_movie_url', $file_name);
3075 wp_set_object_terms( $post_id, 'video_on_demand', 'product_type' );
3076
3077
3078
3079
3080 $permalink = get_edit_post_link($post_id);
3081
3082 $permalink= add_query_arg( 'onboard', 'yes', $permalink );
3083 $permalink= add_query_arg( 'branch', '4', $permalink );
3084
3085
3086 echo json_encode( array(
3087 'success'=> true,
3088 'link' => ($permalink) ,
3089 ' $file_name'=> $file_name,
3090 ));
3091 }
3092
3093 }
3094 die();
3095 }
3096
3097
3098 /*
3099 *
3100 * On Boarding login
3101 *
3102 */
3103 public function wpstream_on_board_login(){
3104 check_ajax_referer( 'wpstream_onboarding_nonce', 'security' );
3105
3106 if(current_user_can('administrator')){
3107 $username = sanitize_text_field($_POST['api_username']);
3108 $password = sanitize_text_field($_POST['api_password']);
3109 update_option('wpstream_api_username',$username);
3110 update_option('wpstream_api_password',$password);
3111
3112 $token = $this->main->wpstream_live_connection->wpstream_get_token();
3113
3114 echo json_encode( array(
3115 'success'=> true,
3116 'token' => ($token)
3117 ));
3118
3119 }else{
3120 echo json_encode( array(
3121 'success'=> false,
3122 'token' => esc_html('You are not an administrator','wpstream')
3123 ));
3124 }
3125 die();
3126 }
3127
3128
3129 public function wpstream_register_refresh_capthca(){
3130
3131 if(current_user_can('administrator')){
3132
3133 }
3134 }
3135
3136 /*
3137 *
3138 * On Boarding login
3139 *
3140 */
3141 public function wpstream_on_board_register(){
3142
3143 check_ajax_referer( 'wpstream_onboarding_nonce', 'security' );
3144
3145 if(current_user_can('administrator')){
3146 $wpstream_register_email = sanitize_text_field($_POST['wpstream_register_email']);
3147 $wpstream_register_password = sanitize_text_field($_POST['wpstream_register_password']);
3148 $wpstream_register_captcha = sanitize_text_field($_POST['wpstream_register_captcha']);
3149 $wpstream_register_captcha_id = sanitize_text_field($_POST['wpstream_register_captcha_id']);
3150
3151 $validate = $this->wpstream_validate_onboard_register($wpstream_register_email,$wpstream_register_password);
3152 if(!$validate['success']){
3153 echo json_encode($validate);
3154 die();
3155 }
3156
3157 $url='user/create';
3158 $curl_post_fields=array(
3159 'email' => $wpstream_register_email,
3160 'password' => $wpstream_register_password,
3161 'captcha' => $wpstream_register_captcha,
3162 'captcha_id' => $wpstream_register_captcha_id,
3163 );
3164
3165
3166
3167 $curl_response = $this->main->wpstream_live_connection->wpstream_baker_do_curl_base($url,$curl_post_fields);
3168 $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY);
3169
3170
3171
3172 if($curl_response_decoded['success']){
3173
3174 if($curl_response_decoded['request']['registred']){
3175 // we are registerd
3176
3177 update_option('wpstream_api_username',$wpstream_register_email);
3178 update_option('wpstream_api_password',$wpstream_register_password);
3179
3180 $token = $this->main->wpstream_live_connection->wpstream_get_token();
3181
3182 echo json_encode( array(
3183 'success' => true,
3184 'token' => $token ,
3185 'message' => esc_html__('Your Account was created. Please stand by...','wpstream'),
3186
3187 ));
3188 die();
3189 }else{
3190
3191 echo json_encode( array(
3192 'success'=> false,
3193 'message'=> $curl_response_decoded['request']['message'],
3194 'curl'=>$curl_response_decoded,
3195
3196 ));
3197 die();
3198 }
3199
3200
3201
3202
3203 }else{
3204
3205 echo json_encode( array(
3206 'success'=> false,
3207 'message'=> esc_html__('Register action could not be completed. Please register on wpstream.net','wpstream'),
3208
3209 ));
3210 die();
3211 }
3212
3213
3214
3215
3216
3217
3218
3219
3220 }else{
3221 echo json_encode( array(
3222 'success'=> false,
3223 'message' => esc_html('You are not an administrator','wpstream')
3224 ));
3225 die();
3226 }
3227
3228 die();
3229 }
3230
3231
3232 /*
3233 *
3234 * Validate for register
3235 *
3236 */
3237
3238
3239 public function wpstream_validate_onboard_register($wpstream_register_email,$wpstream_register_password){
3240
3241 $return= array(
3242 'success'=>true
3243 );
3244
3245 if ($wpstream_register_email=='' ){
3246 $return= array(
3247 'success'=> false,
3248 'message' => esc_html('The email Field is Empty','wpstream')
3249 );
3250 return $return;die();
3251 }
3252
3253 if(filter_var($wpstream_register_email,FILTER_VALIDATE_EMAIL) === false) {
3254 $return= array(
3255 'success'=> false,
3256 'message' => esc_html('The email doesn\'t look right !','wpstream')
3257 );
3258 return $return;die();
3259 }
3260
3261
3262 $domain = mb_substr(strrchr($wpstream_register_email, "@"), 1);
3263 if( $domain!='' && !checkdnsrr ($domain) ){
3264 $return= array(
3265 'success'=> false,
3266 'message' => esc_html('The email doesn\'t look right !','wpstream')
3267 );
3268 return $return;die();
3269 }
3270
3271
3272
3273 if(strlen($wpstream_register_password)<5){
3274 $return= array(
3275 'success'=> false,
3276 'message' => esc_html('The password is too short. Please use at least 5 characters.','wpstream')
3277 );
3278 return $return;die();
3279 }
3280
3281 return $return;die();
3282 }
3283 }