<?php if ( ! defined( 'ABSPATH' ) ) { die( '-1' ); } /** * Ninja Forms vendor * @since 4.4 */ class Vc_Vendor_NinjaForms { private static $ninjaCount; /** * Implement interface, map ninja forms shortcode * @since 4.4 */ public function load() { vc_lean_map( 'ninja_form', array( $this, 'addShortcodeSettings', ) ); add_filter( 'vc_frontend_editor_load_shortcode_ajax_output', array( $this, 'replaceIds', ) ); } /** * Mapping settings for lean method. * * @param $tag * * @return array * @since 4.9 * */ public function addShortcodeSettings( $tag ) { $ninja_forms = $this->get_forms(); return array( 'base' => $tag, 'name' => esc_html__( 'Ninja Forms', 'js_composer' ), 'icon' => 'icon-wpb-ninjaforms', 'category' => esc_html__( 'Content', 'js_composer' ), 'description' => esc_html__( 'Place Ninja Form', 'js_composer' ), 'params' => array( array( 'type' => 'dropdown', 'heading' => esc_html__( 'Select ninja form', 'js_composer' ), 'param_name' => 'id', 'value' => $ninja_forms, 'save_always' => true, 'description' => esc_html__( 'Choose previously created ninja form from the drop down list.', 'js_composer' ), ), ), ); } /** * @return array */ private function get_forms() { $ninja_forms = array(); if ( $this->is_ninja_forms_three() ) { $ninja_forms_data = ninja_forms_get_all_forms(); if ( ! empty( $ninja_forms_data ) ) { // Fill array with Name=>Value(ID) foreach ( $ninja_forms_data as $key => $value ) { if ( is_array( $value ) ) { $ninja_forms[ $value['name'] ] = $value['id']; } } } } else { $ninja_forms_data = Ninja_Forms()->form()->get_forms(); if ( ! empty( $ninja_forms_data ) ) { // Fill array with Name=>Value(ID) foreach ( $ninja_forms_data as $form ) { $ninja_forms[ $form->get_setting( 'title' ) ] = $form->get_id(); } } } return $ninja_forms; } /** * @return bool */ private function is_ninja_forms_three() { return ( version_compare( get_option( 'ninja_forms_version', '0.0.0' ), '3.0', '<' ) || get_option( 'ninja_forms_load_deprecated', false ) ); } /** * @param $output * @return mixed */ public function replaceIds( $output ) { if ( is_null( self::$ninjaCount ) ) { self::$ninjaCount = 1; } else { self::$ninjaCount ++; } $patterns = array( '(nf-form-)(\d+)(-cont)', '(nf-form-title-)(\d+)()', '(nf-form-errors-)(\d+)()', '(form.id\s*=\s*\')(\d+)(\')', ); // phpcs:ignore $time = time() . self::$ninjaCount . rand( 100, 999 ); foreach ( $patterns as $pattern ) { $output = preg_replace( '/' . $pattern . '/', '${1}' . $time . '${3}', $output ); } $replaceTo = <<<JS if (typeof nfForms !== 'undefined') { nfForms = nfForms.filter( function(item) { if (item && item.id) { return document.querySelector('#nf-form-' + item.id + '-cont') } }) } JS; $response = str_replace( 'var nfForms', $replaceTo . ';var nfForms', $output ); return $response; } }