735 lines
34 KiB
PHP
735 lines
34 KiB
PHP
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
|
|
|
final class NF_Display_Render
|
|
{
|
|
protected static $render_instance_count = array();
|
|
|
|
protected static $loaded_templates = array(
|
|
'app-layout',
|
|
'app-before-form',
|
|
'app-after-form',
|
|
'app-before-fields',
|
|
'app-after-fields',
|
|
'app-before-field',
|
|
'app-after-field',
|
|
'form-layout',
|
|
'form-hp',
|
|
'field-layout',
|
|
'field-before',
|
|
'field-after',
|
|
'fields-wrap',
|
|
'fields-wrap-no-label',
|
|
'fields-wrap-no-container',
|
|
'fields-label',
|
|
'fields-error',
|
|
'form-error',
|
|
'field-input-limit',
|
|
'field-null'
|
|
);
|
|
|
|
public static $use_test_values = FALSE;
|
|
|
|
protected static $form_uses_recaptcha = array();
|
|
protected static $form_uses_datepicker = array();
|
|
protected static $form_uses_inputmask = array();
|
|
protected static $form_uses_currencymask = array();
|
|
protected static $form_uses_rte = array();
|
|
protected static $form_uses_textarea_media = array();
|
|
protected static $form_uses_helptext = array();
|
|
protected static $form_uses_starrating = array();
|
|
|
|
public static function localize( $form_id )
|
|
{
|
|
global $wp_locale;
|
|
$form_id = absint( $form_id );
|
|
|
|
/**
|
|
* Action that passes the form ID as a parameter.
|
|
* @since 3.2.2
|
|
*/
|
|
do_action( 'nf_get_form_id', $form_id );
|
|
|
|
$capability = apply_filters( 'ninja_forms_display_test_values_capabilities', 'read' );
|
|
if( isset( $_GET[ 'ninja_forms_test_values' ] ) && current_user_can( $capability ) ){
|
|
self::$use_test_values = TRUE;
|
|
}
|
|
|
|
if( ! has_action( 'wp_footer', 'NF_Display_Render::output_templates', 9999 ) ){
|
|
add_action( 'wp_footer', 'NF_Display_Render::output_templates', 9999 );
|
|
}
|
|
$form = Ninja_Forms()->form( $form_id )->get();
|
|
|
|
$settings = $form->get_settings();
|
|
|
|
foreach( $settings as $name => $value ){
|
|
if( ! in_array(
|
|
$name,
|
|
array(
|
|
'changeEmailErrorMsg',
|
|
'changeDateErrorMsg',
|
|
'confirmFieldErrorMsg',
|
|
'fieldNumberNumMinError',
|
|
'fieldNumberNumMaxError',
|
|
'fieldNumberIncrementBy',
|
|
'formErrorsCorrectErrors',
|
|
'validateRequiredField',
|
|
'honeypotHoneypotError',
|
|
'fieldsMarkedRequired',
|
|
)
|
|
) ) continue;
|
|
|
|
if( $value ) continue;
|
|
|
|
unset( $settings[ $name ] );
|
|
}
|
|
|
|
// Remove the embed_form setting to avoid pagebuilder conflicts.
|
|
$settings[ 'embed_form' ] = '';
|
|
|
|
$settings = array_merge( Ninja_Forms::config( 'i18nFrontEnd' ), $settings );
|
|
$settings = apply_filters( 'ninja_forms_display_form_settings', $settings, $form_id );
|
|
|
|
$form->update_settings( $settings );
|
|
|
|
if( $form->get_setting( 'logged_in' ) && ! is_user_logged_in() ){
|
|
echo do_shortcode( $form->get_setting( 'not_logged_in_msg' ));
|
|
return;
|
|
}
|
|
|
|
if( $form->get_setting( 'sub_limit_number' ) && ! empty($form->get_setting( 'sub_limit_number' )) ){
|
|
global $wpdb;
|
|
$result = $wpdb->get_row( "SELECT COUNT(DISTINCT(p.ID)) AS count FROM `$wpdb->posts` AS p
|
|
LEFT JOIN `$wpdb->postmeta` AS m
|
|
ON p.ID = m.post_id
|
|
WHERE m.meta_key = '_form_id'
|
|
AND m.meta_value = $form_id
|
|
AND p.post_status = 'publish'");
|
|
|
|
if( intval( $result->count ) >= $form->get_setting( 'sub_limit_number' ) ) {
|
|
echo do_shortcode( apply_filters( 'nf_sub_limit_reached_msg', $form->get_setting( 'sub_limit_msg' ), $form_id ));
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Get our maintenance value out of the DB.
|
|
$maintenance = WPN_Helper::form_in_maintenance( $form_id );
|
|
|
|
// If maintenance isn't empty and the bool is set to 1 then..
|
|
if( true == $maintenance ) {
|
|
// Set a filterable maintenance message and echo it out.
|
|
$maintenance_msg = apply_filters( 'nf_maintenance_message', esc_html__( 'This form is currently undergoing maintenance. Please try again later.', 'ninja-forms' ) );
|
|
echo $maintenance_msg;
|
|
|
|
// bail.
|
|
return false;
|
|
}
|
|
|
|
|
|
if( ! apply_filters( 'ninja_forms_display_show_form', true, $form_id, $form ) ) return;
|
|
|
|
$currency = $form->get_setting( 'currency', Ninja_Forms()->get_setting( 'currency' ) );
|
|
$currency_symbol = Ninja_Forms::config( 'CurrencySymbol' );
|
|
$form->update_setting( 'currency_symbol', ( isset( $currency_symbol[ $currency ] ) ) ? $currency_symbol[ $currency ] : '' );
|
|
|
|
$title = apply_filters( 'ninja_forms_form_title', $form->get_setting( 'title' ), $form_id );
|
|
$form->update_setting( 'title', $title );
|
|
|
|
$before_form = apply_filters( 'ninja_forms_display_before_form', '', $form_id );
|
|
$form->update_setting( 'beforeForm', $before_form );
|
|
|
|
$before_fields = apply_filters( 'ninja_forms_display_before_fields', '', $form_id );
|
|
$form->update_setting( 'beforeFields', $before_fields );
|
|
|
|
$after_fields = apply_filters( 'ninja_forms_display_after_fields', '', $form_id );
|
|
$form->update_setting( 'afterFields', $after_fields );
|
|
|
|
$after_form = apply_filters( 'ninja_forms_display_after_form', '', $form_id );
|
|
$form->update_setting( 'afterForm', $after_form );
|
|
|
|
$form_fields = Ninja_Forms()->form( $form_id )->get_fields();
|
|
$fields = array();
|
|
|
|
if( empty( $form_fields ) ){
|
|
echo esc_html__( 'No Fields Found.', 'ninja-forms' );
|
|
} else {
|
|
|
|
// TODO: Replace unique field key checks with a refactored model/factory.
|
|
$unique_field_keys = array();
|
|
$cache_updated = false;
|
|
|
|
foreach ($form_fields as $field) {
|
|
|
|
if( is_object( $field ) ) {
|
|
$field = array(
|
|
'id' => $field->get_id(),
|
|
'settings' => $field->get_settings()
|
|
);
|
|
}
|
|
|
|
$field_id = $field[ 'id' ];
|
|
|
|
|
|
/*
|
|
* Duplicate field check.
|
|
* TODO: Replace unique field key checks with a refactored model/factory.
|
|
*/
|
|
$field_key = $field[ 'settings' ][ 'key' ];
|
|
|
|
if( in_array( $field_key, $unique_field_keys ) || '' == $field_key ){
|
|
|
|
// Delete the field.
|
|
Ninja_Forms()->request( 'delete-field' )->data( array( 'field_id' => $field_id ) )->dispatch();
|
|
|
|
// Remove the field from cache.
|
|
if( $form_cache ) {
|
|
if( isset( $form_cache[ 'fields' ] ) ){
|
|
foreach( $form_cache[ 'fields' ] as $cached_field_key => $cached_field ){
|
|
if( ! isset( $cached_field[ 'id' ] ) ) continue;
|
|
if( $field_id != $cached_field[ 'id' ] ) continue;
|
|
|
|
// Flag cache to update.
|
|
$cache_updated = true;
|
|
|
|
unset( $form_cache[ 'fields' ][ $cached_field_key ] ); // Remove the field.
|
|
}
|
|
}
|
|
}
|
|
|
|
continue; // Skip the duplicate field.
|
|
}
|
|
array_push( $unique_field_keys, $field_key ); // Log unique key.
|
|
/* END Duplicate field check. */
|
|
|
|
$field_type = $field[ 'settings' ][ 'type' ];
|
|
|
|
if( ! is_string( $field_type ) ) continue;
|
|
|
|
if( ! isset( Ninja_Forms()->fields[ $field_type ] ) ) {
|
|
$unknown_field = NF_Fields_Unknown::create( $field );
|
|
$field = array(
|
|
'settings' => $unknown_field->get_settings(),
|
|
'id' => $unknown_field->get_id()
|
|
);
|
|
$field_type = $field[ 'settings' ][ 'type' ];
|
|
}
|
|
|
|
$field = apply_filters('ninja_forms_localize_fields', $field);
|
|
$field = apply_filters('ninja_forms_localize_field_' . $field_type, $field);
|
|
|
|
$field_class = Ninja_Forms()->fields[$field_type];
|
|
|
|
if (self::$use_test_values) {
|
|
$field[ 'value' ] = $field_class->get_test_value();
|
|
}
|
|
|
|
// Hide the label on invisible reCAPTCHA fields
|
|
if ( 'recaptcha' === $field[ 'settings' ][ 'type' ] && 'invisible' === $field[ 'settings' ][ 'size' ] ) {
|
|
$field[ 'settings' ][ 'label_pos' ] = 'hidden';
|
|
}
|
|
|
|
// Copy field ID into the field settings array for use in localized data.
|
|
$field[ 'settings' ][ 'id' ] = $field[ 'id' ];
|
|
|
|
|
|
/*
|
|
* TODO: For backwards compatibility, run the original action, get contents from the output buffer, and return the contents through the filter. Also display a PHP Notice for a deprecate filter.
|
|
*/
|
|
|
|
$display_before = apply_filters( 'ninja_forms_display_before_field_type_' . $field[ 'settings' ][ 'type' ], '' );
|
|
$display_before = apply_filters( 'ninja_forms_display_before_field_key_' . $field[ 'settings' ][ 'key' ], $display_before );
|
|
$field[ 'settings' ][ 'beforeField' ] = $display_before;
|
|
|
|
$display_after = apply_filters( 'ninja_forms_display_after_field_type_' . $field[ 'settings' ][ 'type' ], '' );
|
|
$display_after = apply_filters( 'ninja_forms_display_after_field_key_' . $field[ 'settings' ][ 'key' ], $display_after );
|
|
$field[ 'settings' ][ 'afterField' ] = $display_after;
|
|
|
|
$templates = $field_class->get_templates();
|
|
|
|
if (!array($templates)) {
|
|
$templates = array($templates);
|
|
}
|
|
|
|
foreach ($templates as $template) {
|
|
self::load_template('fields-' . $template);
|
|
}
|
|
|
|
$settings = $field[ 'settings' ];
|
|
// Scrub any values that might be stored in data. Defaults will set these later.
|
|
$settings['value'] = '';
|
|
foreach ($settings as $key => $setting) {
|
|
if (is_numeric($setting) && 'custom_mask' != $key )
|
|
$settings[$key] =
|
|
floatval($setting);
|
|
}
|
|
|
|
if( ! isset( $settings[ 'label_pos' ] ) || 'default' == $settings[ 'label_pos' ] ){
|
|
$settings[ 'label_pos' ] = $form->get_setting( 'default_label_pos' );
|
|
}
|
|
|
|
$settings[ 'parentType' ] = $field_class->get_parent_type();
|
|
|
|
if( 'list' == $settings[ 'parentType' ] && isset( $settings[ 'options' ] ) && is_array( $settings[ 'options' ] ) ){
|
|
$settings[ 'options' ] = apply_filters( 'ninja_forms_render_options', $settings[ 'options' ], $settings );
|
|
$settings[ 'options' ] = apply_filters( 'ninja_forms_render_options_' . $field_type, $settings[ 'options' ], $settings );
|
|
}
|
|
|
|
$default_value = ( isset( $settings[ 'default' ] ) ) ? $settings[ 'default' ] : null;
|
|
$default_value = apply_filters('ninja_forms_render_default_value', $default_value, $field_type, $settings);
|
|
if ( $default_value ) {
|
|
|
|
$default_value = preg_replace( '/{[^}]}/', '', $default_value );
|
|
|
|
if ($default_value) {
|
|
$settings['value'] = $default_value;
|
|
|
|
if( ! is_array( $default_value ) ) {
|
|
ob_start();
|
|
do_shortcode( $settings['value'] );
|
|
$ob = ob_get_clean();
|
|
|
|
if( ! $ob ) {
|
|
$settings['value'] = do_shortcode( $settings['value'] );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$thousands_sep = $wp_locale->number_format[ 'thousands_sep'];
|
|
$decimal_point = $wp_locale->number_format[ 'decimal_point' ];
|
|
|
|
// TODO: Find a better way to do this.
|
|
if ('shipping' == $settings['type']) {
|
|
$settings[ 'shipping_cost' ] = preg_replace ('/[^\d,\.]/', '', $settings[ 'shipping_cost' ] );
|
|
$settings[ 'shipping_cost' ] = str_replace( Ninja_Forms()->get_setting( 'currency_symbol' ), '', $settings[ 'shipping_cost' ] );
|
|
|
|
$settings[ 'shipping_cost' ] = str_replace( $decimal_point, '||', $settings[ 'shipping_cost' ] );
|
|
$settings[ 'shipping_cost' ] = str_replace( $thousands_sep, '', $settings[ 'shipping_cost' ] );
|
|
$settings[ 'shipping_cost' ] = str_replace( '||', '.', $settings[ 'shipping_cost' ] );
|
|
} elseif ('product' == $settings['type']) {
|
|
$settings['product_price'] = preg_replace ('/[^\d,\.]/', '', $settings[ 'product_price' ] );
|
|
$settings['product_price'] = str_replace( Ninja_Forms()->get_setting( 'currency_symbol' ), '', $settings['product_price']);
|
|
|
|
$settings[ 'product_price' ] = str_replace( $decimal_point, '||', $settings[ 'product_price' ] );
|
|
$settings[ 'product_price' ] = str_replace( $thousands_sep, '', $settings[ 'product_price' ] );
|
|
$settings[ 'product_price' ] = str_replace( '||', '.', $settings[ 'product_price' ] );
|
|
|
|
} elseif ('total' == $settings['type'] && isset($settings['value'])) {
|
|
if ( empty( $settings['value'] ) ) $settings['value'] = 0;
|
|
$settings['value'] = number_format($settings['value'], 2);
|
|
}
|
|
|
|
$settings['element_templates'] = $templates;
|
|
$settings['old_classname'] = $field_class->get_old_classname();
|
|
$settings['wrap_template'] = $field_class->get_wrap_template();
|
|
|
|
$fields[] = apply_filters( 'ninja_forms_localize_field_settings_' . $field_type, $settings, $form );
|
|
|
|
if( 'recaptcha' == $field[ 'settings' ][ 'type' ] ){
|
|
array_push( self::$form_uses_recaptcha, $form_id );
|
|
}
|
|
if( 'date' == $field[ 'settings' ][ 'type' ] || self::checkRepeaterChildType($field, 'date') ){
|
|
array_push( self::$form_uses_datepicker, $form_id );
|
|
}
|
|
if( 'starrating' == $field[ 'settings' ][ 'type' ] || self::checkRepeaterChildType($field, "starrating")){
|
|
array_push( self::$form_uses_starrating, $form_id );
|
|
}
|
|
if( isset( $field[ 'settings' ][ 'mask' ] ) && $field[ 'settings' ][ 'mask' ] || self::checkRepeaterChildSetting($field, "mask", null) ){
|
|
array_push( self::$form_uses_inputmask, $form_id );
|
|
}
|
|
if( isset( $field[ 'settings' ][ 'mask' ] ) && 'currency' == $field[ 'settings' ][ 'mask' ] || self::checkRepeaterChildSetting($field, "mask", "currency") ){
|
|
array_push( self::$form_uses_currencymask, $form_id );
|
|
}
|
|
if( isset( $field[ 'settings' ][ 'textarea_rte' ] ) && $field[ 'settings' ][ 'textarea_rte' ] || self::checkRepeaterChildSetting($field, "textarea_rte", null) ){
|
|
array_push( self::$form_uses_rte, $form_id );
|
|
}
|
|
if( isset( $field[ 'settings' ][ 'textarea_media' ] ) && $field[ 'settings' ][ 'textarea_media' ] || self::checkRepeaterChildSetting($field, "textarea_media", null) ){
|
|
array_push( self::$form_uses_textarea_media, $form_id );
|
|
}
|
|
// strip all tags except image tags
|
|
if( isset( $field[ 'settings' ][ 'help_text' ] ) &&
|
|
strip_tags( $field[ 'settings' ][ 'help_text' ], '<img>'
|
|
) ){
|
|
array_push( self::$form_uses_helptext, $form_id );
|
|
}
|
|
}
|
|
|
|
if( $cache_updated ) {
|
|
WPN_Helper::update_nf_cache( $form_id, $form_cache ); // Update form cache without duplicate fields.
|
|
}
|
|
}
|
|
|
|
$fields = apply_filters( 'ninja_forms_display_fields', $fields, $form_id );
|
|
|
|
if(!isset($_GET['nf_preview_form'])){
|
|
/* Render Instance Fix */
|
|
$instance_id = $form_id;
|
|
if( ! isset(self::$render_instance_count[$form_id]) ) self::$render_instance_count[$form_id] = 0;
|
|
if(self::$render_instance_count[$form_id]) {
|
|
$instance_id .= '_' . self::$render_instance_count[$form_id];
|
|
foreach( $fields as $id => $field ) {
|
|
$fields[$id]['id'] .= '_' . self::$render_instance_count[$form_id];
|
|
}
|
|
}
|
|
self::$render_instance_count[$form_id]++;
|
|
$form_id = $instance_id;
|
|
/* END Render Instance Fix */
|
|
}
|
|
|
|
// Output Form Container
|
|
do_action( 'ninja_forms_before_container', $form_id, $form->get_settings(), $form_fields );
|
|
Ninja_Forms::template( 'display-form-container.html.php', compact( 'form_id' ) );
|
|
|
|
$form_id = "$form_id";
|
|
|
|
?>
|
|
<!-- TODO: Move to Template File. -->
|
|
<script>var formDisplay=1;var nfForms=nfForms||[];var form=[];form.id='<?php echo $form_id; ?>';form.settings=<?php echo wp_json_encode( $form->get_settings() ); ?>;form.fields=<?php echo wp_json_encode( $fields ); ?>;nfForms.push(form);</script>
|
|
<?php
|
|
self::enqueue_scripts( $form_id );
|
|
}
|
|
|
|
public static function checkRepeaterChildType($field, $type)
|
|
{
|
|
$return = [];
|
|
if($field["settings"]["type"] === "repeater" && !empty($field["settings"]["fields"])){
|
|
foreach($field["settings"]["fields"] as $child){
|
|
array_push( $return, isset( $child[ 'type' ] ) && $type === $child[ 'type' ] );
|
|
}
|
|
}
|
|
return in_array(true, $return, true);
|
|
}
|
|
|
|
public static function checkRepeaterChildSetting($field, $setting, $value)
|
|
{
|
|
$return = [];
|
|
if($field["settings"]["type"] === "repeater" && !empty($field["settings"]["fields"])){
|
|
foreach($field["settings"]["fields"] as $child){
|
|
if( $value !== null ){
|
|
array_push( $return, isset( $child[ $setting ] ) && $value === $child[ $setting ] );
|
|
} else {
|
|
array_push( $return, isset( $child[ $setting ] ) && $child[ $setting ] );
|
|
}
|
|
|
|
}
|
|
}
|
|
return in_array(true, $return, true);
|
|
}
|
|
|
|
public static function localize_preview( $form_id )
|
|
{
|
|
$capability = apply_filters( 'ninja_forms_display_test_values_capabilities', 'read' );
|
|
if( isset( $_GET[ 'ninja_forms_test_values' ] ) && current_user_can( $capability ) ){
|
|
self::$use_test_values = TRUE;
|
|
}
|
|
|
|
add_action( 'wp_footer', 'NF_Display_Render::output_templates', 9999 );
|
|
|
|
$form = get_user_option( 'nf_form_preview_' . $form_id );
|
|
|
|
if( ! $form ){
|
|
self::localize( $form_id );
|
|
return;
|
|
}
|
|
|
|
if( isset( $form[ 'settings' ][ 'logged_in' ] ) && $form[ 'settings' ][ 'logged_in' ] && ! is_user_logged_in() ){
|
|
echo do_shortcode( $form[ 'settings' ][ 'not_logged_in_msg' ]);
|
|
return;
|
|
}
|
|
|
|
$form[ 'settings' ] = array_merge( Ninja_Forms::config( 'i18nFrontEnd' ), $form[ 'settings' ] );
|
|
$form[ 'settings' ] = apply_filters( 'ninja_forms_display_form_settings', $form[ 'settings' ], $form_id );
|
|
|
|
// Remove the embed_form setting to avoid pagebuilder conflicts.
|
|
$form[ 'settings' ][ 'embed_form' ] = '';
|
|
|
|
$form[ 'settings' ][ 'is_preview' ] = TRUE;
|
|
|
|
$currency = ( isset( $form[ 'settings' ][ 'currency' ] ) && $form[ 'settings' ][ 'currency' ] ) ? $form[ 'settings' ][ 'currency' ] : Ninja_Forms()->get_setting( 'currency' ) ;
|
|
$currency_symbol = Ninja_Forms::config( 'CurrencySymbol' );
|
|
$form[ 'settings' ][ 'currency_symbol' ] = ( isset( $currency_symbol[ $currency ] ) ) ? $currency_symbol[ $currency ] : '';
|
|
|
|
$before_form = apply_filters( 'ninja_forms_display_before_form', '', $form_id, TRUE );
|
|
$form[ 'settings' ][ 'beforeForm'] = $before_form;
|
|
|
|
$before_fields = apply_filters( 'ninja_forms_display_before_fields', '', $form_id, TRUE );
|
|
$form[ 'settings' ][ 'beforeFields'] = $before_fields;
|
|
|
|
$after_fields = apply_filters( 'ninja_forms_display_after_fields', '', $form_id, TRUE );
|
|
$form[ 'settings' ][ 'afterFields'] = $after_fields;
|
|
|
|
$after_form = apply_filters( 'ninja_forms_display_after_form', '', $form_id, TRUE );
|
|
$form[ 'settings' ][ 'afterForm'] = $after_form;
|
|
|
|
$fields = array();
|
|
|
|
if( empty( $form['fields'] ) ){
|
|
echo esc_html__( 'No Fields Found.', 'ninja-forms' );
|
|
} else {
|
|
foreach ($form['fields'] as $field_id => $field) {
|
|
|
|
$field_type = $field['settings']['type'];
|
|
// Scrub any values that might be stored in data. Defaults will set these later.
|
|
$field['settings']['value'] = '';
|
|
|
|
if( ! isset( Ninja_Forms()->fields[ $field_type ] ) ) continue;
|
|
if( ! apply_filters( 'ninja_forms_preview_display_type_' . $field_type, TRUE ) ) continue;
|
|
if( ! apply_filters( 'ninja_forms_preview_display_field', $field ) ) continue;
|
|
|
|
$field['settings']['id'] = $field_id;
|
|
|
|
$field = apply_filters('ninja_forms_localize_fields_preview', $field);
|
|
$field = apply_filters('ninja_forms_localize_field_' . $field_type . '_preview', $field);
|
|
|
|
$display_before = apply_filters( 'ninja_forms_display_before_field_type_' . $field['settings'][ 'type' ], '' );
|
|
$display_before = apply_filters( 'ninja_forms_display_before_field_key_' . $field['settings'][ 'key' ], $display_before );
|
|
$field['settings'][ 'beforeField' ] = $display_before;
|
|
|
|
$display_after = apply_filters( 'ninja_forms_display_after_field_type_' . $field['settings'][ 'type' ], '' );
|
|
$display_after = apply_filters( 'ninja_forms_display_after_field_key_' . $field['settings'][ 'key' ], $display_after );
|
|
$field['settings'][ 'afterField' ] = $display_after;
|
|
|
|
foreach ($field['settings'] as $key => $setting) {
|
|
if (is_numeric($setting)) $field['settings'][$key] = floatval($setting);
|
|
}
|
|
|
|
if( ! isset( $field['settings'][ 'label_pos' ] ) || 'default' == $field['settings'][ 'label_pos' ] ){
|
|
if( isset( $form[ 'settings' ][ 'default_label_pos' ] ) ) {
|
|
$field['settings'][ 'label_pos' ] = $form[ 'settings' ][ 'default_label_pos' ];
|
|
}
|
|
}
|
|
|
|
$field_class = Ninja_Forms()->fields[$field_type];
|
|
|
|
$templates = $field_class->get_templates();
|
|
|
|
if (!array($templates)) {
|
|
$templates = array($templates);
|
|
}
|
|
|
|
foreach ($templates as $template) {
|
|
self::load_template('fields-' . $template);
|
|
}
|
|
|
|
if (self::$use_test_values) {
|
|
$field['settings']['value'] = $field_class->get_test_value();
|
|
}
|
|
|
|
$field[ 'settings' ][ 'parentType' ] = $field_class->get_parent_type();
|
|
|
|
if( 'list' == $field[ 'settings' ][ 'parentType' ] && isset( $field['settings'][ 'options' ] ) && is_array( $field['settings'][ 'options' ] ) ){
|
|
$field['settings'][ 'options' ] = apply_filters( 'ninja_forms_render_options', $field['settings'][ 'options' ], $field['settings'] );
|
|
$field['settings'][ 'options' ] = apply_filters( 'ninja_forms_render_options_' . $field['settings'][ 'type' ], $field['settings'][ 'options' ], $field['settings'] );
|
|
}
|
|
|
|
$default_value = ( isset( $field[ 'settings' ][ 'default' ] ) ) ? $field[ 'settings' ][ 'default' ] : null;
|
|
$default_value = apply_filters( 'ninja_forms_render_default_value', $default_value, $field_type, $field[ 'settings' ]);
|
|
if( $default_value ){
|
|
|
|
$default_value = preg_replace( '/{.*}/', '', $default_value );
|
|
|
|
if ($default_value) {
|
|
$field['settings']['value'] = $default_value;
|
|
|
|
if( ! is_array( $default_value ) ) {
|
|
ob_start();
|
|
do_shortcode( $field['settings']['value'] );
|
|
$ob = ob_get_clean();
|
|
|
|
if( ! $ob ) {
|
|
$field['settings']['value'] = do_shortcode( $field['settings']['value'] );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// TODO: Find a better way to do this.
|
|
if ('shipping' == $field['settings']['type']) {
|
|
$field['settings']['shipping_cost'] = preg_replace ('/[^\d,\.]/', '', $field['settings']['shipping_cost'] );
|
|
$field['settings']['shipping_cost'] = str_replace( Ninja_Forms()->get_setting( 'currency_symbol' ), '', $field['settings']['shipping_cost'] );
|
|
$field['settings']['shipping_cost'] = number_format($field['settings']['shipping_cost'], 2);
|
|
} elseif ('product' == $field['settings']['type']) {
|
|
// TODO: Does the currency marker need to stripped here?
|
|
$field['settings']['product_price'] = preg_replace ('/[^\d,\.]/', '', $field['settings']['product_price'] );
|
|
$field['settings']['product_price'] = str_replace( Ninja_Forms()->get_setting( 'currency_symbol' ), '', $field['settings']['product_price'] );
|
|
$field['settings']['product_price'] = number_format($field['settings']['product_price'], 2);
|
|
} elseif ('total' == $field['settings']['type']) {
|
|
if( ! isset( $field[ 'settings' ][ 'value' ] ) ) $field[ 'settings' ][ 'value' ] = 0;
|
|
$field['settings']['value'] = number_format($field['settings']['value'], 2);
|
|
}
|
|
|
|
$field['settings']['element_templates'] = $templates;
|
|
$field['settings']['old_classname'] = $field_class->get_old_classname();
|
|
$field['settings']['wrap_template'] = $field_class->get_wrap_template();
|
|
|
|
$fields[] = apply_filters( 'ninja_forms_localize_field_settings_' . $field_type, $field['settings'], $form );
|
|
}
|
|
}
|
|
|
|
// Output Form Container
|
|
do_action( 'ninja_forms_before_container_preview', $form_id, $form[ 'settings' ], $fields );
|
|
Ninja_Forms::template( 'display-form-container.html.php', compact( 'form_id' ) );
|
|
|
|
?>
|
|
<!-- TODO: Move to Template File. -->
|
|
<script>
|
|
// Maybe initialize nfForms object
|
|
var nfForms = nfForms || [];
|
|
|
|
// Build Form Data
|
|
var form = [];
|
|
form.id = '<?php echo $form['id']; ?>';
|
|
form.settings = JSON.parse( '<?php echo WPN_Helper::addslashes( wp_json_encode( $form['settings'] ) ); ?>' );
|
|
|
|
form.fields = JSON.parse( '<?php echo WPN_Helper::addslashes( wp_json_encode( $fields ) ); ?>' );
|
|
|
|
// Add Form Data to nfForms object
|
|
nfForms.push( form );
|
|
</script>
|
|
|
|
<?php
|
|
self::enqueue_scripts( $form_id, true );
|
|
}
|
|
|
|
public static function enqueue_scripts( $form_id, $is_preview = false )
|
|
{
|
|
global $wp_locale;
|
|
$form = Ninja_Forms()->form( $form_id )->get();
|
|
|
|
$ver = Ninja_Forms::VERSION;
|
|
$js_dir = Ninja_Forms::$url . 'assets/js/min/';
|
|
$css_dir = Ninja_Forms::$url . 'assets/css/';
|
|
|
|
self::enqueue_styles_display( $css_dir );
|
|
|
|
if( $is_preview || in_array( $form_id, self::$form_uses_recaptcha ) ) {
|
|
$recaptcha_lang = Ninja_Forms()->get_setting('recaptcha_lang');
|
|
wp_enqueue_script('nf-google-recaptcha', 'https://www.google.com/recaptcha/api.js?hl=' . $recaptcha_lang . '&onload=nfRenderRecaptcha&render=explicit', array( 'jquery', 'nf-front-end-deps' ), $ver, TRUE );
|
|
}
|
|
|
|
if( $is_preview || in_array( $form_id, self::$form_uses_datepicker ) ) {
|
|
wp_enqueue_style( 'nf-flatpickr', $css_dir . 'flatpickr.css', $ver );
|
|
wp_enqueue_script('nf-front-end--datepicker', $js_dir . 'front-end--datepicker.min.js', array( 'jquery', 'nf-front-end' ), $ver );
|
|
}
|
|
|
|
if( $is_preview || in_array( $form_id, self::$form_uses_inputmask ) ) {
|
|
wp_enqueue_script('nf-front-end--inputmask', $js_dir . 'front-end--inputmask.min.js', array( 'jquery' ), $ver );
|
|
}
|
|
|
|
if( $is_preview || in_array( $form_id, self::$form_uses_currencymask ) ) {
|
|
wp_enqueue_script('nf-front-end--currencymask', $js_dir . 'front-end--autonumeric.min.js', array( 'jquery' ), $ver );
|
|
}
|
|
|
|
if( $is_preview || in_array( $form_id, self::$form_uses_rte ) ) {
|
|
if( $is_preview || in_array( $form_id, self::$form_uses_textarea_media ) ) {
|
|
wp_enqueue_media();
|
|
}
|
|
|
|
wp_enqueue_style( 'summernote', $css_dir . 'summernote.css' , $ver );
|
|
wp_enqueue_style( 'codemirror', $css_dir . 'codemirror.css' , $ver );
|
|
wp_enqueue_style( 'codemirror-monokai', $css_dir . 'monokai-theme.css', $ver );
|
|
wp_enqueue_script('nf-front-end--rte', $js_dir . 'front-end--rte.min.js', array( 'jquery' ), $ver );
|
|
}
|
|
|
|
if( $is_preview || in_array( $form_id, self::$form_uses_helptext ) ) {
|
|
wp_enqueue_style( 'jBox', $css_dir . 'jBox.css', $ver );
|
|
wp_enqueue_script('nf-front-end--helptext', $js_dir . 'front-end--helptext.min.js', array( 'jquery' ), $ver );
|
|
}
|
|
|
|
if( $is_preview || in_array( $form_id, self::$form_uses_starrating ) ) {
|
|
wp_enqueue_style( 'rating', $css_dir . 'rating.css', Ninja_Forms::VERSION );
|
|
wp_enqueue_script('nf-front-end--starrating', $js_dir . 'front-end--starrating.min.js', array( 'jquery' ), $ver );
|
|
}
|
|
|
|
wp_enqueue_script( 'nf-front-end-deps', $js_dir . 'front-end-deps.js', array( 'jquery', 'backbone' ), $ver );
|
|
wp_enqueue_script( 'nf-front-end', $js_dir . 'front-end.js', array( 'nf-front-end-deps' ), $ver );
|
|
|
|
wp_localize_script( 'nf-front-end', 'nfi18n', Ninja_Forms::config( 'i18nFrontEnd' ) );
|
|
|
|
$data = apply_filters( 'ninja_forms_render_localize_script_data', array(
|
|
'adminAjax' => admin_url( 'admin-ajax.php' ),
|
|
'ajaxNonce' => wp_create_nonce( 'ninja_forms_display_nonce' ),
|
|
'requireBaseUrl' => Ninja_Forms::$url . 'assets/js/',
|
|
'use_merge_tags' => array(),
|
|
'opinionated_styles' => Ninja_Forms()->get_setting( 'opinionated_styles' )
|
|
));
|
|
|
|
foreach( Ninja_Forms()->fields as $field ){
|
|
foreach( $field->use_merge_tags() as $merge_tag ){
|
|
$data[ 'use_merge_tags' ][ $merge_tag ][ $field->get_type() ] = $field->get_type();
|
|
}
|
|
}
|
|
|
|
wp_localize_script( 'nf-front-end', 'nfFrontEnd', $data );
|
|
wp_localize_script( 'nf-front-end', 'nfRepeater', array(
|
|
'add_repeater_child_field_text' => __( 'Add ', 'ninja-forms' )
|
|
));
|
|
|
|
do_action( 'ninja_forms_enqueue_scripts', array( 'form_id' => $form_id ) );
|
|
|
|
do_action( 'nf_display_enqueue_scripts' );
|
|
}
|
|
|
|
/**
|
|
* Enqueue NF frontend basic display styles.
|
|
*
|
|
* @param string $css_dir
|
|
*/
|
|
public static function enqueue_styles_display( $css_dir ) {
|
|
switch( Ninja_Forms()->get_setting( 'opinionated_styles' ) ) {
|
|
case 'light':
|
|
wp_enqueue_style( 'nf-display', $css_dir . 'display-opinions-light.css', array( 'dashicons' ) );
|
|
wp_enqueue_style( 'nf-font-awesome', $css_dir . 'font-awesome.min.css' );
|
|
break;
|
|
case 'dark':
|
|
wp_enqueue_style( 'nf-display', $css_dir . 'display-opinions-dark.css', array( 'dashicons' ) );
|
|
wp_enqueue_style( 'nf-font-awesome', $css_dir . 'font-awesome.min.css' );
|
|
break;
|
|
default:
|
|
wp_enqueue_style( 'nf-display', $css_dir . 'display-structure.css', array( 'dashicons' ) );
|
|
}
|
|
}
|
|
|
|
public static function load_template( $file_name = '' )
|
|
{
|
|
if( ! $file_name ) return;
|
|
|
|
if( self::is_template_loaded( $file_name ) ) return;
|
|
|
|
self::$loaded_templates[] = $file_name;
|
|
}
|
|
|
|
public static function output_templates()
|
|
{
|
|
// Build File Path Hierarchy
|
|
$file_paths = apply_filters( 'ninja_forms_field_template_file_paths', array(
|
|
get_stylesheet_directory() . '/ninja-forms/templates/',
|
|
));
|
|
|
|
$file_paths[] = Ninja_Forms::$dir . 'includes/Templates/';
|
|
|
|
// Search for and Output File Templates
|
|
foreach( self::$loaded_templates as $file_name ) {
|
|
|
|
foreach( $file_paths as $path ){
|
|
|
|
if( file_exists( $path . "$file_name.html" ) ){
|
|
echo file_get_contents( $path . "$file_name.html" );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Action to Output Custom Templates
|
|
do_action( 'ninja_forms_output_templates' );
|
|
}
|
|
|
|
/*
|
|
* UTILITY
|
|
*/
|
|
|
|
protected static function is_template_loaded( $template_name )
|
|
{
|
|
return ( in_array( $template_name, self::$loaded_templates ) ) ? TRUE : FALSE ;
|
|
}
|
|
|
|
} // End Class NF_Display_Render
|