PluginProbe
WpStream – Live Streaming, Video on Demand, Pay Per View / 2.06
WpStream – Live Streaming, Video on Demand, Pay Per View v2.06
4.14.1 4.14.0 4.13.2 4.13.1 4.13 4.12.5 4.12.4 4.12.3 4.12.2 4.12.1 4.12 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5 4.5.1 4.5.11 4.5.11.1 4.5.11.2 4.5.11.4 4.5.11.5 4.5.11.6 All 181 releases
← All changes | wpstream.php +412 -235 4.12.12.06 View file →
@@ -1,21 +1,20 @@
1 1 <?php
2 2 /**
3 - * Plugin Name: WpStream - Live Streaming, Video on Demand, Pay Per View
4 - * Plugin URI: http://wpstream.net
5 - * Description: WpStream is a platform that allows you to live stream, create Video-on-Demand, and offer Pay-Per-View videos. We provide an affordable and user-friendly way for businesses, non-profits, and public institutions to broadcast their content and monetize their work.
6 - * Version: 4.12.1
7 - * Author: wpstream
8 - * Author URI: http://wpstream.net
9 - * Text Domain: wpstream
10 - * Domain Path: /languages/
3 + * Plugin Name: WpStream
4 + * Plugin URI: wpstream.net
5 + * Description: WpStream is a wordpress plugin to help you stream & monetize media content.
6 + * Version: 2.06
7 + * Author: wpstream.net
8 + * Author URI: https://wpstream.net
9 + * Developer: WpStream
10 + * Developer URI: https://wpstream.net
11 + * Text Domain: wpstream
12 + * Domain Path: /languages
13 + * * Copyright: © 2017 WpStream
11 14 */
15 +
12 16
13 -// If this file is called directly, abort.
14 -if ( ! defined( 'WPINC' ) ) {
15 - die;
16 -}
17 -define('WPSTREAM_PLUGIN_VERSION', '4.12.1');
18 17 define('WPSTREAM_CLUBLINK', 'wpstream.net');
19 18 define('WPSTREAM_CLUBLINKSSL', 'https');
20 19 define('WPSTREAM_PLUGIN_URL', plugins_url() );
21 20 define('WPSTREAM_PLUGIN_DIR_URL', plugin_dir_url(__FILE__) );
@@ -20,303 +19,481 @@
20 19 define('WPSTREAM_PLUGIN_URL', plugins_url() );
21 20 define('WPSTREAM_PLUGIN_DIR_URL', plugin_dir_url(__FILE__) );
22 21 define('WPSTREAM_PLUGIN_PATH', plugin_dir_path(__FILE__) );
23 22 define('WPSTREAM_PLUGIN_BASE', plugin_basename(__FILE__) );
24 -if( !defined('WPSTREAM_API' ) ) {
25 - define('WPSTREAM_API', 'https://baker.wpstream.net');
23 +
24 +require_once ('main.php');
25 +require_once ('libs/api_functions.php');
26 +require_once ('libs/plugin-admin.php');
27 +require_once ('libs/product_types.php');
28 +require_once ('libs/wpstream_free_product_types.php');
29 +require_once ('libs/shortcodes.php');
30 +require_once ('libs/keys.php');
31 +
32 +
33 +
34 +function wpstream_install(){
35 + flush_rewrite_rules();
26 36 }
27 -if ( !defined( 'WPSTREAM_CLICK' ) ) {
28 - define( 'WPSTREAM_CLICK', 'https://click.wpstream.net' );
37 +
38 +register_activation_hook( __FILE__, 'wpstream_install' );
39 +
40 +
41 +
42 +
43 +function wpstream_deactivation(){
44 + delete_option('wp_estate_token_expire');
45 + delete_option('wp_estate_curent_token');
46 + delete_option('wpstream_api_key');
47 + delete_option('wpstream_api_secret_key');
48 + delete_option('wpstream_api_username');
49 + delete_option('wpstream_api_password');
50 +
51 + flush_rewrite_rules();
29 52 }
30 -if ( !defined( 'WPSTREAM_PLAYER') ) {
31 - define ( 'WPSTREAM_PLAYER', 'https://player.wpstream.net' );
53 +register_deactivation_hook( __FILE__, 'wpstream_deactivation' );
54 +
55 +
56 +wpstream_main_start();
57 +
58 +
59 +
60 +function wpstream_admin_notice(){
61 + if ( !in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
62 + print '<div class="notice notice-error is-dismissible">
63 + <p>'.__( 'WpStream Pay Per View / Subscription mode works only with WooCommerce - If you want to charge money for your live events or videos you need to activate WooCommerce plugin', 'wpestate' ).'</p>
64 + </div>';
65 + }
66 + if( !in_array ('curl', get_loaded_extensions())) {
67 + print '<div class="notice notice-error is-dismissible">
68 + <p>'.__( 'The php CURL library is not enabled on your server. WpStream plugin needs this library in order to work. Please address this issue with your hosting provider.', 'wpestate' ).'</p>
69 + </div>';
70 + }
71 +
72 +
32 73 }
74 +add_action( 'admin_notices', 'wpstream_admin_notice' );
33 75
34 76
35 -define('WPSTREAM_TIMEOUT_CONST', 20); // in seconds
36 77
37 -function wpstream_cleanup_logs_handler() {
38 - $logger = new WpStream_Logger();
39 - $logger->clear_old_logs();
78 +function wpstream_enqueue_styles() {
79 + wp_enqueue_style('wpstream-style', WPSTREAM_PLUGIN_DIR_URL .'/wpstream_style.css' );
80 + wp_enqueue_style('video-js.min', WPSTREAM_PLUGIN_DIR_URL.'/css/video-js.min.css', array(), '1.0', 'all');
81 + wp_enqueue_script('video.min', WPSTREAM_PLUGIN_DIR_URL.'js/video.min.js',array(), '1.0', false);
82 +
83 +
84 + wp_enqueue_script('youtube.min', WPSTREAM_PLUGIN_DIR_URL.'js/youtube.min.js',array('video.min'), '1.0', false);
85 + wp_enqueue_script('videojs-vimeo.min', WPSTREAM_PLUGIN_DIR_URL.'js/videojs-vimeo.min.js',array('video.min'), '1.0', false);
40 86 }
41 -add_action('wpstream_log_cleanup', 'wpstream_cleanup_logs_handler');
42 87
43 -/**
44 - * The code that runs during plugin activation.
45 - * This action is documented in includes/class-wpstream-activator.php
46 - */
47 -function activate_wpstream() {
48 - require_once plugin_dir_path( __FILE__ ) . 'includes/class-wpstream-activator.php';
49 - Wpstream_Activator::activate();
50 88
51 - if( !wp_next_scheduled( 'wpstream_log_cleanup' ) ) {
52 - wp_schedule_event( time(), 'daily', 'wpstream_log_cleanup' );
53 - }
89 +
90 +
91 +function wpstream_enqueue_styles_admin(){
92 + wp_enqueue_script("jquery-ui-slider");
93 + wp_enqueue_script("jquery-ui-datepicker");
94 + wp_enqueue_script('wpstream-jquery.fileupload', WPSTREAM_PLUGIN_DIR_URL.'js/jquery.fileupload.js',array(), '1.0', true);
95 +
96 + wp_enqueue_style ('admin-css', WPSTREAM_PLUGIN_DIR_URL.'/css/admin_style.css', array(), '1.0', 'all');
97 + wp_enqueue_script('wpstream-admin-control', WPSTREAM_PLUGIN_DIR_URL.'js/admin_control.js',array(), '1.0', true);
98 + wp_localize_script('wpstream-admin-control', 'wpstream_admin_control_vars',
99 + array(
100 + 'admin_url' => get_admin_url(),
101 + 'loading_url' => WPSTREAM_PLUGIN_DIR_URL.'/img/loading.gif',
102 + 'download_mess' => esc_html__('Click to download! The url will work for the next 20 minutes! Refresh page if you need to generate the link again!','wpstream'),
103 + 'uploading' => esc_html('We are uploading your file.Do not close this window!','wpstream'),
104 + 'upload_complete2' => esc_html('Upload Complete! You can upload another file!','wpstream'),
105 + 'not_accepted' => esc_html('The file is not an accepted video format','wpstream'),
106 + 'upload_complete' => esc_html('Upload Complete!','wpstream'),
107 + 'no_band' => esc_html('Not enough bandwidth.','wpsteam'),
108 + 'no_band_no_store' => esc_html('Not enough bandwidth or storage.','wpsteam')
109 +
110 + ));
54 111 }
55 112
56 -/**
57 - * The code that runs during plugin deactivation.
58 - * This action is documented in includes/class-wpstream-deactivator.php
59 - */
60 -function deactivate_wpstream() {
61 - require_once plugin_dir_path( __FILE__ ) . 'includes/class-wpstream-deactivator.php';
62 - Wpstream_Deactivator::deactivate();
63 113
64 - wp_clear_scheduled_hook( 'wpstream_log_cleanup' );
114 +
115 +
116 +
117 +function wpstream_my_custom_endpoints() {
118 + add_rewrite_endpoint( 'video-list', EP_ROOT | EP_PAGES );
119 + add_rewrite_endpoint( 'event-list', EP_ROOT | EP_PAGES );
65 120 }
66 121
67 -register_activation_hook( __FILE__, 'activate_wpstream' );
68 -register_deactivation_hook( __FILE__, 'deactivate_wpstream' );
69 122
70 -/**
71 - * Wrapper function for wpstream_dashboard_save_channel_data to be called from theme
72 - * This provides backward compatibility for the theme
73 - */
74 -function wpstream_dashboard_save_channel_data_plugin() {
75 - global $wpstream_plugin;
76 - if (isset($wpstream_plugin) && isset($wpstream_plugin->wpstream_ajax)) {
77 - $wpstream_plugin->wpstream_ajax->wpstream_dashboard_save_channel_data();
78 - }
123 +
124 +function wpstream_my_custom_query_vars( $vars ) {
125 + $vars[] = 'video-list';
126 + $vars[] = 'event-list';
127 + return $vars;
79 128 }
80 129
81 -/**
82 - * The core plugin class that is used to define internationalization,
83 - * admin-specific hooks, and public-facing site hooks.
84 - */
85 -require plugin_dir_path( __FILE__ ) . 'includes/class-wpstream.php';
86 -require plugin_dir_path( __FILE__ ) . 'wpstream-elementor.php';
87 -require plugin_dir_path( __FILE__ ) . 'streamify/streamify.php';
88 130
89 -require plugin_dir_path( __FILE__ ) . 'integrations/integrations.php';
90 131
91 -function wpstream_load_theme_functionality() {
92 - define ('WPSTREAM_FRAMEWORK_BASE', plugin_dir_path(__FILE__) . 'hello-wpstream' );
132 +function wpstream_custom_flush_rewrite_rules() {
133 + flush_rewrite_rules();
134 +}
93 135
94 - $core_files = array(
95 - '/framework/metaboxes.php',
96 - '/framework/query-functions.php',
97 - '/framework/wpstream-video-functions.php',
98 - '/framework/ajax-functions.php',
99 - '/framework/dashboard-functions.php',
100 - '/framework/wpstream-help-functions.php',
101 - '/framework/video-pages-functions.php',
102 - '/framework/comments-functions.php',
103 - '/framework/gallery-functions.php',
104 - '/framework/shortcodes-functions.php',
105 - '/framework/post-types/main.php',
106 - '/framework/woocommerce-functions.php',
107 - '/framework/ajax-upload.php',
108 - '/framework/email-functions.php',
109 - '/framework/widgets/class-wpstream-widget-manager.php',
110 - '/framework/classes/class-wpstream-login-register.php',
111 - '/framework/classes/class-wpstream_theme-social-login.php',
112 - );
113 136
114 - // Load core files
115 - foreach ( $core_files as $file ) {
116 - $file_path = WPSTREAM_FRAMEWORK_BASE . $file;
117 - if ( file_exists( $file_path ) ) {
118 - require_once $file_path;
119 - } else {
120 - error_log( 'Missing required file: ' . $file_path );
121 - }
122 - }
123 137
124 - // Load Elementor integration if the plugin is active
125 - if ( defined( 'ELEMENTOR_VERSION' ) ) {
138 +function wpstream_custom_my_account_menu_items( $items ) {
139 + if(function_exists('wpstream_is_global_subscription') && wpstream_is_global_subscription()){
140 + $items = array(
141 + 'dashboard' => __( 'Dashboard', 'woocommerce' ),
142 + 'orders' => __( 'Orders', 'woocommerce' ),
143 + 'edit-address' => __( 'Addresses', 'woocommerce' ),
144 + 'edit-account' => __( 'Edit Account', 'woocommerce' ),
145 + 'customer-logout' => __( 'Logout', 'woocommerce' ),
146 + );
147 + }else{
148 + $items = array(
149 + 'dashboard' => __( 'Dashboard', 'woocommerce' ),
150 + 'orders' => __( 'Orders', 'woocommerce' ),
151 + 'edit-address' => __( 'Addresses', 'woocommerce' ),
152 + 'edit-account' => __( 'Edit Account', 'woocommerce' ),
153 + 'event-list' => __( 'Events', 'wpstream' ),
154 + 'video-list' => __( 'Videos', 'wpstream' ),
155 + 'customer-logout' => __( 'Logout', 'woocommerce' ),
156 + );
157 + }
158 + return $items;
159 +}
126 160
127 - $elementor_files = array(
128 - '/elementor/functions/blog_functions.php',
129 - '/elementor/wpstream-elementor.php'
130 - );
131 161
132 - foreach ( $elementor_files as $file ) {
133 - $file_path = WPSTREAM_FRAMEWORK_BASE . $file;
134 - if ( file_exists( $file_path ) ) {
135 - require_once $file_path;
136 - } else {
137 - error_log( 'Missing required file: ' . $file_path );
138 - }
139 - }
140 - }
162 +function wpstream_custom_endpoint_content_event_list() {
163 + include 'woocommerce/myaccount/event_list.php';
141 164 }
142 165
143 -add_action( 'after_setup_theme', 'wpstream_load_theme_functionality' );
144 166
145 -/**
146 - * Load js for players
147 - *
148 - * @return void
149 - */
150 -if ( ! function_exists( 'wpstream_load_player_js_on_demand' ) ) {
151 - function wpstream_load_player_js_on_demand()
152 - {
153 - $wpstream_unit_card_use_video = get_theme_mod('wpstream_unit_card_use_video');
154 - if ($wpstream_unit_card_use_video) {
155 - wp_enqueue_script('video.min');
156 - wp_enqueue_script('wpstream-player');
157 - }
158 167
159 - }
168 +function wpstream_custom_endpoint_video_list() {
169 + include 'woocommerce/myaccount/video_list.php';
160 170 }
161 171
162 -/**
163 - * Begins execution of the plugin.
164 - *
165 - * Since everything within the plugin is registered via hooks,
166 - * then kicking off the plugin from this point in the file does
167 - * not affect the page life cycle.
168 - *
169 - * @since 3.0.1
170 - */
171 172
172 -global $wpstream_plugin;
173 -$wpstream_plugin = new Wpstream();
174 -$wpstream_plugin->run();
175 173
176 -add_action( 'upgrader_process_complete', 'wpstream_my_upgrate_function',10, 2);
177 174
178 -function wpstream_my_upgrate_function( $upgrader_object, $options ) {
175 +function wpstream_user_logged_in_product_already_bought($from_sh_id='') {
179 176
180 -
181 - $current_plugin_path_name = plugin_basename( __FILE__ );
182 -
183 - if ($options['action'] == 'update' && $options['type'] == 'plugin' ) {
184 - if(is_array($options)):
185 - foreach($options['plugins'] as $each_plugin) {
186 - if ($each_plugin==$current_plugin_path_name) {
187 - delete_transient('wpstream_token_api');
188 - update_option('wp_estate_token_expire',0);
189 - update_option('wp_estate_curent_token',' ');
177 + if ( is_user_logged_in() ) {
178 + global $product;
179 + $current_user = wp_get_current_user();
180 + $product_id = $product->get_id();
190 181
191 - }
182 +
183 + if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product_id) || ( function_exists('wcs_user_has_subscription') && wcs_user_has_subscription( $current_user->ID, $product_id ,'active') ) ){
184 +
185 +
186 + echo '<div class="wpstream_player_wrapper"><div class="wpstream_player_container">';
187 +
188 + $is_subscription_live_event = esc_html(get_post_meta($product_id,'_subscript_live_event',true));
189 + $term_list = wp_get_post_terms($product_id, 'product_type');
190 +
191 + if( $term_list[0]->name=='live_stream' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='yes' ) ){
192 + wpstream_live_event_player($product_id);
193 + }else if( $term_list[0]->name=='video_on_demand' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='no' ) ){
194 + wpstream_video_on_demand_player($product_id);
192 195 }
193 - endif;
196 +
197 + }else{
198 + echo '<div class="wpstream_player_wrapper no_buy"><div class="wpstream_player_container">';
199 + echo '<div class="wpstream_notice">'.__('You did not buy this product!','wpstream').'</div>';
200 + }
201 +
202 + echo '</div></div>';
194 203 }
204 +}
205 +
206 +
207 +function wpstream_live_event_player($product_id){
208 + $live_event_uri = get_post_meta($product_id,'live_event_uri',true);
209 + $thumb_id = get_post_thumbnail_id($product_id);
210 + $thumb = wp_get_attachment_image_src($thumb_id,'small');
211 +
195 212
213 + $live_event_uri_final= wpstream_request_hls_player($product_id);
196 214
197 -}
215 +
216 +
217 +
218 +
219 + $now=time().rand(0,10);
220 + echo'<video id="wpstream-video'.$now.'" class="video-js vjs-default-skin vjs-16-9" controls>
221 + <source
222 + src="'.$live_event_uri_final.'"
223 + type="application/x-mpegURL">
224 + </video>
198 225
226 + <script>
227 + var player = videojs(\'wpstream-video'.$now.'\',{
228 + html5: {
229 + hls: {
230 + bandwidth: 500000,
231 + useBandwidthFromLocalStorage: true,
232 + smoothQualityChange: true
233 + }
234 + },
235 + errorDisplay: false,
236 + autoplay:true,
237 + preload:"auto",
238 +
239 + });
240 + wpstream_player_load();
241 +
242 + function wpstream_player_load(){
243 + player.src({
244 + src: "'.$live_event_uri_final.'",
245 + type: "application/x-mpegURL"
246 + });
247 + player.play();
248 + }
249 +
250 + timeQueue = [];
251 + setInterval(function(){
252 + timeQueue.push(player.currentTime());
253 + if (timeQueue.length > 30){
254 + timeQueue.shift();
255 + if (timeQueue[0] == timeQueue[timeQueue.length -1]){
256 +
257 + if (!player.paused() || player.currentTime() == 0){
258 + timeQueue = [];
259 + try{
260 + player.currentTime(0);
261 + }catch(err){
262 +
263 + }
264 + wpstream_player_load();
265 + }
266 +
267 + }
268 + }
269 + }, 1000);
270 +
199 271
200 272
201 -add_action('wp_head', 'wpstream_add_custom_meta_to_header');
273 + </script>';
202 274
203 -function wpstream_add_custom_meta_to_header(){
204 - global $post;
275 +}
205 276
206 277
207 - if ( is_singular('product') || is_singular('wpstream_product') || is_singular('wpstream_product_vod') ){
208 - $image_id = get_post_thumbnail_id();
209 - $share_img = wp_get_attachment_image_src( $image_id, 'full');
210 - $the_post = get_post($post->ID); ?>
211 278
212 - <meta property='og:title' content="<?php print esc_html(get_the_title($post->ID)); ?>"/>
213 - <?php if(isset($share_img[0])){ ?>
214 - <meta property="og:image" content="<?php print esc_url($share_img[0]); ?>"/>
215 - <meta property="og:image:secure_url" content="<?php print esc_url($share_img[0]); ?>" />
216 - <?php }?>
279 +function wpstream_video_on_demand_player($product_id){
280 + $thumb_id = get_post_thumbnail_id($product_id);
281 + $thumb = wp_get_attachment_image_src($thumb_id,'small');
282 + $wpstream_data_setup= ' data-setup="{}" ';
283 +
284 + $free_video_type = intval( get_post_meta($product_id, 'wpstream_product_type', true));
285 +
286 + if($free_video_type==2 || get_post_type($product_id)=='product' ){
287 + $video_type = 'application/x-mpegURL';
288 + $video_path = get_post_meta($product_id,'_movie_url',true);
289 + if(get_post_type($product_id)=='wpstream_product'){
290 + $video_path = esc_html(get_post_meta($product_id, 'wpstream_free_video', true));
291 + }
292 +
293 + $username = esc_html ( get_option('wpstream_api_username','') );
294 + if (filter_var($username, FILTER_VALIDATE_EMAIL)) {
295 + $username = wpstream_retrive_username();
296 + }
297 +
298 + if(strpos($username,'@')!=false){
299 + $username_array= explode('@', $username);
300 + $username=$username_array[0];
301 + }
302 +
303 + $video_path_final = 'https://vod.streamer.wpstream.net/'.$username.'/'.$video_path.'/index.m3u8?'.get_site_url();
304 + if(!is_ssl()){
305 + $video_path_final = 'http://vod.streamer.wpstream.net/'.$username.'/'.$video_path.'/index.m3u8?'.get_site_url();
306 + }
307 + }else if($free_video_type==3){
308 + $video_type = 'video/mp4';
309 + $video_path_final=esc_html(get_post_meta($product_id, 'wpstream_free_video_external', true));
310 +
311 + if (strpos($video_path_final, 'www.youtube') !== false) {
312 + $wpstream_data_setup= ' data-setup=\'{ "techOrder": ["youtube"], "sources": [{ "type": "video/youtube", "src": "'.$video_path_final.'"}] }\' ';
313 + $video_path_final='';
314 + }
315 + if (strpos($video_path_final, 'vimeo.com') !== false) {
316 + $wpstream_data_setup= ' data-setup=\'{ "techOrder": ["vimeo"], "sources": [{ "type": "video/vimeo", "src": "'.$video_path_final.'"}], "vimeo": { "color": "#fbc51b"} }\' ';
317 + $video_path_final='';
318 + }
217 319
218 - <meta property="og:description" content=" <?php print wp_strip_all_tags( $the_post->post_content);?>" />
219 - <?php }
320 + }
321 +
322 + echo '<video id="wpstream-video'.time().'" class="video-js vjs-default-skin vjs-16-9 kuk" controls preload="auto"
323 + poster="'.$thumb[0].'"
324 + '.$wpstream_data_setup.'
325 + >
220 326
327 + <source src="'.trim($video_path_final).'" type="'.$video_type.'">
328 + <p class="vjs-no-js">
329 + To view this video please enable JavaScript, and consider upgrading to a web browser that
330 + <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
331 + </p>
332 + </video>';
221 333
222 334 }
223 335
224 336
225 -/*
226 -*
227 -* Check integrations
228 -*
229 -*/
230 -if ( get_template() === 'hello-wpstream' ) {
231 - require_once plugin_dir_path( __FILE__ ) . 'integrations/hello-wpstream/theme-import.php';
232 - add_filter( 'pt-ocdi/import_files', 'wpstream_ocdi_import_files' );
233 - add_action( 'pt-ocdi/after_import', 'wpstream_ocdi_after_import_setup' );
234 - add_filter( 'pt-ocdi/plugin_intro_text', 'wpstream_ocdi_plugin_intro_text' );
235 - add_action( 'ocdi/before_content_import', 'wpstream_track_ocdi_import_attempt', 10, 1 );
337 +
338 +add_filter('display_post_states', 'wpstream_custom_post_states',10,2);
339 +
340 +function wpstream_custom_post_states( $states, $post ) {
341 + $title =strtolower( get_the_title($post->ID));
342 + if ( ( 'page' == get_post_type( $post->ID ) ) && ( $title ==='userkey' || $title ==='vodkey' || $title ==='wpstream' )) {
343 + $states[] = __('by WpStream - do not delete','wpstream');
344 + }
345 +
346 + return $states;
347 +}
348 +
349 +
350 +
351 +
352 +
353 +
354 +function wpstream_custom_rewrite_tag() {
355 + add_rewrite_tag('%streamname%', '([^&]+)');
356 + add_rewrite_tag('%streamname2%', '([^&]+)');
357 + add_rewrite_tag('%variety%', '([^&]+)');
358 + add_rewrite_tag('%userkey%', '([^&]+)');
359 + add_rewrite_tag('%streamvod%', '([^&]+)');
236 360 }
361 +add_action('init', 'wpstream_custom_rewrite_tag', 10, 0);
237 362
363 +//add_action('generate_rewrite_rules', 'wpstream_custom_rewrite_rule');
238 364
239 -add_action( 'plugins_loaded', 'wpstream_check_integrations' );
365 +function wpstream_custom_rewrite_rule() {
366 + $page = get_page_by_title( 'WpStream' );
367 + $page_user_key = get_page_by_title( 'Userkey' );
368 + $page_vod_key = get_page_by_title( 'Vodkey' );
240 369
241 370
242 -/*
243 -*
244 -* Redirect on plugin activation
245 -*
246 -*/
371 + if( isset($page->ID) ){
372 + add_rewrite_rule('^keys/([^/]*/?)', 'index.php?page_id='.$page->ID.'&streamname=$matches[1]','top');
373 + }
247 374
248 -function wpstream_activation_redirect( $plugin ) {
249 - if( $plugin == plugin_basename( __FILE__ ) ) {
250 - exit( wp_redirect( admin_url( 'admin.php?page=wpstream_onboard' ) ) );
375 + if( isset($page_vod_key->ID) ){ // is wod-key=page-template
376 + add_rewrite_rule('^keys1/([^/]*)/([^/]*)/?','index.php?page_id='.$page_vod_key->ID.'&streamname=$matches[1]&streamname2=$matches[2]','top');
251 377 }
378 +
379 + if( isset($page_user_key->ID) ){//us user-key-page-temaplte
380 + add_rewrite_rule('^keys2/([^/]*)/([^/]*)/?','index.php?page_id='.$page_user_key->ID.'&streamname=$matches[1]&streamname2=$matches[2]','top');
381 + }
382 +
383 + flush_rewrite_rules();
384 +
252 385 }
253 -add_action( 'activated_plugin', 'wpstream_activation_redirect' );
386 +add_action('init', 'wpstream_custom_rewrite_rule', 10, 0);
387 +
254 388
255 389
256 390
257 -/*
258 -*
259 -* remove the style selectWoo for the theme
260 -*
261 -*/
262 -if ( function_exists( 'wpstream_get_author_id' ) ) {
263 - // only if wpstream-theme is activated
391 +
392 +
393 +
394 +
395 +
396 +
397 +
398 +
399 +
400 +
401 +
402 +
403 +
404 +function wpstream_live_page_template( $page_template ){
405 + if ( is_page( 'wpstream' ) ) {
406 + $page_template = dirname( __FILE__ ) . '/live_stream_checker.php';
407 + }
408 +
264 409
265 - remove_filter( 'pre_user_description', 'wp_filter_kses' ); // Removes the filter that applies KSES filtering for user descriptions
266 - remove_filter( 'term_description', 'wp_kses_data' ); // Removes the filter that applies KSES data filtering for term descriptions
410 + return $page_template;
411 +}
412 +add_filter( 'page_template', 'wpstream_live_page_template' );
267 413
268 - if ( ! function_exists( 'wsis_dequeue_stylesandscripts_select2' ) ) {
269 - add_action( 'wp_enqueue_scripts', 'wsis_dequeue_stylesandscripts_select2', 100 );
270 - /**
271 - * Remove CSS and/or JS for Select2 used by WooCommerce
272 - */
273 - function wsis_dequeue_stylesandscripts_select2() {
274 - if ( class_exists( 'woocommerce' ) ) {
275 - wp_dequeue_style( 'selectWoo' );
276 - wp_deregister_style( 'selectWoo' );
277 414
278 - wp_dequeue_script( 'selectWoo' );
279 - wp_deregister_script( 'selectWoo' );
280 - }
281 - }
415 +
416 +
417 +function wpstream_userkey_page_template( $page_template ){
418 + if ( is_page( 'Userkey' ) ) {
419 + $page_template = dirname( __FILE__ ) . '/user-key-page-template.php';
282 420 }
421 + return $page_template;
283 422 }
423 +add_filter( 'page_template', 'wpstream_userkey_page_template' );
284 424
285 -/**
286 - * Register broadcaster page endpoint
287 - */
288 -function wpstream_register_broadcaster_endpoint() {
289 - add_rewrite_tag('%broadcaster_page%', '([0-1]{1})');
290 - add_rewrite_tag('%channel_id%', '([0-9]+)');
291 425
292 - $rewrite_rules = get_option('rewrite_rules');
293 - $rule_pattern = 'broadcaster-page/([0-9]+)/?$';
294 - $rule_target = 'index.php?broadcaster_page=1&channel_id=$matches[1]';
295 426
296 - add_rewrite_rule($rule_pattern, $rule_target, 'top');
297 - if ( !is_array($rewrite_rules) || !key_exists( $rule_pattern, $rewrite_rules ) ) {
298 - flush_rewrite_rules();
427 +
428 +
429 +function wpstream_vodkey_page_template( $page_template ){
430 + if ( is_page( 'vodkey' ) ) {
431 + $page_template = dirname( __FILE__ ) . '/vod-key-page-template.php';
299 432 }
433 + return $page_template;
300 434 }
301 -add_action('init', 'wpstream_register_broadcaster_endpoint');
435 +add_filter( 'page_template', 'wpstream_vodkey_page_template' );
302 436
303 -/**
304 - * Load broadcaster template when the custom endpoint is accessed
305 - */
306 -function wpstream_load_broadcaster_template($template) {
307 - if (get_query_var('broadcaster_page') == 1) {
308 - // Return the path to our broadcaster template
309 - return plugin_dir_path(__FILE__) . 'templates/broadcaster-template.php';
310 - }
311 - return $template;
437 +
438 +
439 +function wpstream_remove_gallery_and_product_images() {
440 + if ( is_product() ) {
441 + remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
442 + }
312 443 }
313 -add_filter('template_include', 'wpstream_load_broadcaster_template');
314 444
315 -/**
316 - * Flush rewrite rules on plugin activation to ensure our endpoint works
317 - */
318 -function wpstream_flush_rewrite_rules() {
319 - wpstream_register_broadcaster_endpoint();
320 - flush_rewrite_rules();
445 +
446 +
447 +
448 +function wpstream_cors_check_and_response(){
449 + if ($_SERVER['REQUEST_METHOD'] == "OPTIONS") {
450 + header('Access-Control-Allow-Methods: POST, GET');
451 + header('Access-Control-Allow-Headers: Authorization');
452 + header('Access-Control-Max-Age: 1'); //1728000
453 + header("Content-Length: 0");
454 + header("Content-Type: text/plain charset=UTF-8");
455 + exit(0);
456 + }
321 457 }
322 -register_activation_hook(__FILE__, 'wpstream_flush_rewrite_rules');
458 +
459 +add_action('wo_before_api', 'wpstream_cors_check_and_response');
460 +
461 +
462 +add_action('add_meta_boxes', 'wpstream_startstreaming_sidebar_meta');
463 +if( !function_exists('wpstream_startstreaming_sidebar_meta') ):
464 +
465 +function wpstream_startstreaming_sidebar_meta() {
466 + global $post;
467 +
468 + $term_list = wp_get_post_terms($post->ID, 'product_type');
469 +
470 +
471 + if( get_post_meta($post->ID, 'wpstream_product_type', true)==1 ){
472 + add_meta_box('wpstream-sidebar-meta', esc_html__('Live Streaming', 'wpstream'), 'wpstream_start_stream_meta', 'wpstream_product', 'side', 'high');
473 + }
474 +
475 + if(!is_wp_error( $term_list )){
476 + if( isset($term_list[0]->name) ){
477 + if( $term_list[0]->name=='live_stream' || ($term_list[0]->name=='subscription' && $is_subscription_live_event=='yes' ) ){
478 + add_meta_box('wpstream-sidebar-meta', esc_html__('Live Streaming', 'wpstream'), 'wpstream_start_stream_meta', 'product', 'side', 'high');
479 + }
480 + }
481 + }
482 +
483 +}
484 +endif;
485 +
486 +
487 +function wpstream_start_stream_meta(){
488 + global $live_event_for_user;
489 + global $post;
490 +
491 +
492 +
493 +
494 + $ajax_nonce = wp_create_nonce( "wpstream_start_event_nonce" );
495 + print '<input type="hidden" id="wpstream_start_event_nonce" value="'.$ajax_nonce.'">';
496 + $live_event_for_user = wpstream_get_live_event_for_user();
497 + wpstream_live_stream_unit($post->ID);
498 +
499 +}