File: /var/www/html/triad-infosec/wp-content/themes/Avada/includes/metaboxes/tabs/tab_template.php
<?php
/**
* Page Metabox options.
*
* @author ThemeFusion
* @copyright (c) Copyright by ThemeFusion
* @link https://avada.com
* @package Avada
* @subpackage Core
*/
/**
* Build options for template edit.
*
* @since 6.2
*/
class Avada_Template_Page_Options {
/**
* Holds the section map for options.
*
* @since 6.2
*
* @access private
* @var sections
*/
private $sections;
/**
* Target post ID.
*
* @since 6.2
*
* @access private
* @var target_id
*/
private $target_id;
/**
* Target post object.
*
* @since 6.2
*
* @access private
* @var target_post
*/
private $target_post;
/**
* Actual post ID.
*
* @since 6.2
*
* @access private
* @var post_id
*/
private $post_id;
/**
* Template type.
*
* @since 6.2
*
* @access private
* @var template_type
*/
private $template_type;
/**
* Post type
*
* @since 7.3
*
* @access private
* @var post_type
*/
private $post_type;
/**
* Temporal variable for memoization.
*
* @since 6.2
*
* @access private
* @var tmp
*/
private $tmp;
/**
* Min count to show ajax selector.
*
* @since 6.2
*
* @access private
* @var ajax_min_count
*/
private $ajax_min_count = 25;
/**
* The class constructor.
*
* @access public
* @param array $sections Current options.
* @since 6.2
*/
public function __construct( $sections ) {
$this->sections = $sections;
$this->set_target();
$this->set_options();
}
/**
* Set target post and required vars.
*
* @access public
* @since 6.2
*/
public function set_target() {
global $post;
$real_page_id = is_admin() ? $post->ID : (int) str_replace( 'archive-', '', fusion_library()->get_page_id() );
$terms = get_the_terms( $real_page_id, 'fusion_tb_category' );
$type = is_array( $terms ) ? $terms[0]->name : false;
$_post = get_post( $real_page_id );
$this->target_id = apply_filters( 'fusion_dynamic_post_id', $real_page_id );
$this->target_post = $_post;
$this->post_id = $real_page_id;
$this->template_type = $type;
$this->post_type = get_post_type( $real_page_id );
if ( 'fusion_element' === $this->post_type ) {
$terms = get_the_terms( $real_page_id, 'element_category' );
$this->template_type = is_array( $terms ) ? $terms[0]->name : false;
}
}
/**
* Build the option map and set to object.
*
* @access public
* @since 6.2
*/
public function set_options() {
$preview_types = [ 'fusion_element', 'awb_off_canvas' ];
$this->sections['template'] = [
'label' => in_array( $this->post_type, $preview_types, true ) ? esc_html__( 'Preview', 'Avada' ) : esc_html__( 'Layout Section', 'Avada' ),
'id' => 'template',
'alt_icon' => 'fusiona-file',
'fields' => [],
];
$this->add_dynamic_preview_options();
switch ( $this->template_type ) {
case 'footer':
case 'page_title_bar':
$this->set_module_options();
break;
case 'header':
$this->set_header_options();
break;
case 'mega_menus':
$this->sections['template']['label'] = esc_html__( 'Mega Menu', 'Avada' );
break;
}
if ( 'fusion_element' === $this->post_type ) {
if ( 'post_cards' === $this->template_type ) {
$this->sections['template']['fields']['preview_width'] = [
'id' => 'preview_width',
'label' => esc_attr__( 'Preview Width', 'Avada' ),
/* translators: Additional description (defaults). */
'description' => esc_html__( 'Select the width to preview the card at in the live editor. Note: this is only used for previewing purposes.', 'fusion-builder' ),
'dependency' => [],
'type' => 'slider',
'transport' => 'postMessage',
'events' => [
'fusion-content-preview-width',
],
'default' => '50',
'choices' => [
'min' => '0',
'max' => '100',
'step' => '1',
],
];
} elseif ( 'mega_menus' === $this->template_type ) {
$this->sections['template']['fields']['megamenu_wrapper_width'] = [
'id' => 'megamenu_wrapper_width',
'label' => esc_attr__( 'Mega Menu Max Width', 'Avada' ),
/* translators: Additional description (defaults). */
'description' => esc_html__( 'Select the max width for the mega menu wrapper.', 'fusion-builder' ),
'dependency' => [],
'type' => 'radio-buttonset',
'transport' => 'postMessage',
'events' => [
'fusion-mega-menu-width',
],
'choices' => [
'site_width' => esc_attr__( 'Site Width', 'Avada' ),
'viewport_width' => esc_attr__( '100% Width', 'Avada' ),
'custom_width' => esc_attr__( 'Custom Width', 'Avada' ),
],
'default' => 'site_width',
];
$this->sections['template']['fields']['megamenu_wrapper_max_width'] = [
'id' => 'megamenu_wrapper_max_width',
'label' => esc_attr__( 'Custom Max Width', 'Avada' ),
'description' => esc_attr__( 'Controls the max width of the mega menu. In pixels.', 'Avada' ),
'type' => 'slider',
'default' => '1200',
'choices' => [
'min' => '0',
'max' => '4096',
'step' => '1',
],
'transport' => 'postMessage',
'events' => [
'fusion-mega-menu-width',
],
'dependency' => [
[
'field' => 'megamenu_wrapper_width',
'value' => 'custom_width',
'comparison' => '==',
],
],
];
}
}
}
/**
* Adds dynamic content preview options.
*
* @access public
* @since 6.2
*/
public function add_dynamic_preview_options() {
$preview_fields = [];
$archive_choices = [
'post' => esc_attr__( 'Post', 'Avada' ),
];
$choices = [
'default' => esc_attr__( 'Default', 'Avada' ),
];
$args = [
'public' => true,
'show_in_nav_menus' => true,
];
$is_show_terms = in_array( $this->post_type, [ 'fusion_element', 'fusion_tb_section' ], true ) ? true : false;
if ( 'fusion_element' !== $this->post_type ) {
$choices['archives'] = esc_attr__( 'Archives', 'Avada' );
$choices['search'] = esc_attr__( 'Search', 'Avada' );
$choices['404'] = esc_attr__( '404', 'Avada' );
}
if ( $is_show_terms ) {
$choices['term'] = esc_attr__( 'Term', 'Avada' );
}
$post_types = get_post_types( $args, 'objects', 'and' );
$post_taxonomies = [];
// Filter out not relevant post types (can add filter later).
$disabled_post_types = [ 'attachment', 'slide', 'themefusion_elastic', 'fusion_template', 'fusion_tb_section' ];
// No need for pages in post card.
if ( 'fusion_element' === $this->post_type ) {
$disabled_post_types[] = 'page';
}
foreach ( $disabled_post_types as $disabled ) {
unset( $post_types[ $disabled ] );
}
foreach ( $post_types as $post_type ) {
$selection = [];
$field_type = 'ajax_select';
$ajax = 'fusion_search_query';
$ajax_params = [
'post_type' => $post_type,
];
if ( $is_show_terms ) {
$new_taxonomies = get_object_taxonomies( $post_type->name, 'objects' );
foreach ( $new_taxonomies as $new_taxonomy ) {
$post_taxonomies[ $new_taxonomy->name ] = ucwords( esc_html( $new_taxonomy->label ) );
}
}
if ( $this->ajax_min_count > wp_count_posts( $post_type->name )->publish ) {
$ajax = '';
$field_type = 'select';
$posts = get_posts(
[
'post_type' => $post_type->name,
'numberposts' => -1, // phpcs:ignore WPThemeReview.CoreFunctionality.PostsPerPage
]
);
/* translators: The post name. */
$selection[0] = sprintf( esc_attr__( 'Any %s item', 'Avada' ), $post_type->labels->singular_name );
foreach ( $posts as $single_post ) {
$selection[ $single_post->ID ] = $single_post->post_title;
}
}
$preview_fields[ 'preview_' . $post_type->name ] = [
'id' => 'preview_' . $post_type->name,
/* translators: The post name. */
'label' => sprintf( esc_attr__( 'Select %s', 'Avada' ), $post_type->labels->singular_name ),
/* translators: The post name. */
'placeholder' => sprintf( esc_attr__( 'Any %s item', 'Avada' ), $post_type->labels->singular_name ),
/* translators: The post name. */
'description' => sprintf( esc_attr__( 'Choose to view dynamic content as %1$s. Select "Any %2$s Item" for random selection.', 'Avada' ), $post_type->labels->singular_name, $post_type->labels->singular_name ),
'type' => $field_type,
'choices' => $selection,
'ajax' => $ajax,
'max_input' => 1,
'transport' => 'postMessage',
'class' => 'fusion-no-bottom-border',
'ajax_params' => $ajax_params,
'dependency' => [
[
'field' => 'dynamic_content_preview_type',
'value' => $post_type->name,
'comparison' => '==',
],
],
];
$choices[ $post_type->name ] = $post_type->labels->singular_name;
if ( ! empty( $post_type->has_archive ) ) {
$archive_choices[ $post_type->name ] = $post_type->labels->singular_name;
}
}
$this->sections['template']['fields']['dynamic_content_preview_type'] = [
'id' => 'dynamic_content_preview_type',
'type' => 'select',
'label' => esc_attr__( 'View Dynamic Content As', 'Avada' ),
'description' => esc_html__( 'Make a selection to view Dynamic Content based on a specific post/page.', 'Avada' ),
'default' => 'default',
'transport' => 'postMessage',
'class' => 'fusion-no-bottom-border',
'choices' => $choices,
];
if ( 'fusion_element' !== $this->post_type ) {
$preview_fields['preview_archives'] = [
'id' => 'preview_archives',
'label' => esc_attr__( 'Select Archive Type', 'Avada' ),
'description' => esc_attr__( 'Choose to view Dynamic Content as Archive Type.', 'Avada' ),
'type' => 'select',
'default' => 'post',
'choices' => $archive_choices,
'transport' => 'postMessage',
'class' => 'fusion-no-bottom-border',
'dependency' => [
[
'field' => 'dynamic_content_preview_type',
'value' => 'archives',
'comparison' => '==',
],
],
];
}
if ( $is_show_terms && ! empty( $post_taxonomies ) ) {
unset( $post_taxonomies['post_format'] );
unset( $post_taxonomies['product_visibility'] );
$preview_fields['preview_term'] = [
'id' => 'preview_term',
'label' => esc_attr__( 'Select Taxonomy', 'Avada' ),
'description' => esc_attr__( 'Select a taxonomy to pull a term from. The most recent term in the taxonomy will be used.', 'Avada' ),
'type' => 'select',
'default' => '',
'choices' => $post_taxonomies,
'transport' => 'postMessage',
'class' => 'fusion-no-bottom-border',
'dependency' => [
[
'field' => 'dynamic_content_preview_type',
'value' => 'term',
'comparison' => '==',
],
],
];
}
foreach ( $preview_fields as $field_id => $field ) {
$this->sections['template']['fields'][ $field_id ] = $field;
}
$this->sections['template']['fields']['dynamic_content_preview_action'] = [
'id' => 'dynamic_content_preview_action',
'type' => 'button',
'label' => esc_attr__( 'Preview', 'Avada' ),
'class' => 'fusion-no-top-padding',
'action' => 'FusionApp.fullRefresh()',
'transport' => 'postMessage',
];
}
/**
* Adds general module options (header, footer).
*
* @access public
* @since 6.2
*/
public function set_module_options() {
if ( 'footer' === $this->template_type ) {
$this->sections['template']['fields']['special_effect'] = [
'id' => 'special_effect',
'label' => esc_attr__( 'Special Effect', 'Avada' ),
/* translators: Additional description (defaults). */
'description' => esc_html__( 'Select a special effect for the footer template.', 'fusion-builder' ),
'dependency' => [],
'type' => 'radio-buttonset',
'transport' => 'postMessage',
'choices' => [
'none' => esc_attr__( 'None', 'Avada' ),
'footer_parallax_effect' => esc_attr__( 'Parallax', 'Avada' ),
'footer_sticky' => esc_attr__( 'Sticky', 'Avada' ),
],
'default' => 'none',
];
}
}
/**
* Adds general module options (header, footer).
*
* @access public
* @since 6.2
*/
public function set_header_options() {
if ( 'header' === $this->template_type ) {
$this->sections['template']['fields']['awb_header_bg_color'] = [
'id' => 'awb_header_bg_color',
'label' => esc_attr__( 'Header Background Color', 'Avada' ),
'description' => esc_html__( 'Select the background color for the header area.', 'fusion-builder' ),
'dependency' => [],
'type' => 'color-alpha',
'default' => '#ffffff',
'css_vars' => [
[
'name' => '--awb_header_bg_color',
'element' => '.fusion-tb-header',
'callback' => [ 'sanitize_color' ],
],
],
];
$this->sections['template']['fields']['position'] = [
'id' => 'position',
'label' => esc_attr__( 'Header Position', 'Avada' ),
'description' => esc_html__( 'Select the position for the header.', 'fusion-builder' ),
'dependency' => [],
'type' => 'radio-buttonset',
'choices' => [
'' => esc_attr__( 'Top', 'Avada' ),
'left' => esc_attr__( 'Left', 'Avada' ),
'right' => esc_attr__( 'Right', 'Avada' ),
],
'default' => '',
'output' => [
[
'element' => 'helperElement',
'js_callback' => [
'awbHeaderPosition',
],
'sanitize_callback' => '__return_empty_string',
],
],
];
$this->sections['template']['fields']['side_header_width'] = [
'id' => 'side_header_width',
'label' => esc_attr__( 'Side Header Width', 'Avada' ),
'description' => esc_attr__( 'Select the width for the side header.', 'Avada' ),
'type' => 'slider',
'default' => '200',
'choices' => [
'min' => '0',
'max' => '500',
'step' => '1',
],
'css_vars' => [
[
'name' => '--side_header_width',
'element' => '.fusion-tb-header,#wrapper',
'value_pattern' => '$px',
],
[
'name' => '--side_header_width-int',
'element' => '.fusion-tb-header,#wrapper',
],
],
'dependency' => [
[
'field' => 'position',
'value' => '',
'comparison' => '!=',
],
],
];
$this->sections['template']['fields']['header_breakpoint'] = [
'type' => 'radio-buttonset',
'id' => 'header_breakpoint',
'label' => esc_attr__( 'Side Header Breakpoint', 'Avada' ),
/* translators: Global Options link. */
'description' => esc_html__( 'Select the breakpoint for when the side header should move to the top of the page.', 'Avada' ),
'choices' => [
'never' => esc_attr__( 'Never', 'fusion-builder' ),
'small' => esc_attr__( 'Small', 'fusion-builder' ),
'medium' => esc_attr__( 'Medium', 'fusion-builder' ),
'custom' => esc_attr__( 'Custom', 'fusion-builder' ),
],
'default' => 'small',
'dependency' => [
[
'field' => 'position',
'value' => '',
'comparison' => '!=',
],
],
'output' => [
[
'element' => 'helperElement',
'js_callback' => [
'awbHeaderBreakpoint',
],
'sanitize_callback' => '__return_empty_string',
],
],
];
$this->sections['template']['fields']['header_custom_breakpoint'] = [
'type' => 'slider',
'id' => 'header_custom_breakpoint',
'label' => esc_attr__( 'Custom Breakpoint', 'Avada' ),
/* translators: Global Options link. */
'description' => esc_html__( 'Select the viewport width for when the side header should move to the top of the page.', 'Avada' ),
'choices' => [
'min' => '0',
'max' => '2000',
'step' => '1',
],
'default' => '800',
'dependency' => [
[
'field' => 'position',
'value' => '',
'comparison' => '!=',
],
[
'field' => 'header_breakpoint',
'value' => 'custom',
'comparison' => '==',
],
],
'output' => [
[
'element' => 'helperElement',
'js_callback' => [
'awbCustomHeaderBreakpoint',
],
'sanitize_callback' => '__return_empty_string',
],
],
];
}
}
/**
* Gets a taxonomy for a post-type.
*
* @access public
* @since 6.2.0
* @param string $post_type The post-type.
* @return array Returns an array of taxonomies.
*/
public function get_taxonomy( $post_type ) {
if ( ! isset( $this->tmp['taxonomy'] ) ) {
$this->tmp['taxonomy'] = [];
}
if ( ! isset( $this->tmp['taxonomy'][ $post_type ] ) ) {
$this->tmp['taxonomy'][ $post_type ] = get_object_taxonomies( $post_type, 'objects' );
}
return $this->tmp['taxonomy'][ $post_type ];
}
/**
* Retrieve the options.
*
* @access public
* @since 6.2
*/
public function get_options() {
return $this->sections;
}
}
/**
* Template settings
*
* @param array $sections An array of our sections.
* @return array
*/
function avada_page_options_tab_template( $sections ) {
$template_options = new Avada_Template_Page_Options( $sections );
return $template_options->get_options();
}
/* Omit closing PHP tag to avoid "Headers already sent" issues. */