File: /var/www/html/triad-infosec/wp-content/plugins/fusion-builder/shortcodes/fusion-events.php
<?php
/**
* Add an element to fusion-builder.
*
* @package fusion-builder
* @since 1.0
*/
if ( fusion_is_element_enabled( 'fusion_events' ) && class_exists( 'Tribe__Events__Main' ) ) {
if ( ! class_exists( 'FusionSC_FusionEvents' ) ) {
/**
* Shortcode class.
*
* @since 1.0
*/
class FusionSC_FusionEvents extends Fusion_Element {
/**
* The events counter.
*
* @access private
* @since 1.0
* @var int
*/
private $fusion_events_counter = 1;
/**
* Constructor.
*
* @access public
* @since 1.0
*/
public function __construct() {
parent::__construct();
add_shortcode( 'fusion_events', [ $this, 'render' ] );
add_filter( 'fusion_attr_events-shortcode', [ $this, 'attr' ] );
add_filter( 'fusion_attr_events-shortcode-columns', [ $this, 'column_attr' ] );
add_filter( 'fusion_events_shortcode_content', [ $this, 'get_post_content' ], 10, 3 );
// Ajax mechanism for query related part.
add_action( 'wp_ajax_get_fusion_events', [ $this, 'ajax_query' ] );
}
/**
* Gets the default values.
*
* @static
* @access public
* @since 2.0.0
* @return array
*/
public static function get_element_defaults() {
$fusion_settings = awb_get_fusion_settings();
$theme_option_content_padding = $fusion_settings->get( 'events_content_padding' );
$padding_values = [];
$padding_values['top'] = Fusion_Sanitize::size( $theme_option_content_padding['top'] );
$padding_values['right'] = Fusion_Sanitize::size( $theme_option_content_padding['right'] );
$padding_values['bottom'] = Fusion_Sanitize::size( $theme_option_content_padding['bottom'] );
$padding_values['left'] = Fusion_Sanitize::size( $theme_option_content_padding['left'] );
return [
'column_spacing' => ( '' !== $fusion_settings->get( 'events_column_spacing' ) ) ? $fusion_settings->get( 'events_column_spacing' ) : '-1',
'content_length' => ( '' !== $fusion_settings->get( 'events_content_length' ) ) ? $fusion_settings->get( 'events_content_length' ) : 'no_text',
'excerpt_length' => ( '' !== $fusion_settings->get( 'excerpt_length_events' ) ) ? $fusion_settings->get( 'excerpt_length_events' ) : 55,
'hide_on_mobile' => fusion_builder_default_visibility( 'string' ),
'class' => '',
'id' => '',
'cat_slug' => '',
'columns' => '4',
'hide_recurrences' => 'no',
'number_posts' => ( '' !== $fusion_settings->get( 'events_per_page' ) ) ? $fusion_settings->get( 'events_per_page' ) : '4',
'order' => 'ASC',
'pagination' => 'no',
'past_events' => 'no',
'picture_size' => 'cover',
'strip_html' => ( '' !== $fusion_settings->get( 'events_strip_html_excerpt' ) ) ? $fusion_settings->get( 'events_strip_html_excerpt' ) : 'yes',
'padding_top' => $padding_values['top'],
'padding_right' => $padding_values['right'],
'padding_bottom' => $padding_values['bottom'],
'padding_left' => $padding_values['left'],
'content_alignment' => '',
];
}
/**
* Maps settings to param variables.
*
* @static
* @access public
* @since 2.0.0
* @return array
*/
public static function settings_to_params() {
return [
'events_content_padding[top]' => 'padding_top',
'events_content_padding[right]' => 'padding_right',
'events_content_padding[bottom]' => 'padding_bottom',
'events_content_padding[left]' => 'padding_left',
'events_column_spacing' => 'column_spacing',
'events_content_length' => 'content_length',
'excerpt_length_events' => 'excerpt_length',
'events_per_page' => 'number_posts',
'events_strip_html_excerpt' => [
'param' => 'strip_html',
'callback' => 'toYes',
],
];
}
/**
* Used to set any other variables for use on front-end editor template.
*
* @static
* @access public
* @since 2.0.0
* @return array
*/
public static function get_element_extras() {
$fusion_settings = awb_get_fusion_settings();
return [
'pagination_global' => apply_filters( 'fusion_builder_events_pagination', 'no' ),
'pagination_range_global' => apply_filters( 'fusion_pagination_size', $fusion_settings->get( 'pagination_range' ) ),
'pagination_start_end_range_global' => apply_filters( 'fusion_pagination_start_end_size', $fusion_settings->get( 'pagination_start_end_range' ) ),
'load_more_text' => apply_filters( 'avada_load_more_events_name', esc_attr__( 'Load More Events', 'fusion-builder' ) ),
];
}
/**
* Maps settings to extra variables.
*
* @static
* @access public
* @since 2.0.0
* @return array
*/
public static function settings_to_extras() {
return [
'pagination_range' => 'pagination_range_global',
'pagination_start_end_range' => 'pagination_start_end_range_global',
];
}
/**
* Gets the query data.
*
* @static
* @access public
* @since 2.0.0
* @param array $defaults An array of defaults.
* @return void
*/
public function ajax_query( $defaults ) {
check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' );
$this->query( $defaults );
}
/**
* Gets the default values.
*
* @static
* @access public
* @since 2.0.0
* @param array $defaults The default args.
* @return array|Object
*/
public static function query( $defaults ) {
$fusion_settings = awb_get_fusion_settings();
$live_request = false;
// From Ajax Request.
if ( isset( $_POST['model'] ) && isset( $_POST['model']['params'] ) && ! apply_filters( 'fusion_builder_live_request', false ) ) { // phpcs:ignore WordPress.Security.NonceVerification
$return_data = [];
$defaults = wp_unslash( $_POST['model']['params'] ); // phpcs:ignore WordPress.Security
$live_request = true;
add_filter( 'fusion_builder_live_request', '__return_true' );
}
// Set number of posts to TO value if its blank.
$number_of_posts = ( '' !== $defaults['number_posts'] ) ? $defaults['number_posts'] : $fusion_settings->get( 'events_per_page' );
$number_of_posts = '0' === $number_of_posts ? get_option( 'posts_per_page' ) : $number_of_posts;
// Check if there is paged content.
$paged = 1;
if ( 'no' !== $defaults['pagination'] ) {
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
if ( is_front_page() ) {
$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
}
}
$args = [
'post_type' => 'tribe_events',
'paged' => $paged,
'posts_per_page' => $number_of_posts,
'order' => $defaults['order'],
'orderby' => 'meta_value',
'meta_key' => '_EventStartDate', // phpcs:ignore WordPress.DB.SlowDBQuery
'meta_type' => 'DATETIME',
];
if ( 'no' === $defaults['past_events'] ) {
$current_time = current_time( 'Y-m-d H:i:s' );
$args['meta_query'] = [ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
'relation' => 'OR',
[
'key' => '_EventStartDate',
'value' => $current_time,
'compare' => '>=',
],
[
'key' => '_EventEndDate',
'value' => $current_time,
'compare' => '>=',
],
];
} else {
$args['eventDisplay'] = 'custom';
}
if ( $defaults['cat_slug'] ) {
$terms = explode( ',', $defaults['cat_slug'] );
$args['tax_query'] = [
'relation' => 'OR',
[
'taxonomy' => 'tribe_events_cat',
'field' => 'slug',
'terms' => array_map( 'trim', $terms ),
],
];
}
if ( 'yes' === $defaults['hide_recurrences'] ) {
$args['hide_subsequent_recurrences'] = true;
}
if ( ! $live_request ) {
return fusion_cached_query( $args );
}
// Ajax returns protected posts, but we just want published.
$args['post_status'] = 'publish';
wp_reset_postdata();
// Anything beyond here is for live preview.
$events = fusion_cached_query( $args );
$ids = [];
if ( ! $events->have_posts() ) {
$return_data['placeholder'] = fusion_builder_placeholder( 'tribe_events', 'events' );
echo wp_json_encode( $return_data );
wp_die();
}
$return_data['ec_hover_type'] = $fusion_settings->get( 'ec_hover_type' );
while ( $events->have_posts() ) {
$events->the_post();
$thumbnail = '';
$post_id = get_the_ID();
if ( in_array( $post_id, $ids, true ) ) {
continue;
}
$ids[] = $post_id;
if ( has_post_thumbnail( $post_id ) ) {
if ( 'auto' === $defaults['picture_size'] ) {
fusion_library()->images->set_grid_image_meta(
[
'layout' => 'grid',
'columns' => $defaults['columns'],
'gutter_width' => $defaults['column_spacing'],
]
);
$thumbnail = get_the_post_thumbnail( $post_id, 'full' );
fusion_library()->images->set_grid_image_meta( [] );
} else {
$thumbnail = '<span class="tribe-events-event-image" style="background-image: url(' . get_the_post_thumbnail_url( $post_id ) . '); -webkit-background-size: cover; background-size: cover; background-position: center center;"></span>';
}
} elseif ( class_exists( 'Tribe__Events__Pro__Main' ) ) {
$thumb_url = esc_url( trailingslashit( Tribe__Events__Pro__Main::instance()->pluginUrl ) . 'src/resources/images/tribe-related-events-placeholder.png' );
if ( 'auto' === $defaults['picture_size'] ) {
$title = the_title_attribute(
[
'echo' => false,
'post' => $post_id,
]
);
$thumbnail = '<img class="fusion-events-placeholder" src="' . $thumb_url . '" alt="' . $title . '" />';
} else {
$thumbnail = '<span class="tribe-events-event-image" style="background-image: url(' . $thumb_url . '); -webkit-background-size: cover; background-size: cover; background-position: center center;"></span>';
}
}
// No image set thumbnail.
if ( ! $thumbnail ) {
ob_start();
do_action( 'fusion_placeholder_image', 'fixed' );
$placeholder = ob_get_clean();
$thumbnail = str_replace( 'fusion-placeholder-image', ' fusion-placeholder-image tribe-events-event-image', $placeholder );
}
$content = fusion_get_content_data( 'fusion_events' );
$return_data['paged'] = $paged;
$return_data['max_num_pages'] = $events->max_num_pages;
$return_data['posts'][] = [
'thumbnail' => $thumbnail,
'title' => get_the_title(),
'permalink' => get_the_permalink(),
'tribe_events_event_schedule_details' => tribe_events_event_schedule_details(),
'content' => $content,
];
}
echo wp_json_encode( $return_data );
wp_die();
}
/**
* Render the shortcode
*
* @access public
* @since 1.0
* @param array $args Shortcode parameters.
* @param string $content Content between shortcode.
* @return string HTML output.
*/
public function render( $args, $content = '' ) {
$fusion_settings = awb_get_fusion_settings();
$html = '';
$defaults = FusionBuilder::set_shortcode_defaults( self::get_element_defaults(), $args, 'fusion_events' );
$padding_values = [];
$padding_values['top'] = $defaults['padding_top'];
$padding_values['right'] = $defaults['padding_right'];
$padding_values['bottom'] = $defaults['padding_bottom'];
$padding_values['left'] = $defaults['padding_left'];
$content_padding = implode( ' ', $padding_values );
$this->args = $defaults;
if ( ! class_exists( 'Tribe__Events__Main' ) ) {
return '';
}
$events = $this->query( $defaults );
extract( $defaults );
if ( ! $events->have_posts() ) {
$this->fusion_events_counter++;
return fusion_builder_placeholder( 'tribe_events', 'events' );
}
if ( $events->have_posts() ) {
$ids = [];
$html .= '<div ' . FusionBuilder::attributes( 'events-shortcode' ) . '>';
$html .= '<div class="fusion-events-wrapper" data-pages="' . $events->max_num_pages . '">';
$i = 1;
$last = false;
$columns = (int) $columns;
while ( $events->have_posts() ) {
$events->the_post();
$post_id = get_the_ID();
if ( in_array( $post_id, $ids, true ) ) {
continue;
}
$ids[] = $post_id;
if ( $i === $columns ) {
$last = true;
}
if ( $i > $columns ) {
$i = 1;
$last = false;
}
if ( 1 === $columns ) {
$last = true;
}
$thumbnail = '';
$html .= '<div ' . FusionBuilder::attributes( 'events-shortcode-columns', $last ) . '>';
$html .= '<div class="fusion-column-wrapper">';
if ( has_post_thumbnail( $post_id ) ) {
if ( 'auto' === $picture_size ) {
fusion_library()->images->set_grid_image_meta(
[
'layout' => 'grid',
'columns' => $columns,
'gutter_width' => $column_spacing,
]
);
$thumbnail = get_the_post_thumbnail( $post_id, 'full' );
fusion_library()->images->set_grid_image_meta( [] );
} else {
$thumbnail = '<span class="tribe-events-event-image" style="background-image: url(' . get_the_post_thumbnail_url( $post_id ) . '); -webkit-background-size: cover; background-size: cover; background-position: center center;"></span>';
}
} elseif ( class_exists( 'Tribe__Events__Pro__Main' ) ) {
$thumb_url = esc_url( trailingslashit( Tribe__Events__Pro__Main::instance()->pluginUrl ) . 'src/resources/images/tribe-related-events-placeholder.png' );
if ( 'auto' === $picture_size ) {
$title = the_title_attribute(
[
'echo' => false,
'post' => $post_id,
]
);
$thumbnail = '<img class="fusion-events-placeholder" src="' . $thumb_url . '" alt="' . $title . '" />';
} else {
$thumbnail = '<span class="tribe-events-event-image" style="background-image: url(' . $thumb_url . '); -webkit-background-size: cover; background-size: cover; background-position: center center;"></span>';
}
}
$html .= '<div class="fusion-events-thumbnail hover-type-' . $fusion_settings->get( 'ec_hover_type' ) . '">';
$html .= '<a href="' . get_the_permalink() . '" class="url" rel="bookmark" aria-label="' . the_title_attribute( [ 'echo' => false ] ) . '">';
if ( $thumbnail ) {
$html .= $thumbnail;
} else {
ob_start();
/**
* The fusion_placeholder_image hook.
*
* @hooked fusion_render_placeholder_image - 10 (outputs the HTML for the placeholder image)
*/
do_action( 'fusion_placeholder_image', 'fixed' );
$placeholder = ob_get_clean();
$html .= str_replace( 'fusion-placeholder-image', ' fusion-placeholder-image tribe-events-event-image', $placeholder );
}
$html .= '</a>';
$html .= '</div>';
$html .= '<div class="fusion-events-content-wrapper" style="padding:' . $content_padding . ';">';
$html .= '<div class="fusion-events-meta">';
$html .= '<h2><a href="' . get_the_permalink() . '" class="url" rel="bookmark">' . get_the_title() . '</a></h2>';
$html .= '<h4>' . tribe_events_event_schedule_details() . '</h4>';
$html .= '</div>';
if ( 'no_text' !== $defaults['content_length'] ) {
$html .= '<div class="fusion-events-content">';
$html .= apply_filters( 'fusion_events_shortcode_content', $defaults['content_length'], $defaults['excerpt_length'], $defaults['strip_html'] );
$html .= '</div>';
}
$html .= '</div>';
$html .= '</div>';
$html .= '</div>';
if ( $last && ( 'no' === $defaults['pagination'] || 'pagination' === $defaults['pagination'] ) ) {
$html .= '<div class="fusion-clearfix"></div>';
}
$i++;
}
wp_reset_query();
if ( 'no' === $defaults['pagination'] || 'pagination' === $defaults['pagination'] ) {
$html .= '<div class="fusion-clearfix"></div>';
}
$html .= '</div>';
// Pagination.
$pagination_type = ( '' !== $defaults['pagination'] ) ? $defaults['pagination'] : 'no';
$pagination_html = '';
if ( 'no' !== $pagination_type && 1 < esc_attr( $events->max_num_pages ) ) {
// Pagination is set to "load more" button.
if ( 'load_more_button' === $pagination_type && -1 !== intval( $number_posts ) ) {
$button_margin = '';
if ( '-1' !== $this->args['column_spacing'] ) {
$button_margin = 'margin-left: ' . ( $this->args['column_spacing'] / 2 ) . 'px;';
$button_margin .= 'margin-right: ' . ( $this->args['column_spacing'] / 2 ) . 'px;';
$style = '<style type="text/css">';
$style .= '.fusion-events-shortcode.fusion-events-shortcode-' . $this->fusion_events_counter . ' .fusion-load-more-button {' . $button_margin . '}';
$style .= '.fusion-events-shortcode.fusion-events-shortcode-' . $this->fusion_events_counter . ' .fusion-loading-container {' . $button_margin . '}';
$style .= '</style>';
$pagination_html .= $style;
}
$pagination_html .= '<button class="fusion-load-more-button fusion-events-button fusion-clearfix">' . apply_filters( 'avada_load_more_events_name', esc_attr__( 'Load More Events', 'fusion-builder' ) ) . '</button>';
}
$infinite_pagination = false;
if ( 'load_more_button' === $pagination_type || 'infinite' === $pagination_type ) {
$infinite_pagination = true;
}
$pagination_html .= fusion_pagination( $events->max_num_pages, $fusion_settings->get( 'pagination_range' ), $events, $infinite_pagination, true );
}
$html .= $pagination_html;
$html .= '</div>';
}
$this->fusion_events_counter++;
$this->on_render();
return apply_filters( 'fusion_element_events_content', $html, $args );
}
/**
* Builds the attributes array.
*
* @access public
* @since 1.6
* @return array
*/
public function attr() {
$attr = [
'class' => 'fusion-events-shortcode fusion-events-shortcode-' . $this->fusion_events_counter,
];
if ( 'no' !== $this->args['pagination'] ) {
$attr['class'] .= ' fusion-events-pagination-' . str_replace( '_', '-', $this->args['pagination'] );
}
// Add custom class.
if ( $this->args['class'] ) {
$attr['class'] .= ' ' . $this->args['class'];
}
// Add custom id.
if ( $this->args['id'] ) {
$attr['id'] = $this->args['id'];
}
if ( $this->args['content_alignment'] ) {
$attr['class'] .= ' fusion-events-layout-' . $this->args['content_alignment'];
}
if ( '-1' !== $this->args['column_spacing'] ) {
$attr['style'] = 'margin-left: -' . ( $this->args['column_spacing'] / 2 ) . 'px;';
$attr['style'] .= 'margin-right: -' . ( $this->args['column_spacing'] / 2 ) . 'px;';
}
$attr = fusion_builder_visibility_atts( $this->args['hide_on_mobile'], $attr );
return $attr;
}
/**
* Builds the attributes array.
*
* @access public
* @since 1.6
* @param bool $last Holds value for last column in a row.
* @return array
*/
public function column_attr( $last = false ) {
$attr = [
'class' => 'fusion-events-post',
];
$fusion_spacing = ( '-1' !== $this->args['column_spacing'] ) ? 'fusion-spacing-no' : 'fusion-spacing-yes';
$attr['class'] .= ' ' . $fusion_spacing;
$columns = (int) $this->args['columns'];
switch ( $columns ) {
case '1':
$column_class = 'full-one';
break;
case '2':
$column_class = 'one-half';
break;
case '3':
$column_class = 'one-third';
break;
case '4':
$column_class = 'one-fourth';
break;
case '5':
$column_class = 'one-fifth';
break;
case '6':
$column_class = 'one-sixth';
break;
}
$attr['class'] .= ' fusion-' . $column_class . ' fusion-layout-column';
$attr['class'] .= ( $last ) ? ' fusion-column-last' : '';
if ( '-1' !== $this->args['column_spacing'] ) {
$attr['style'] = 'padding:' . ( $this->args['column_spacing'] / 2 ) . 'px';
} else {
$attr['style'] = 'margin-bottom:4%;';
}
return $attr;
}
/**
* Echoes the post-content.
*
* @access public
* @since 1.6
* @param string $content_length Display excerpt / full content.
* @param int $excerpt_length Excerpt length in words.
* @param string $strip_html Yes/no option to strip html.
* @return string Excerpt / Full content of event.
*/
public function get_post_content( $content_length = 'excerpt', $excerpt_length = 55, $strip_html = 'yes' ) {
if ( 'no_text' !== $content_length ) {
$excerpt = 'no';
if ( 'excerpt' === strtolower( $content_length ) ) {
$excerpt = 'yes';
}
return fusion_get_post_content( '', $excerpt, $excerpt_length, $strip_html );
}
return '';
}
/**
* Adds settings to element options panel.
*
* @access public
* @since 1.6
* @return array $sections Events settings.
*/
public function add_options() {
return [
'events_shortcode_section' => [
'label' => esc_attr__( 'Events', 'fusion-builder' ),
'description' => '',
'id' => 'events_shortcode_section',
'default' => '',
'icon' => 'fusiona-tag',
'type' => 'accordion',
'fields' => [
'events_per_page' => [
'label' => esc_attr__( 'Number of Events Per Page', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the number of events displayed per page for events element. Set to -1 to display all. Set to 0 to use the number of posts from Settings > Reading.', 'fusion-builder' ),
'id' => 'events_per_page',
'default' => '4',
'type' => 'slider',
'transport' => 'postMessage',
'choices' => [
'min' => '-1',
'max' => '50',
'step' => '1',
],
],
'events_column_spacing' => [
'label' => esc_attr__( 'Column Spacing', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the column spacing for events items.', 'fusion-builder' ),
'id' => 'events_column_spacing',
'default' => '40',
'type' => 'slider',
'transport' => 'postMessage',
'choices' => [
'min' => '-1',
'max' => '300',
'step' => '1',
],
],
'events_content_padding' => [
'label' => esc_attr__( 'Events Content Padding', 'fusion-builder' ),
'description' => esc_html__( 'Controls the top/right/bottom/left padding of the events contents.', 'fusion-builder' ),
'id' => 'events_content_padding',
'transport' => 'postMessage',
'choices' => [
'top' => true,
'bottom' => true,
'left' => true,
'right' => true,
],
'default' => [
'top' => '20px',
'bottom' => '20px',
'left' => '20px',
'right' => '20px',
],
'type' => 'spacing',
],
'events_content_length' => [
'label' => esc_attr__( 'Events Text Display', 'fusion-builder' ),
'description' => esc_attr__( 'Choose how to display the post excerpt for events elements.', 'fusion-builder' ),
'id' => 'events_content_length',
'default' => 'no_text',
'type' => 'radio-buttonset',
'transport' => 'postMessage',
'choices' => [
'no_text' => esc_attr__( 'No Text', 'fusion-builder' ),
'excerpt' => esc_attr__( 'Excerpt', 'fusion-builder' ),
'full_content' => esc_attr__( 'Full Content', 'fusion-builder' ),
],
],
'excerpt_length_events' => [
'label' => esc_attr__( 'Excerpt Length', 'fusion-builder' ),
'description' => sprintf( __( 'Controls the number of %s in the excerpts for events elements.', 'fusion-builder' ), Fusion_Settings::get_instance()->get_default_description( 'excerpt_base', false, 'no_desc' ) ),
'id' => 'excerpt_length_events',
'default' => '55',
'type' => 'slider',
'transport' => 'postMessage',
'choices' => [
'min' => '0',
'max' => '500',
'step' => '1',
],
'required' => [
[
'setting' => 'events_content_length',
'operator' => '==',
'value' => 'excerpt',
],
],
],
'events_strip_html_excerpt' => [
'label' => esc_attr__( 'Strip HTML from Excerpt', 'fusion-builder' ),
'description' => esc_attr__( 'Turn on to strip HTML content from the excerpt for events elements.', 'fusion-builder' ),
'id' => 'events_strip_html_excerpt',
'default' => '1',
'type' => 'switch',
'transport' => 'postMessage',
'required' => [
[
'setting' => 'events_content_length',
'operator' => '==',
'value' => 'excerpt',
],
],
],
],
],
];
}
/**
* Sets the necessary scripts.
*
* @access public
* @since 3.2
* @return void
*/
public function on_first_render() {
$fusion_settings = awb_get_fusion_settings();
Fusion_Dynamic_JS::localize_script(
'fusion-events',
'fusionEventsVars',
[
'lightbox_behavior' => $fusion_settings->get( 'lightbox_behavior' ),
'infinite_finished_msg' => '<em>' . __( 'All items displayed.', 'fusion-builder' ) . '</em>',
'infinite_blog_text' => '<em>' . __( 'Loading the next set of posts...', 'fusion-builder' ) . '</em>',
]
);
Fusion_Dynamic_JS::enqueue_script(
'fusion-events',
FusionBuilder::$js_folder_url . '/general/fusion-events.js',
FusionBuilder::$js_folder_path . '/general/fusion-events.js',
[ 'jquery', 'fusion-equal-heights', 'images-loaded', 'packery', 'jquery-infinite-scroll' ],
FUSION_BUILDER_VERSION,
true
);
}
/**
* Load base CSS.
*
* @access public
* @since 3.0
* @return void
*/
public function add_css_files() {
FusionBuilder()->add_element_css( FUSION_BUILDER_PLUGIN_DIR . 'assets/css/shortcodes/events.min.css' );
}
}
}
new FusionSC_FusionEvents();
}
/**
* Map shortcode to Avada Builder
*
* @since 1.0
*/
function fusion_element_events() {
$fusion_settings = awb_get_fusion_settings();
$builder_status = function_exists( 'is_fusion_editor' ) && is_fusion_editor();
$event_cat = $builder_status ? fusion_builder_shortcodes_categories( 'tribe_events_cat', false, false, 26 ) : [];
$cat_include = [
'type' => 'multiple_select',
'heading' => esc_attr__( 'Categories', 'fusion-builder' ),
'placeholder' => esc_attr__( 'Categories', 'fusion-builder' ),
'description' => esc_attr__( 'Select a category or leave blank for all.', 'fusion-builder' ),
'param_name' => 'cat_slug',
'value' => $event_cat,
'default' => '',
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_events',
'ajax' => true,
],
];
if ( count( $event_cat ) > 25 ) {
$cat_include['type'] = 'ajax_select';
$cat_include['ajax'] = 'fusion_search_query';
$cat_include['value'] = [];
$cat_include['ajax_params'] = [
'taxonomy' => 'tribe_events_cat',
'use_slugs' => true,
];
}
if ( class_exists( 'Tribe__Events__Main' ) ) {
fusion_builder_map(
fusion_builder_frontend_data(
'FusionSC_FusionEvents',
[
'name' => esc_attr__( 'Events', 'fusion-builder' ),
'shortcode' => 'fusion_events',
'icon' => 'fusiona-tag',
'help_url' => 'https://avada.com/documentation/the-events-calendar-element/',
'params' => [
$cat_include,
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Condense Events In Series', 'fusion-builder' ),
'description' => __( 'Turn on to show only the next event in each series.', 'fusion-builder' ),
'param_name' => 'hide_recurrences',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'default' => 'no',
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_events',
'ajax' => true,
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Display Past Events', 'fusion-builder' ),
'description' => __( 'Turn on if you want the past events to be displayed.', 'fusion-builder' ),
'param_name' => 'past_events',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'default' => 'no',
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_events',
'ajax' => true,
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Order', 'fusion-builder' ),
'description' => esc_attr__( 'Defines the sorting order of posts.', 'fusion-builder' ),
'param_name' => 'order',
'default' => 'ASC',
'value' => [
'DESC' => esc_attr__( 'Descending', 'fusion-builder' ),
'ASC' => esc_attr__( 'Ascending', 'fusion-builder' ),
],
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_events',
'ajax' => true,
],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Number of Events', 'fusion-builder' ),
'description' => esc_attr__( 'Select the number of events to display. Set to -1 to display all. Set to 0 to use number of posts from Settings > Reading.', 'fusion-builder' ),
'param_name' => 'number_posts',
'value' => '',
'min' => '-1',
'max' => '25',
'step' => '1',
'default' => $fusion_settings->get( 'events_per_page' ),
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_events',
'ajax' => true,
],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Maximum Columns', 'fusion-builder' ),
'description' => esc_attr__( 'Select the number of max columns to display.', 'fusion-builder' ),
'param_name' => 'columns',
'value' => '4',
'min' => '1',
'max' => '6',
'step' => '1',
],
[
'type' => 'range',
'heading' => esc_attr__( 'Column Spacing', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the column spacing for events items. Setting to -1 will keep the default 4% column spacing.', 'fusion-builder' ),
'param_name' => 'column_spacing',
'value' => '',
'min' => '-1',
'max' => '300',
'step' => '1',
'default' => $fusion_settings->get( 'events_column_spacing' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Picture Size', 'fusion-builder' ),
'description' => __( 'cover = image will scale to cover the container, <br />auto = width and height will adjust to the image.', 'fusion-builder' ),
'param_name' => 'picture_size',
'value' => [
'cover' => esc_attr__( 'Cover', 'fusion-builder' ),
'auto' => esc_attr__( 'Auto', 'fusion-builder' ),
],
'default' => 'cover',
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_events',
'ajax' => true,
],
],
[
'type' => 'dimension',
'remove_from_atts' => true,
'heading' => esc_attr__( 'Content Padding ', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the padding for the event contents. Enter values including any valid CSS unit, ex: 20px, 20px, 20px, 20px.', 'fusion-builder' ),
'param_name' => 'content_padding',
'value' => [
'padding_top' => '',
'padding_right' => '',
'padding_bottom' => '',
'padding_left' => '',
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Content Alignment', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the alignment of contents.', 'fusion-builder' ),
'param_name' => 'content_alignment',
'default' => '',
'value' => [
'' => esc_attr__( 'Text Flow', 'fusion-builder' ),
'left' => esc_attr__( 'Left', 'fusion-builder' ),
'center' => esc_attr__( 'Center', 'fusion-builder' ),
'right' => esc_attr__( 'Right', 'fusion-builder' ),
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Text Display', 'fusion-builder' ),
'description' => esc_attr__( 'Choose how to display the post excerpt.', 'fusion-builder' ),
'param_name' => 'content_length',
'value' => [
'' => esc_attr__( 'Default', 'fusion-builder' ),
'no_text' => esc_attr__( 'No Text', 'fusion-builder' ),
'excerpt' => esc_attr__( 'Excerpt', 'fusion-builder' ),
'full_content' => esc_attr__( 'Full Content', 'fusion-builder' ),
],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Excerpt Length', 'fusion-builder' ),
'description' => sprintf( __( 'Controls the number of %s in the excerpts.', 'fusion-builder' ), Fusion_Settings::get_instance()->get_default_description( 'excerpt_base', false, 'no_desc' ) ),
'param_name' => 'excerpt_length',
'value' => '',
'min' => '0',
'max' => '500',
'step' => '1',
'default' => $fusion_settings->get( 'excerpt_length_events' ),
'dependency' => [
[
'element' => 'content_length',
'value' => 'excerpt',
'operator' => '==',
],
],
'transport' => 'postMessage',
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Strip HTML', 'fusion-builder' ),
'description' => esc_attr__( 'Strip HTML from the post excerpt.', 'fusion-builder' ),
'param_name' => 'strip_html',
'value' => [
'' => esc_attr__( 'Default', 'fusion-builder' ),
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'dependency' => [
[
'element' => 'content_length',
'value' => 'excerpt',
'operator' => '==',
],
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Pagination Type', 'fusion-builder' ),
'description' => esc_attr__( 'Choose the type of pagination.', 'fusion-builder' ),
'param_name' => 'pagination',
'default' => 'no',
'value' => [
'no' => esc_attr__( 'No Pagination', 'fusion-builder' ),
'pagination' => esc_attr__( 'Pagination', 'fusion-builder' ),
'infinite' => esc_attr__( 'Infinite Scrolling', 'fusion-builder' ),
'load_more_button' => esc_attr__( 'Load More Button', 'fusion-builder' ),
],
],
[
'type' => 'checkbox_button_set',
'heading' => esc_attr__( 'Element Visibility', 'fusion-builder' ),
'param_name' => 'hide_on_mobile',
'value' => fusion_builder_visibility_options( 'full' ),
'default' => fusion_builder_default_visibility( 'array' ),
'description' => esc_attr__( 'Choose to show or hide the element on small, medium or large screens. You can choose more than one at a time.', 'fusion-builder' ),
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'CSS Class', 'fusion-builder' ),
'description' => esc_attr__( 'Add a class to the wrapping HTML element.', 'fusion-builder' ),
'param_name' => 'class',
'value' => '',
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'CSS ID', 'fusion-builder' ),
'description' => esc_attr__( 'Add an ID to the wrapping HTML element.', 'fusion-builder' ),
'param_name' => 'id',
'value' => '',
],
],
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_events',
'ajax' => true,
],
]
)
);
}
}
add_action( 'fusion_builder_wp_loaded', 'fusion_element_events' );