Files

214 lines
7.3 KiB
PHP

<?php
/**
* Video Player Widget.
*
* @link https://plugins360.com
* @since 1.0.0
*
* @package All_In_One_Video_Gallery
*/
// Exit if accessed directly
if ( ! defined( 'WPINC' ) ) {
die;
}
/**
* AIOVG_Widget_Video class.
*
* @since 1.0.0
*/
class AIOVG_Widget_Video extends WP_Widget {
/**
* Unique identifier for the widget.
*
* @since 1.0.0
* @access protected
* @var string
*/
protected $widget_slug;
/**
* Get things started.
*
* @since 1.0.0
*/
public function __construct() {
$this->widget_slug = 'aiovg-widget-video';
$options = array(
'classname' => $this->widget_slug,
'description' => __( 'Display a video player.', 'all-in-one-video-gallery' ),
);
parent::__construct( $this->widget_slug, __( 'AIOVG - Video Player', 'all-in-one-video-gallery' ), $options );
add_action( 'wp_ajax_aiovg_autocomplete_get_videos', array( $this, 'ajax_callback_autocomplete_get_videos' ) );
}
/**
* Outputs the content of the widget.
*
* @since 1.0.0
* @param array $args The array of form elements.
* @param array $instance The current instance of the widget.
*/
public function widget( $args, $instance ) {
// Vars
$post_id = 0;
if ( ! empty( $instance['id'] ) ) {
$post_id = (int) $instance['id'];
} else {
$query_args = array(
'post_type' => 'aiovg_videos',
'post_status' => 'publish',
'posts_per_page' => 1,
'fields' => 'ids',
'no_found_rows' => true,
'update_post_term_cache' => false,
'update_post_meta_cache' => false
);
$aiovg_query = new WP_Query( $query_args );
if ( $aiovg_query->have_posts() ) {
$posts = $aiovg_query->posts;
$post_id = (int) $posts[0];
}
}
// Process output
echo $args['before_widget'];
if ( ! empty( $instance['title'] ) ) {
echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
}
the_aiovg_player( $post_id, $instance );
echo $args['after_widget'];
}
/**
* Processes the widget's options to be saved.
*
* @since 1.0.0
* @param array $new_instance The new instance of values to be generated via the update.
* @param array $old_instance The previous instance of values before the update.
*/
public function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = isset( $new_instance['title'] ) ? strip_tags( $new_instance['title'] ) : '';
$instance['id'] = isset( $new_instance['id'] ) ? (int) $new_instance['id'] : '';
$instance['width'] = isset( $new_instance['width'] ) ? sanitize_text_field( $new_instance['width'] ) : '';
$instance['ratio'] = isset( $new_instance['ratio'] ) ? (float) $new_instance['ratio'] : 0;
$instance['autoplay'] = isset( $new_instance['autoplay'] ) ? (int) $new_instance['autoplay'] : 0;
$instance['loop'] = isset( $new_instance['loop'] ) ? (int) $new_instance['loop'] : 0;
$instance['muted'] = isset( $new_instance['muted'] ) ? (int) $new_instance['muted'] : 0;
$instance['playpause'] = isset( $new_instance['playpause'] ) ? (int) $new_instance['playpause'] : 0;
$instance['current'] = isset( $new_instance['current'] ) ? (int) $new_instance['current'] : 0;
$instance['progress'] = isset( $new_instance['progress'] ) ? (int) $new_instance['progress'] : 0;
$instance['duration'] = isset( $new_instance['duration'] ) ? (int) $new_instance['duration'] : 0;
$instance['tracks'] = isset( $new_instance['tracks'] ) ? (int) $new_instance['tracks'] : 0;
$instance['chapters'] = isset( $new_instance['chapters'] ) ? (int) $new_instance['chapters'] : 0;
$instance['speed'] = isset( $new_instance['speed'] ) ? (int) $new_instance['speed'] : 0;
$instance['quality'] = isset( $new_instance['quality'] ) ? (int) $new_instance['quality'] : 0;
$instance['volume'] = isset( $new_instance['volume'] ) ? (int) $new_instance['volume'] : 0;
$instance['fullscreen'] = isset( $new_instance['fullscreen'] ) ? (int) $new_instance['fullscreen'] : 0;
$instance['share'] = isset( $new_instance['share'] ) ? (int) $new_instance['share'] : 0;
$instance['embed'] = isset( $new_instance['embed'] ) ? (int) $new_instance['embed'] : 0;
$instance['download'] = isset( $new_instance['download'] ) ? (int) $new_instance['download'] : 0;
return $instance;
}
/**
* Generates the administration form for the widget.
*
* @since 1.0.0
* @param array $instance The array of keys and values for the widget.
*/
public function form( $instance ) {
$player_settings = get_option( 'aiovg_player_settings' );
// Define the array of defaults
$defaults = array(
'title' => '',
'id' => 0,
'width' => $player_settings['width'],
'ratio' => $player_settings['ratio'],
'autoplay' => $player_settings['autoplay'],
'loop' => $player_settings['loop'],
'muted' => $player_settings['muted'],
'playpause' => isset( $player_settings['controls']['playpause'] ) ? 1 : 0,
'current' => isset( $player_settings['controls']['current'] ) ? 1 : 0,
'progress' => isset( $player_settings['controls']['progress'] ) ? 1 : 0,
'duration' => isset( $player_settings['controls']['duration'] ) ? 1 : 0,
'tracks' => isset( $player_settings['controls']['tracks'] ) ? 1 : 0,
'chapters' => isset( $player_settings['controls']['chapters'] ) ? 1 : 0,
'speed' => isset( $player_settings['controls']['speed'] ) ? 1 : 0,
'quality' => isset( $player_settings['controls']['quality'] ) ? 1 : 0,
'volume' => isset( $player_settings['controls']['volume'] ) ? 1 : 0,
'fullscreen' => isset( $player_settings['controls']['fullscreen'] ) ? 1 : 0,
'share' => isset( $player_settings['controls']['share'] ) ? 1 : 0,
'embed' => isset( $player_settings['controls']['embed'] ) ? 1 : 0,
'download' => isset( $player_settings['controls']['download'] ) ? 1 : 0
);
// Parse incoming $instance into an array and merge it with $defaults
$instance = wp_parse_args(
(array) $instance,
$defaults
);
// Display the admin form
include AIOVG_PLUGIN_DIR . 'widgets/forms/video.php';
}
/**
* Autocomplete UI: Get videos.
*
* @since 2.5.5
*/
public function ajax_callback_autocomplete_get_videos() {
// Security check
check_ajax_referer( 'aiovg_ajax_nonce', 'security' );
// Proceed safe
$args = array(
'post_type' => 'aiovg_videos',
'post_status' => 'publish',
'numberposts' => 100,
'cache_results' => false,
'update_post_meta_cache' => false,
'update_post_term_cache' => false
);
if ( isset( $_POST['term'] ) && ! empty( $_POST['term'] ) ) {
$args['s'] = sanitize_text_field( $_POST['term'] );
} else {
$args['orderby'] = 'title';
$args['order'] = 'ASC';
$args['numberposts'] = 10;
}
$posts = get_posts( $args );
if ( empty( $posts ) ) {
$posts = array(
array(
'ID' => 0,
'post_title' => __( 'No videos found. Click this to display the last added video.', 'all-in-one-video-gallery' )
)
);
}
echo wp_json_encode( $posts );
wp_die();
}
}