JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbrpath( 'MODULES_DIR', 'automapper/class-vc-automap-model.php' ); require_once vc_manager()->path( 'MODULES_DIR', 'automapper/class-vc-automapper-module-settings.php' ); /** * Module entry point. * * @since 7.7 */ class Vc_Automapper { /** * Is automapper disabled. * * @depreacted since 7.7 * @var bool */ protected static $disabled = false; /** * Settings object. * * @since 7.7 * @var Vc_Automapper_Module_Settings */ public $settings; /** * Suffix for shortcodes * * @var string */ public static $shortcode_suffix = '-vc-automapper-'; /** * Vc_Automapper constructor. * * @since 8.0 */ public function __construct() { $this->settings = new Vc_Automapper_Module_Settings(); $this->settings->init(); } /** * Init module implementation. * * @since 7.7 */ public function init() { $this->add_ajax_actions(); is_admin() && ( strpos( (string) vc_request_param( 'action' ), 'vc_automapper' ) !== false || 'vc-automapper' === vc_get_param( 'page' ) ) && add_action( 'admin_init', [ $this, 'automapper_init' ] ); add_action( 'vc_after_mapping', [ $this, 'map', ] ); add_filter( 'the_content', [ $this, 'clear_shortcode_suffix', ], 10 ); add_filter( 'vc_fe_render_shortcode', [ $this, 'clear_render_shortcode_suffix', ] ); add_filter( 'vc_clear_shortcode_suffix', [ $this, 'clear_output_shortcode_suffix', ] ); } /** * Init automapper module. * * @since 7.7 */ public function automapper_init() { if ( vc_user_access()->wpAny( 'manage_options' )->part( 'settings' )->can( 'vc-automapper-tab' )->get() ) { vc_automapper()->add_ajax_actions(); } } /** * Init ajax module implementation. * * @since 7.7 */ public function add_ajax_actions() { add_action( 'wp_ajax_vc_automapper_create', array( $this, 'create', ) ); add_action( 'wp_ajax_vc_automapper_read', array( $this, 'read', ) ); add_action( 'wp_ajax_vc_automapper_update', array( $this, 'update', ) ); add_action( 'wp_ajax_vc_automapper_delete', array( $this, 'delete', ) ); return $this; } /** * Builds html for Automapper CRUD like administration block * * @since 7.7 * @return bool */ public function render_html() { ?>

render_templates(); ?> < type="text/html" id="vc_automapper-add-form-tpl">
> < type="text/html" id="vc_automapper-item-complex-tpl">

{{ name }}

> < type="text/html" id="vc_automapper-form-tpl">
{{{ shortcode_preview }}}

esc_html__( 'Comma separated categories names', 'js_composer' ) ] ); // phpcs:ignore if ( is_string( $category_info ) ) { echo $category_info; } ?>

+
> < type="text/html" id="vc_atm-form-param-tpl">
<# if ( 'content' === param_name) { #>
<# } else { #> esc_html__( 'Please use only letters, numbers and underscore.', 'js_composer' ) ] ); // phpcs:ignore if ( is_string( $param_name_info ) ) { echo $param_name_info; } ?>
<# } #>
esc_html__( 'Heading for field in shortcode edit form.', 'js_composer' ) ] ); // phpcs:ignore if ( is_string( $heading_info ) ) { echo $heading_info; } ?>
disabled="disabled" <# } #>>
esc_html__( 'Field type for shortcode edit form.', 'js_composer' ) ] ); // phpcs:ignore if ( is_string( $field_type_info ) ) { echo $field_type_info; } ?>
esc_html__( 'Default value or list of values for dropdown type (Note: separate by comma).', 'js_composer' ) ] ); // phpcs:ignore if ( is_string( $default_value_info ) ) { echo $default_value_info; } ?>
esc_html__( 'Enter description for parameter.', 'js_composer' ) ] ); // phpcs:ignore if ( is_string( $description_info ) ) { echo $description_info; } ?>
> < type="text/html" id="vc_automapper-item-tpl"> > render_map_form_tpl(); } /** * CRUD create action * * @since 7.7 */ public function create() { if ( ! vc_request_param( '_vcnonce' ) ) { return; } vc_user_access()->checkAdminNonce()->validateDie()->wpAny( 'manage_options' )->validateDie()->part( 'settings' )->can( 'vc-automapper-tab' )->validateDie(); $data = vc_post_param( 'data' ); $shortcode = new Vc_Automap_Model( $data ); $this->result( $shortcode->save() ); } /** * CRUD update action * * @since 7.7 */ public function update() { if ( ! vc_request_param( '_vcnonce' ) ) { return; } vc_user_access()->checkAdminNonce()->validateDie()->wpAny( 'manage_options' )->validateDie()->part( 'settings' )->can( 'vc-automapper-tab' )->validateDie(); $id = (int) vc_post_param( 'id' ); $data = vc_post_param( 'data' ); $shortcode = new Vc_Automap_Model( $id ); if ( ! isset( $data['params'] ) ) { $data['params'] = array(); } $shortcode->set( $data ); $this->result( $shortcode->save() ); } /** * CRUD delete action * * @since 7.7 */ public function delete() { if ( ! vc_request_param( '_vcnonce' ) ) { return; } vc_user_access()->checkAdminNonce()->validateDie()->wpAny( 'manage_options' )->validateDie()->part( 'settings' )->can( 'vc-automapper-tab' )->validateDie(); $id = vc_post_param( 'id' ); $shortcode = new Vc_Automap_Model( $id ); $this->result( $shortcode->delete() ); } /** * CRUD read action * * @since 7.7 */ public function read() { if ( ! vc_request_param( '_vcnonce' ) ) { return; } vc_user_access()->checkAdminNonce()->validateDie()->wpAny( 'manage_options' )->validateDie()->part( 'settings' )->can( 'vc-automapper-tab' )->validateDie(); $this->result( Vc_Automap_Model::findAll() ); } /** * Ajax result output * * @since 7.7 * @param mixed $data */ public function result( $data ) { if ( false !== $data ) { wp_send_json_success( $data ); } else { wp_send_json_error( $data ); } } /** * Setter/Getter for Disabling Automapper * * @depreacted 7.7 * @param bool $disable */ public static function setDisabled( $disable = true ) { // @codingStandardsIgnoreLine _deprecated_function( __METHOD__, '7.7' ); self::$disabled = $disable; } /** * Check automapper is disabled. * * @depreacted 7.7 * @return bool */ public static function disabled() { _deprecated_function( __METHOD__, '7.7' ); return self::$disabled; } /** * Map our custom automapper shortcodes. * * @since 7.7 */ public static function map() { $shortcodes = Vc_Automap_Model::findAll(); foreach ( $shortcodes as $shortcode ) { vc_map( array( 'name' => $shortcode->name, 'base' => self::prepare_shortcode_tags( $shortcode->tag, WPBMap::getShortCodes() ), 'category' => ( new self() )->build_categories_array( $shortcode->category ), 'description' => $shortcode->description, 'params' => ( new self() )->build_params_array( $shortcode->params ), 'show_settings_on_create' => ! empty( $shortcode->params ), 'atm' => true, 'icon' => 'icon-wpb-atm', ) ); } } /** * Adding Visual Composer Custom Shortcode prefix for custom shortcodes to prevent conflicts. * * @since 7.7 * @param string $tag * @param array $shortcodes * @return mixed|string */ public static function prepare_shortcode_tags( $tag, $shortcodes ) { $base_tag = $tag; $counter = 1; while ( isset( $shortcodes[ $tag ] ) ) { $tag = $base_tag . self::$shortcode_suffix . $counter; $counter++; } return $tag; } /** * Clear custom shortcode suffixes from content. * * @since 7.7 * @param string $content * @return array|string|string[]|null */ public function clear_shortcode_suffix( $content ) { return preg_replace( '/(' . self::$shortcode_suffix . '\d+)/', '', $content ); } /** * Clear shortcode suffix on render. * * @since 7.7 * @param array $shortcode * @return mixed */ public function clear_render_shortcode_suffix( $shortcode ) { $shortcode['tag'] = preg_replace( '/(' . self::$shortcode_suffix . '\d+)/', '', $shortcode['tag'] ); $shortcode['string'] = preg_replace( '/(' . self::$shortcode_suffix . '\d+)/', '', $shortcode['string'] ); return $shortcode; } /** * Clear render output suffix. * * @param string $tag * @since 7.7 * @return string */ public function clear_output_shortcode_suffix( $tag ) { return preg_replace( '/(' . self::$shortcode_suffix . '\d+)/', '', $tag ); } /** * Build categories array. * * @since 7.7 * @param string $init_list * @return false|string */ public function build_categories_array( $init_list ) { return explode( ',', preg_replace( '/\,\s+/', ',', trim( $init_list ) ) ); } /** * Build params array. * * @since 7.7 * @param array $init_params * @return array */ public function build_params_array( $init_params ) { $params = array(); if ( is_array( $init_params ) ) { foreach ( $init_params as $param ) { if ( 'dropdown' === $param['type'] ) { $param['value'] = explode( ',', preg_replace( '/\,\s+/', ',', trim( $param['value'] ) ) ); } $param['save_always'] = true; $params[] = $param; } } return $params; } }