navasena/wp-content/themes/thinkai/includes/classes/visual-composer.php

246 lines
4.8 KiB
PHP
Raw Permalink Normal View History

2024-07-31 13:12:38 +07:00
<?php
namespace THINKAI\Includes\Classes;
/**
* Visual Composer array mapper and render the output.
*/
class Visual_Composer {
/**
* [$maps description]
* @var array
*/
protected $maps = array(
'heading1',
'our_services',
'choose_us',
'projects',
'blog',
'testimonial',
'brands',
'slider',
'get_in_touch',
'our_services2',
'services_news',
'circled_services',
'custom_info',
'services_icon',
'our_experts',
'pricing_plan',
'projects2',
'faqs',
'contact_info',
'contact_form',
'map',
'estimated_time',
'pricing_plan2',
'about_us',
'widget_contact',
'useful_links',
'store_hours',
'get_offer',
'header_logo',
'contact_us',
'main_menu',
'simple_info',
'header_button',
'search_box',
'header_contact_info',
'header_social_icons',
'reparing',
'about_us_carousel',
'repair_video',
'problem_fix_form',
'widget_blog',
'widget_newsletter',
'widget_social_profiles',
'funfacts',
'repaired_parallax',
'appointment_banner',
'repair_device',
'best_opertunity',
'simple_banner',
'states',
'repair_model',
'parts_price',
'supported_models',
'branches',
'latest_articles',
'projects3',
'pricing_plans3',
'funfact2',
'services3',
'contact_infobar',
'services4',
'about_us2',
'choose_us2',
'team',
'funfacts3',
'specialized_services',
'services5',
'pricing_plans4',
'blog2',
'call_back',
'sponsors',
'fun_facts_boxes',
'gallery',
'portfolio',
'featured_banner',
'video_banner',
'featured_carousel'
);
/**
* [__construct description]
*/
function __construct() {
if ( ! function_exists( 'vc_map' ) ) {
return;
}
vc_set_default_editor_post_types( array( 'page', 'static_block' ) );
add_action( 'vc_before_init', array( $this, 'init' ) );
}
/**
* VC Map main init
* @return void [description]
*/
function init() {
// set vc as theme.
vc_set_as_theme();
if ( function_exists( 'vc_addshortcode_param' ) ) {
vc_addshortcode_param( 'toggle', array( $this, 'toggle' ) );
}
$dir = get_stylesheet_directory() . '/shortcodes'; // First, set new directory for templates
vc_set_shortcodes_templates_dir( $dir );
// Map the params of existing elements.
$this->map_params();
$maps = apply_filters( 'thinkai_vc_map', $this->maps );
foreach ( $maps as $value) {
$file = $this->get_file( $value );
if ( file_exists( $file ) ) {
$data = include $file;
vc_map( $data );
if ( function_exists( 'wpthinkai_shortcode' ) ) {
$tag = esc_attr( thinkai_set( $data, 'base' ) );
wpthinkai_shortcode( $tag, array( $this, 'output' ) );
}
}
}
}
function output( $atts, $content = null, $tag ) {
$params = $this->shortcodeParams( $tag );
ob_start();
thinkai_template_load( 'shortcodes/' . $tag . '.php', compact( 'atts', 'content', 'tag' ) );
return ob_get_clean();
}
function get_file( $tag ) {
$file = thinkai_template( 'includes/resource/vc_map/'.$tag . '.php' );
$file = apply_filters( "thinkai_vc_map_file_{$tag}", $file );
return $file;
}
/**
* shortcode params from vc array.
*
* @param string $tag shortcode tag
* @return array params
*/
function shortcodeParams( $tag ) {
$file = $this->get_file( $tag );
if ( file_exists( $file ) ) {
$data = include $file;
return thinkai_set( $data, 'params' );
}
return array();
}
function map_params() {
$array = array(
'vc_row',
);
foreach( $array as $file ) {
$file = $this->get_file( $file );
if ( file_exists( $file ) ) {
$data = include $file;
foreach ( $data as $key => $value) {
foreach( $value as $param ) {
vc_add_param( $key, $param );
}
}
}
}
}
/**
* Checkbox shortcode attribute type generator.
*
* @param $settings
* @param string $value
*
* @since 4.4
* @return string - html string.
*/
function toggle( $settings, $value ) {
$output = '';
if ( is_array( $value ) ) {
$value = '';
}
$current_value = strlen( $value ) > 0 ? explode( ',', $value ) : array();
$values = isset( $settings['value'] ) && is_array( $settings['value'] ) ? $settings['value'] : array( esc_html__( 'Yes', 'thinkai' ) => 'true' );
if ( ! empty( $values ) ) {
foreach ( $values as $label => $v ) {
$checked = count( $current_value ) > 0 && in_array( $v, $current_value ) ? ' checked' : '';
$output .= ' <label class="vc_checkbox-label"><input id="'
. $settings['param_name'] . '-' . $v . '" value="'
. $v . '" class="wpb_vc_param_value tgl tgl-ios '
. $settings['param_name'] . ' ' . $settings['type'] . '" type="checkbox" name="'
. $settings['param_name'] . '"'
. $checked . '> '
. '<span class="tgl-btn" for="cb2"></span>'
. $label . '</label>';
}
}
return $output;
}
}