212 lines
8.3 KiB
PHP
212 lines
8.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Video Player.
|
|
*
|
|
* @link https://plugins360.com
|
|
* @since 1.0.0
|
|
*
|
|
* @package All_In_One_Video_Gallery
|
|
*/
|
|
|
|
$player_settings = aiovg_get_option( 'aiovg_player_settings' );
|
|
$brand_settings = aiovg_get_option( 'aiovg_brand_settings' );
|
|
$trailer_settings = aiovg_get_option( 'aiovg_trailer_settings' );
|
|
$privacy_settings = aiovg_get_option( 'aiovg_privacy_settings' );
|
|
$email_capture_settings = aiovg_get_option( 'aiovg_email_capture_settings' );
|
|
$general_settings = aiovg_get_option( 'aiovg_general_settings' );
|
|
|
|
$post_id = (int) get_query_var( 'aiovg_video', 0 );
|
|
$post_type = 'page';
|
|
$post_title = '';
|
|
$post_url = '';
|
|
$post_meta = array();
|
|
$embed_url = '';
|
|
$is_trailer = false;
|
|
|
|
$player_template = ( 'vidstack' == $player_settings['player'] ) ? 'vidstack' : 'videojs';
|
|
$primary_color = ! empty( $general_settings['primary_color'] ) ? $general_settings['primary_color'] : '#3b82f6';
|
|
|
|
$thirdparty_providers_with_api = array( 'youtube', 'vimeo' );
|
|
$thirdparty_providers_without_api = array( 'dailymotion', 'rumble', 'facebook' );
|
|
$thirdparty_providers_all = array_merge( $thirdparty_providers_with_api, $thirdparty_providers_without_api );
|
|
$current_video_provider = 'html5';
|
|
|
|
if ( $post_id > 0 ) {
|
|
$post_type = get_post_type( $post_id );
|
|
$post_title = get_the_title( $post_id );
|
|
$post_url = get_permalink( $post_id );
|
|
|
|
if ( 'aiovg_videos' == $post_type ) {
|
|
$post_meta = get_post_meta( $post_id );
|
|
|
|
// Determine the video provider based on the post meta.
|
|
$current_video_provider = $post_meta['type'][0];
|
|
|
|
// Check if the user has access to this video.
|
|
$has_access = aiovg_current_user_can( 'play_aiovg_video', $post_id );
|
|
|
|
// If the user doesn't have access, check if there's a trailer configured and use that
|
|
// for the player instead.
|
|
if ( ! $has_access && ! empty( $trailer_settings['enable_trailers'] ) ) {
|
|
$trailer_type = isset( $post_meta['trailer_type'] ) ? $post_meta['trailer_type'][0] : '';
|
|
$trailer_src = isset( $post_meta['trailer_src'] ) ? $post_meta['trailer_src'][0] : '';
|
|
|
|
if ( ! empty( $trailer_src ) ) {
|
|
$is_trailer = true;
|
|
|
|
if ( 'embedcode' == $trailer_type ) {
|
|
$post_meta['embedcode'] = array( $trailer_src );
|
|
$current_video_provider = 'embedcode';
|
|
} else {
|
|
// URL auto-detect: mirror the run_shortcode_video() detection chain.
|
|
if ( false !== strpos( $trailer_src, 'youtube.com' ) || false !== strpos( $trailer_src, 'youtu.be' ) ) {
|
|
$post_meta['youtube'] = array( aiovg_resolve_youtube_url( $trailer_src ) );
|
|
$current_video_provider = 'youtube';
|
|
} elseif ( false !== strpos( $trailer_src, 'vimeo.com' ) ) {
|
|
$post_meta['vimeo'] = array( $trailer_src );
|
|
$current_video_provider = 'vimeo';
|
|
} elseif ( false !== strpos( $trailer_src, 'dailymotion.com' ) ) {
|
|
$post_meta['dailymotion'] = array( $trailer_src );
|
|
$current_video_provider = 'dailymotion';
|
|
} elseif ( false !== strpos( $trailer_src, 'rumble.com' ) ) {
|
|
$post_meta['rumble'] = array( $trailer_src );
|
|
$current_video_provider = 'rumble';
|
|
} elseif ( false !== strpos( $trailer_src, 'facebook.com' ) ) {
|
|
$post_meta['facebook'] = array( $trailer_src );
|
|
$current_video_provider = 'facebook';
|
|
} else {
|
|
$current_video_provider = 'default';
|
|
|
|
$filetype = wp_check_filetype( $trailer_src );
|
|
|
|
if ( 'webm' == $filetype['ext'] ) {
|
|
$post_meta['webm'] = array( $trailer_src );
|
|
} elseif ( 'ogv' == $filetype['ext'] ) {
|
|
$post_meta['ogv'] = array( $trailer_src );
|
|
} elseif ( 'm3u8' == $filetype['ext'] ) {
|
|
$post_meta['hls'] = array( $trailer_src );
|
|
$current_video_provider = 'adaptive';
|
|
} elseif ( 'mpd' == $filetype['ext'] ) {
|
|
$post_meta['dash'] = array( $trailer_src );
|
|
$current_video_provider = 'adaptive';
|
|
} else {
|
|
$post_meta['mp4'] = array( $trailer_src );
|
|
}
|
|
|
|
// Additionally check for Bunny Stream: inject GUID and force URL into mp4 so
|
|
// the native-controls detection block below activates correctly.
|
|
$trailer_video_id = isset( $post_meta['trailer_bunny_stream_video_id'] ) ? $post_meta['trailer_bunny_stream_video_id'][0] : '';
|
|
|
|
if ( ! empty( $trailer_video_id ) ) {
|
|
// GUID stored when the trailer was uploaded via Bunny Stream.
|
|
$post_meta['bunny_stream_video_id'] = array( $trailer_video_id );
|
|
$post_meta['mp4'] = array( $trailer_src );
|
|
|
|
$current_video_provider = 'default';
|
|
}
|
|
}
|
|
}
|
|
|
|
$post_meta['type'] = array( $current_video_provider );
|
|
$post_meta['sources'] = array();
|
|
}
|
|
}
|
|
|
|
// If the user doesn't have access and there's no trailer, load the restricted template and exit.
|
|
if ( ! $has_access && ! $is_trailer ) {
|
|
include apply_filters( 'aiovg_load_template', AIOVG_PLUGIN_DIR . 'public/templates/player-restricted.php' );
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Determine the player template to use based on the video provider and settings.
|
|
if ( ! empty( $post_meta ) ) {
|
|
if ( in_array( $current_video_provider, $thirdparty_providers_with_api ) ) {
|
|
$use_native_controls = isset( $player_settings['use_native_controls'][ $current_video_provider ] );
|
|
$use_native_controls = apply_filters( 'aiovg_use_native_controls', $use_native_controls, $current_video_provider );
|
|
|
|
if ( $use_native_controls ) {
|
|
$player_template = 'iframe';
|
|
}
|
|
}
|
|
|
|
if ( in_array( $current_video_provider, $thirdparty_providers_without_api ) ) {
|
|
$player_template = 'iframe';
|
|
}
|
|
|
|
if ( 'embedcode' == $current_video_provider ) {
|
|
$player_template = 'iframe';
|
|
}
|
|
|
|
if ( 'default' == $current_video_provider ) {
|
|
$mp4 = isset( $post_meta['mp4'] ) ? $post_meta['mp4'][0] : '';
|
|
if ( ! empty( $mp4 ) ) {
|
|
$use_native_controls = apply_filters( 'aiovg_use_native_controls', isset( $player_settings['use_native_controls']['bunny_stream'] ), 'bunny_stream' );
|
|
if ( $use_native_controls ) {
|
|
$video_id = isset( $post_meta['bunny_stream_video_id'] ) ? $post_meta['bunny_stream_video_id'][0] : '';
|
|
if ( ! empty( $video_id ) && strpos( $mp4, '/' . $video_id . '/' ) !== false ) {
|
|
$embed_url = aiovg_get_bunny_stream_embed_url( $mp4, $video_id );
|
|
if ( ! empty( $embed_url ) ) {
|
|
$current_video_provider = 'bunny_stream';
|
|
$player_template = 'iframe';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
foreach ( $thirdparty_providers_with_api as $provider ) {
|
|
$use_native_controls = isset( $player_settings['use_native_controls'][ $provider ] );
|
|
$use_native_controls = apply_filters( 'aiovg_use_native_controls', $use_native_controls, $provider );
|
|
|
|
if ( isset( $_GET[ $provider ] ) ) {
|
|
$current_video_provider = $provider;
|
|
if ( $use_native_controls ) {
|
|
$player_template = 'iframe';
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ( $thirdparty_providers_without_api as $provider ) {
|
|
if ( isset( $_GET[ $provider ] ) ) {
|
|
$current_video_provider = $provider;
|
|
$player_template = 'iframe';
|
|
}
|
|
}
|
|
}
|
|
|
|
// GDPR consent handling
|
|
if ( ! isset( $_GET['nocookie'] ) ) {
|
|
if ( ! isset( $_COOKIE['aiovg_gdpr_consent'] ) && ! isset( $_COOKIE['aiovg_email_captured'] ) && ! empty( $privacy_settings['show_consent'] ) && ! empty( $privacy_settings['consent_message'] ) && ! empty( $privacy_settings['consent_button_label'] ) ) {
|
|
if ( in_array( $current_video_provider, $thirdparty_providers_all ) || 'iframe' == $player_template ) {
|
|
$player_template = 'gdpr';
|
|
}
|
|
}
|
|
}
|
|
|
|
// Email capture handling
|
|
if ( ! isset( $_GET['nocapture'] ) ) {
|
|
if ( ! empty( $email_capture_settings['enable_email_capture'] ) && ! empty( $email_capture_settings['pre_roll'] ) && ! is_user_logged_in() && ! isset( $_COOKIE['aiovg_email_captured'] ) ) {
|
|
$show_email_capture = 1;
|
|
|
|
if ( 'aiovg_videos' == $post_type && isset( $post_meta['email_capture'] ) ) {
|
|
$show_email_capture = (int) $post_meta['email_capture'][0];
|
|
}
|
|
|
|
if ( isset( $_GET['email_capture'] ) ) {
|
|
$show_email_capture = (int) $_GET['email_capture'];
|
|
}
|
|
|
|
if ( $show_email_capture === -1 ) { // Global
|
|
$show_email_capture = 1;
|
|
}
|
|
|
|
if ( ! empty( $show_email_capture ) ) {
|
|
$player_template = 'email-capture';
|
|
}
|
|
}
|
|
}
|
|
|
|
include apply_filters( 'aiovg_load_template', AIOVG_PLUGIN_DIR . "public/templates/player-{$player_template}.php" ); |