Files
SIGE-WEB-snapshot/wp-content/plugins/all-in-one-video-gallery/blocks/blocks.php

548 lines
18 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Blocks Initializer.
*
* @link https://plugins360.com
* @since 1.5.6
*
* @package All_In_One_Video_Gallery
*/
// Exit if accessed directly
if ( ! defined( 'WPINC' ) ) {
die;
}
/**
* AIOVG_Blocks class.
*
* @since 1.5.6
*/
class AIOVG_Blocks {
/**
* Register our custom Gutenberg block category.
*
* @since 1.5.6
* @param array $categories Default Gutenberg block categories.
* @return array Modified Gutenberg block categories.
*/
public function block_categories( $categories ) {
return array_merge(
$categories,
array(
array(
'slug' => 'all-in-one-video-gallery',
'title' => __( 'All-in-One Video Gallery', 'all-in-one-video-gallery' ),
)
)
);
}
/**
* Enqueue Gutenberg block assets for backend editor.
*
* @since 1.5.6
*/
public function enqueue_block_editor_assets() {
$categories_settings = aiovg_get_option( 'aiovg_categories_settings' );
$videos_settings = aiovg_get_option( 'aiovg_videos_settings' );
$player_settings = aiovg_get_option( 'aiovg_player_settings' );
$email_capture_settings = aiovg_get_option( 'aiovg_email_capture_settings' );
$fields = aiovg_get_shortcode_fields();
$videos = $fields['videos']['sections'];
foreach ( $videos as $key => $section ) {
foreach ( $section['fields'] as $_key => $field ) {
if ( in_array( $field['name'], array( 'title', 'include', 'exclude', 'ratio', 'title_length', 'excerpt_length' ) ) ) {
unset( $videos[ $key ]['fields'][ $_key ] );
continue;
}
if ( isset( $field['description'] ) ) {
$videos[ $key ]['fields'][ $_key ]['description'] = strip_tags( $field['description'] );
}
}
}
$editor_properties = array(
'i18n' => array(
'block_categories_title' => __( 'AIOVG - Video Categories', 'all-in-one-video-gallery' ),
'block_categories_description' => __( 'Display a list of video categories.', 'all-in-one-video-gallery' ),
'select_parent' => __( 'Select Parent', 'all-in-one-video-gallery' ),
'select_template' => __( 'Select Template', 'all-in-one-video-gallery' ),
'grid' => __( 'Grid', 'all-in-one-video-gallery' ),
'list' => __( 'List', 'all-in-one-video-gallery' ),
'dropdown' => __( 'Dropdown', 'all-in-one-video-gallery' ),
'columns' => __( 'Columns', 'all-in-one-video-gallery' ),
'limit' => __( 'Limit (per page)', 'all-in-one-video-gallery' ),
'order_by' => __( 'Order By', 'all-in-one-video-gallery' ),
'id' => __( 'ID', 'all-in-one-video-gallery' ),
'count' => __( 'Count', 'all-in-one-video-gallery' ),
'name' => __( 'Name', 'all-in-one-video-gallery' ),
'slug' => __( 'Slug', 'all-in-one-video-gallery' ),
'menu_order' => __( 'Menu Order', 'all-in-one-video-gallery' ),
'order' => __( 'Order', 'all-in-one-video-gallery' ),
'asc' => __( 'ASC', 'all-in-one-video-gallery' ),
'desc' => __( 'DESC', 'all-in-one-video-gallery' ),
'show_hierarchy' => __( 'Show Hierarchy', 'all-in-one-video-gallery' ),
'show_description' => __( 'Show Description', 'all-in-one-video-gallery' ),
'show_videos_count' => __( 'Show Videos Count', 'all-in-one-video-gallery' ),
'hide_empty_categories' => __( 'Hide Empty Categories', 'all-in-one-video-gallery' ),
'show_pagination' => __( 'Show Pagination', 'all-in-one-video-gallery' ),
'block_videos_title' => __( 'AIOVG - Video Gallery', 'all-in-one-video-gallery' ),
'block_videos_description' => __( 'Display a video gallery.', 'all-in-one-video-gallery' ),
'select_color' => __( 'Selected Color', 'all-in-one-video-gallery' ),
'block_search_title' => __( 'AIOVG - Search Form', 'all-in-one-video-gallery' ),
'block_search_description' => __( 'A videos search form for your site.', 'all-in-one-video-gallery' ),
'vertical' => __( 'Vertical', 'all-in-one-video-gallery' ),
'horizontal' => __( 'Horizontal', 'all-in-one-video-gallery' ),
'search_by_categories' => __( 'Search By Categories', 'all-in-one-video-gallery' ),
'search_by_keywords' => __( 'Search By Video Title, Description', 'all-in-one-video-gallery' ),
'search_by_tags' => __( 'Search By Tags', 'all-in-one-video-gallery' ),
'sort_by_dropdown' => __( 'Sort By Dropdown', 'all-in-one-video-gallery' ),
'search_button' => __( 'Search Button', 'all-in-one-video-gallery' ),
'reset_button' => __( 'Reset Button', 'all-in-one-video-gallery' ),
'search_results_page' => __( 'Search Results Page', 'all-in-one-video-gallery' ),
'default_page' => __( "Use Plugin's Default Search Results Page", 'all-in-one-video-gallery' ),
'current_page' => __( 'Display Results on Current Page', 'all-in-one-video-gallery' ),
'block_video_title' => __( 'AIOVG - Video Player', 'all-in-one-video-gallery' ),
'block_video_description' => __( 'Display a video player.', 'all-in-one-video-gallery' ),
'media_placeholder_label' => __( 'Video', 'all-in-one-video-gallery' ),
'media_placeholder_description' => __( 'Supports: MP4, WebM, OGV, HLS, MPEG-DASH, YouTube, Vimeo, Dailymotion, Rumble, Facebook, etc.', 'all-in-one-video-gallery' ),
'edit_video' => __( 'Edit Video', 'all-in-one-video-gallery' ),
'general_settings' => __( 'General', 'all-in-one-video-gallery' ),
'width' => __( 'Width', 'all-in-one-video-gallery' ),
'width_help' => __( 'In pixels. Maximum width of the player. Leave this field empty to scale 100% of its enclosing container/html element.', 'all-in-one-video-gallery' ),
'ratio' => __( 'Height (Ratio)', 'all-in-one-video-gallery' ),
'ratio_help' => __( "In percentage. Calculates the players height based on the entered ratio.", 'all-in-one-video-gallery' ),
'autoplay' => __( 'Autoplay', 'all-in-one-video-gallery' ),
'loop' => __( 'Loop', 'all-in-one-video-gallery' ),
'muted' => __( 'Muted', 'all-in-one-video-gallery' ),
'poster_image' => __( 'Poster Image', 'all-in-one-video-gallery' ),
'select_image' => __( 'Select', 'all-in-one-video-gallery' ),
'remove_image' => __( 'Remove', 'all-in-one-video-gallery' ),
'replace_image' => __( 'Replace', 'all-in-one-video-gallery' ),
'player_controls' => __( 'Player Controls', 'all-in-one-video-gallery' ),
'play_pause' => __( 'Play / Pause', 'all-in-one-video-gallery' ),
'current_time' => __( 'Current Time', 'all-in-one-video-gallery' ),
'progressbar' => __( 'Progressbar', 'all-in-one-video-gallery' ),
'duration' => __( 'Duration', 'all-in-one-video-gallery' ),
'speed' => __( 'Speed Control', 'all-in-one-video-gallery' ),
'quality' => __( 'Quality Selector', 'all-in-one-video-gallery' ),
'volume' => __( 'Volume Button', 'all-in-one-video-gallery' ),
'pip' => __( 'Picture-in-Picture Button', 'all-in-one-video-gallery' ),
'fullscreen' => __( 'Fullscreen Button', 'all-in-one-video-gallery' ),
'share' => __( 'Share Buttons', 'all-in-one-video-gallery' ),
'embed' => __( 'Embed Button', 'all-in-one-video-gallery' ),
'download' => __( 'Download Button', 'all-in-one-video-gallery' ),
'email_capture' => __( 'Email & Lead Capture', 'all-in-one-video-gallery' )
),
'categories' => array(
'template' => $categories_settings['template'],
'id' => 0,
'columns' => $categories_settings['columns'],
'limit' => $categories_settings['limit'],
'orderby' => $categories_settings['orderby'],
'order' => $categories_settings['order'],
'hierarchical' => $categories_settings['hierarchical'],
'show_description' => $categories_settings['show_description'],
'show_count' => $categories_settings['show_count'],
'hide_empty' => $categories_settings['hide_empty'],
'show_pagination' => 1
),
'video' => array(
'src' => '',
'id' => 0,
'poster' => '',
'width' => 0,
'ratio' => $player_settings['ratio'],
'autoplay' => $player_settings['autoplay'] ? true : false,
'loop' => $player_settings['loop'] ? true : false,
'muted' => $player_settings['muted'] ? true : false,
'playpause' => isset( $player_settings['controls']['playpause'] ),
'current' => isset( $player_settings['controls']['current'] ),
'progress' => isset( $player_settings['controls']['progress'] ),
'duration' => isset( $player_settings['controls']['duration'] ),
'speed' => isset( $player_settings['controls']['speed'] ),
'quality' => isset( $player_settings['controls']['quality'] ),
'volume' => isset( $player_settings['controls']['volume'] ),
'pip' => isset( $player_settings['controls']['pip'] ),
'fullscreen' => isset( $player_settings['controls']['fullscreen'] ),
'share' => isset( $player_settings['controls']['share'] ),
'embed' => isset( $player_settings['controls']['embed'] ),
'download' => isset( $player_settings['controls']['download'] ),
'email_capture' => ! empty( $email_capture_settings['enable_email_capture'] ),
'email_capture_enabled'=> ! empty( $email_capture_settings['enable_email_capture'] )
),
'videos' => $videos
);
wp_localize_script( 'wp-block-editor', 'aiovg_blocks', $editor_properties );
do_action( 'aiovg_enqueue_block_editor_assets' );
}
/**
* Register our custom blocks.
*
* @since 1.5.6
*/
public function register_block_types() {
if ( ! function_exists( 'register_block_type' ) ) {
return false;
}
$this->register_categories_block();
$this->register_search_block();
$this->register_video_block();
$this->register_videos_block();
}
/**
* Register the categories block.
*
* @since 3.0.0
*/
private function register_categories_block() {
$attributes = array(
'template' => array(
'type' => 'string'
),
'id' => array(
'type' => 'number'
),
'columns' => array(
'type' => 'number'
),
'limit' => array(
'type' => 'number'
),
'orderby' => array(
'type' => 'string'
),
'order' => array(
'type' => 'string'
),
'hierarchical' => array(
'type' => 'boolean'
),
'show_description' => array(
'type' => 'boolean'
),
'show_count' => array(
'type' => 'boolean'
),
'hide_empty' => array(
'type' => 'boolean'
),
'show_pagination' => array(
'type' => 'boolean'
),
'style' => array(
'type' => 'object'
)
);
register_block_type( __DIR__ . '/build/categories', array(
'attributes' => $attributes,
'render_callback' => array( $this, 'render_categories_block' )
) );
}
/**
* Register the search block.
*
* @since 3.0.0
*/
private function register_search_block() {
register_block_type( __DIR__ . '/build/search', array(
'render_callback' => array( $this, 'render_search_block' ),
) );
}
/**
* Register the video block.
*
* @since 3.0.0
*/
private function register_video_block() {
$attributes = array(
'blob' => array(
'type' => 'string'
),
'src' => array(
'type' => 'string'
),
'id' => array(
'type' => 'number'
),
'poster' => array(
'type' => 'string'
),
'width' => array(
'type' => 'number'
),
'ratio' => array(
'type' => 'number'
),
'autoplay' => array(
'type' => 'boolean'
),
'loop' => array(
'type' => 'boolean'
),
'muted' => array(
'type' => 'boolean'
),
'playpause' => array(
'type' => 'boolean'
),
'current' => array(
'type' => 'boolean'
),
'progress' => array(
'type' => 'boolean'
),
'duration' => array(
'type' => 'boolean'
),
'speed' => array(
'type' => 'boolean'
),
'quality' => array(
'type' => 'boolean'
),
'volume' => array(
'type' => 'boolean'
),
'pip' => array(
'type' => 'boolean'
),
'fullscreen' => array(
'type' => 'boolean'
),
'share' => array(
'type' => 'boolean'
),
'embed' => array(
'type' => 'boolean'
),
'download' => array(
'type' => 'boolean'
),
'email_capture' => array(
'type' => 'boolean'
),
'style' => array(
'type' => 'object'
)
);
register_block_type( __DIR__ . '/build/video', array(
'attributes' => $attributes,
'render_callback' => array( $this, 'render_video_block' ),
) );
}
/**
* Register the videos block.
*
* @since 3.0.0
*/
private function register_videos_block() {
$fields = aiovg_get_shortcode_fields();
$attributes = array();
foreach ( $fields['videos']['sections'] as $key => $section ) {
foreach ( $section['fields'] as $field ) {
if ( in_array( $field['name'], array( 'title', 'exclude', 'ratio', 'title_length', 'excerpt_length' ) ) ) {
continue;
}
if ( 'categories' == $field['type'] || 'tags' == $field['type'] ) {
$attributes[ $field['name'] ] = array(
'type' => 'array',
'items' => array(
'type' => 'integer',
)
);
} else {
$type = 'string';
if ( 'number' == $field['type'] ) {
$type = 'number';
} elseif ( 'checkbox' == $field['type'] ) {
$type = 'boolean';
}
$attributes[ $field['name'] ] = array(
'type' => $type
);
}
}
}
$attributes['style'] = array(
'type' => 'object'
);
register_block_type( __DIR__ . '/build/videos', array(
'attributes' => $attributes,
'render_callback' => array( $this, 'render_videos_block' ),
) );
}
/**
* Render the categories block frontend.
*
* @since 1.5.6
* @param array $atts An associative array of attributes.
* @return string HTML output.
*/
public function render_categories_block( $atts ) {
$style = '';
if ( ! empty( $atts['style']['css'] ) ) {
$css = wp_strip_all_tags( $atts['style']['css'] );
if ( '' !== trim( $css ) ) {
$style = '<style>' . $css . '</style>';
}
}
unset( $atts['style'] );
$output = $style;
$output .= '<div ' . get_block_wrapper_attributes() . '>';
$output .= do_shortcode( '[aiovg_categories ' . $this->build_shortcode_attributes( $atts ) . ']' );
$output .= '</div>';
return $output;
}
/**
* Render the search block frontend.
*
* @since 1.5.6
* @param array $atts An associative array of attributes.
* @return string HTML output.
*/
public function render_search_block( $atts ) {
$style = '';
if ( ! empty( $atts['style']['css'] ) ) {
$css = wp_strip_all_tags( $atts['style']['css'] );
if ( '' !== trim( $css ) ) {
$style = '<style>' . $css . '</style>';
}
}
unset( $atts['style'] );
$output = $style;
$output .= '<div ' . get_block_wrapper_attributes() . '>';
$output .= do_shortcode( '[aiovg_search_form ' . $this->build_shortcode_attributes( $atts ) . ']' );
$output .= '</div>';
return $output;
}
/**
* Render the video player block frontend.
*
* @since 3.0.0
* @param array $atts An associative array of attributes.
* @return string HTML output.
*/
public function render_video_block( $atts ) {
if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
$atts['player'] = 'iframe';
}
$style = '';
if ( ! empty( $atts['style']['css'] ) ) {
$css = wp_strip_all_tags( $atts['style']['css'] );
if ( '' !== trim( $css ) ) {
$style = '<style>' . $css . '</style>';
}
}
unset( $atts['blob'] );
unset( $atts['id'] );
unset( $atts['style'] );
$output = $style;
$output .= '<div ' . get_block_wrapper_attributes() . '>';
$output .= do_shortcode( '[aiovg_video ' . $this->build_shortcode_attributes( $atts ) . ']' );
$output .= '</div>';
return $output;
}
/**
* Render the videos block frontend.
*
* @since 1.5.6
* @param array $atts An associative array of attributes.
* @return string HTML output.
*/
public function render_videos_block( $atts ) {
$style = '';
if ( ! empty( $atts['style']['css'] ) ) {
$css = wp_strip_all_tags( $atts['style']['css'] );
if ( '' !== trim( $css ) ) {
$style = '<style>' . $css . '</style>';
}
}
// Always get ratio from the global settings
if ( isset( $atts['ratio'] ) ) {
unset( $atts['ratio'] );
}
unset( $atts['style'] );
$output = $style;
$output .= '<div ' . get_block_wrapper_attributes() . '>';
$output .= do_shortcode( '[aiovg_videos ' . $this->build_shortcode_attributes( $atts ) . ']' );
$output .= '</div>';
return $output;
}
/**
* Build shortcode attributes string.
*
* @since 1.5.6
* @access private
* @param array $atts Array of attributes.
* @return string Shortcode attributes string.
*/
private function build_shortcode_attributes( $atts ) {
$attributes = array();
foreach ( $atts as $key => $value ) {
if ( is_null( $value ) || is_object( $value ) ) {
continue;
}
if ( is_bool( $value ) ) {
$value = ( true === $value ) ? 1 : 0;
}
if ( is_array( $value ) ) {
$value = implode( ',', $value );
}
$attributes[] = sprintf( '%s="%s"', $key, $value );
}
return implode( ' ', $attributes );
}
}