: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* $sql_select is a var that tracks the values for each field table column.
* Loop over our table column names and add them to our $sql_insert var.
foreach( $db_columns[ $table_name ] as $column_name ) {
$sql_insert .= "`{$column_name}`,";
if ( 'parent_id' == $column_name ) {
$sql_select .= "`{$column_name}`,";
// Remove any trailing commas.
$sql_insert = rtrim( $sql_insert, ',' );
$sql_select = rtrim( $sql_select, ',' );
return array( 'insert' => $sql_insert, 'select' => $sql_select );
public static function export( $form_id, $return = FALSE )
//TODO: Set Date Format from Plugin Settings
$form = Ninja_Forms()->form( $form_id )->get();
$form_title = $form->get_setting( 'title' );
$form_title = preg_replace( "/[^A-Za-z0-9 ]/", '', $form_title );
$form_title = str_replace( ' ', '_', $form_title );
'settings' => $form->get_settings(),
$fields = Ninja_Forms()->form( $form_id )->get_fields();
foreach( $fields as $field ){
if ( ! is_null( $field ) && ! empty( $field ) ) {
$export['fields'][] = $field->get_settings();
$actions = Ninja_Forms()->form( $form_id )->get_actions();
foreach( $actions as $action ){
if ( ! is_null( $action ) && ! empty( $action ) ) {
$export[ 'actions' ][] = $action->get_settings();
$today = date( $date_format, current_time( 'timestamp' ) );
$filename = apply_filters( 'ninja_forms_form_export_filename', 'nf_form_' . $today . '_' . $form_title );
$filename = $filename . ".nff";
header( 'Content-type: application/json');
header( 'Content-Disposition: attachment; filename="'.$filename .'"' );
header( 'Pragma: no-cache');
// echo apply_filters( 'ninja_forms_form_export_bom',"\xEF\xBB\xBF" ) ; // Byte Order Mark
if( isset( $_REQUEST[ 'nf_export_form_turn_off_encoding' ] )
&& $_REQUEST[ 'nf_export_form_turn_off_encoding' ] ) {
echo json_encode( $export );
echo json_encode( WPN_Helper::utf8_encode( $export ) );
|--------------------------------------------------------------------------
| Backwards Compatibility
|--------------------------------------------------------------------------
public function import_form_backwards_compatibility( $import )
// Rename `data` to `settings`
if( isset( $import[ 'data' ] ) ){
$import[ 'settings' ] = $import[ 'data' ];
unset( $import[ 'data' ] );
// Rename `notifications` to `actions`
if( isset( $import[ 'notifications' ] ) ){
$import[ 'actions' ] = $import[ 'notifications' ];
unset( $import[ 'notifications' ] );
// Rename `form_title` to `title`
if( isset( $import[ 'settings' ][ 'form_title' ] ) ){
$import[ 'settings' ][ 'title' ] = $import[ 'settings' ][ 'form_title' ];
unset( $import[ 'settings' ][ 'form_title' ] );
// Convert `last_sub` to `_seq_num`
if( isset( $import[ 'settings' ][ 'last_sub' ] ) ) {
$import[ 'settings' ][ '_seq_num' ] = $import[ 'settings' ][ 'last_sub' ] + 1;
if( ! isset( $import[ 'fields' ] ) ){
$import[ 'fields' ] = array();
if( isset( $import[ 'field' ] ) ){
$import[ 'fields' ] = $import[ 'field' ];
unset( $import[ 'field' ] );
$import = apply_filters( 'ninja_forms_upgrade_settings', $import );
// Combine Field and Field Data
foreach( $import[ 'fields' ] as $key => $field ){
if( '_honeypot' == $field[ 'type' ] ) {
unset( $import[ 'fields' ][ $key ] );
if( ! $field[ 'type' ] ) {
unset( $import[ 'fields'][ $key ] );
// TODO: Split Credit Card field into multiple fields.
$field = $this->import_field_backwards_compatibility( $field );
if( isset( $field[ 'new_fields' ] ) ){
foreach( $field[ 'new_fields' ] as $new_field ){
$import[ 'fields' ][] = $new_field;
unset( $field[ 'new_fields' ] );
$import[ 'fields' ][ $key ] = $field;
$has_save_action = FALSE;
foreach( $import[ 'actions' ] as $key => $action ){
$action = $this->import_action_backwards_compatibility( $action );
$import[ 'actions' ][ $key ] = $action;
if( 'save' == $action[ 'type' ] ) $has_save_action = TRUE;
if( ! $has_save_action ) {
$import[ 'actions' ][] = array(
'label' => esc_html__( 'Save Form', 'ninja-forms' ),
$import = $this->import_merge_tags_backwards_compatibility( $import );
return apply_filters( 'ninja_forms_after_upgrade_settings', $import );
public function import_merge_tags_backwards_compatibility( $import )
foreach( $import[ 'fields' ] as $key => $field ){
if( ! isset( $field[ 'id' ] ) ) continue;
$field_id = $field[ 'id' ];
$field_key = $field[ 'type' ] . '_' . $field_id;
$field_lookup[ $field_id ] = $import[ 'fields' ][ $key ][ 'key' ] = $field_key;
foreach( $import[ 'actions' ] as $key => $action_settings ){
foreach( $action_settings as $setting => $value ){
foreach( $field_lookup as $field_id => $field_key ){
$token = 'field_' . $field_id;
if( ! is_array( $value ) ) {
if (FALSE !== strpos($value, $token)) {
$value = str_replace($token, '{field:' . $field_key . '}', $value);
$shortcode = "[ninja_forms_field id=$field_id]";
if( ! is_array( $value ) ) {
if ( FALSE !== strpos( $value, $shortcode ) ) {
$value = str_replace( $shortcode, '{field:' . $field_key . '}', $value );
//Checks for the nf_sub_seq_num short code and replaces it with the submission sequence merge tag
$sub_seq = '[nf_sub_seq_num]';
if( ! is_array( $value ) ) {
if( FALSE !== strpos( $value, $sub_seq ) ){
$value = str_replace( $sub_seq, '{submission:sequence}', $value );
if( ! is_array( $value ) ) {
if (FALSE !== strpos($value, '[ninja_forms_all_fields]')) {
$value = str_replace('[ninja_forms_all_fields]', '{field:all_fields}', $value);
$action_settings[ $setting ] = $value;
$import[ 'actions' ][ $key ] = $action_settings;
public function import_action_backwards_compatibility( $action )
if( isset( $action[ 'type' ] ) ) {
$action['type'] = str_replace('_', '', $action['type']);
if( 'email' == $action[ 'type' ] ){
$action[ 'to' ] = str_replace( '`', ',', $action[ 'to' ] );
$action[ 'email_subject' ] = str_replace( '`', ',', $action[ 'email_subject' ] );
$action[ 'cc' ] = str_replace( '`', ',', $action[ 'cc' ] );
$action[ 'bcc' ] = str_replace( '`', ',', $action[ 'bcc' ] );
// If our email is in plain text...
if ( $action[ 'email_format' ] == 'plain' ) {
$action[ 'email_message_plain' ] = $action[ 'email_message' ];
} // Otherwise... (It's not plain text.)
$action[ 'email_message' ] = nl2br( $action[ 'email_message' ] );
// Convert `name` to `label`
if( isset( $action[ 'name' ] ) ) {
$action['label'] = $action['name'];
return apply_filters( 'ninja_forms_upgrade_action_' . $action[ 'type' ], $action );
public function import_field_backwards_compatibility( $field )
// Flatten field settings array
if( isset( $field[ 'data' ] ) && is_array( $field[ 'data' ] ) ){
$field = array_merge( $field, $field[ 'data' ] );
unset( $field[ 'data' ] );
// Drop form_id in favor of parent_id, which is set by the form.
if( isset( $field[ 'form_id' ] ) ){
unset( $field[ 'form_id' ] );
// Remove `_` prefix from type setting
$field[ 'type' ] = ltrim( $field[ 'type' ], '_' );
// Type: `text` -> `textbox`
if( 'text' == $field[ 'type' ] ){
$field[ 'type' ] = 'textbox';
if( 'submit' == $field[ 'type' ] ){
$field[ 'processing_label' ] = esc_html__( 'Processing', 'ninja-forms' );
if( isset( $field[ 'email' ] ) ){
if( 'textbox' == $field[ 'type' ] && $field[ 'email' ] ) {
$field['type'] = 'email';
unset( $field[ 'email' ] );
if( isset( $field[ 'class' ] ) ){
$field[ 'element_class' ] = $field[ 'class' ];
unset( $field[ 'class' ] );
if( isset( $field[ 'req' ] ) ){
$field[ 'required' ] = $field[ 'req' ];
unset( $field[ 'req' ] );
if( isset( $field[ 'default_value_type' ] ) ){
if( '_user_id' == $field[ 'default_value_type' ] ) $field[ 'default' ] = '{wp:user_id}';
if( '_user_email' == $field[ 'default_value_type' ] ) $field[ 'default' ] = '{wp:user_email}';
if( '_user_lastname' == $field[ 'default_value_type' ] ) $field[ 'default' ] = '{wp:user_last_name}';
if( '_user_firstname' == $field[ 'default_value_type' ] ) $field[ 'default' ] = '{wp:user_first_name}';
if( '_user_display_name' == $field[ 'default_value_type' ] ) $field[ 'default' ] = '{wp:user_display_name}';
if( 'post_id' == $field[ 'default_value_type' ] ) $field[ 'default' ] = '{wp:post_id}';
if( 'post_url' == $field[ 'default_value_type' ] ) $field[ 'default' ] = '{wp:post_url}';
if( 'post_title' == $field[ 'default_value_type' ] ) $field[ 'default' ] = '{wp:post_title}';
if( 'today' == $field[ 'default_value_type' ] ) $field[ 'default' ] = '{other:date}';
if( '_custom' == $field[ 'default_value_type' ] && isset( $field[ 'default_value' ] ) ){
$field[ 'default' ] = $field[ 'default_value' ];
if( 'querystring' == $field[ 'default_value_type' ] && isset( $field[ 'default_value' ] ) ){
$field[ 'default' ] = '{querystring:' . $field[ 'default_value' ] . '}';
unset( $field[ 'default_value' ] );
unset( $field[ 'default_value_type' ] );
} else if ( isset ( $field[ 'default_value' ] ) ) {
$field[ 'default' ] = $field[ 'default_value' ];
if( 'list' == $field[ 'type' ] ) {
if ( isset( $field[ 'list_type' ] ) ) {
if ('dropdown' == $field['list_type']) {
$field['type'] = 'listselect';
if ('radio' == $field['list_type']) {
$field['type'] = 'listradio';
if ('checkbox' == $field['list_type']) {
$field['type'] = 'listcheckbox';
if ('multi' == $field['list_type']) {
$field['type'] = 'listmultiselect';
if( isset( $field[ 'list' ][ 'options' ] ) ) {
$field[ 'options' ] = array_values( $field[ 'list' ][ 'options' ] );
unset( $field[ 'list' ][ 'options' ] );
foreach( $field[ 'options' ] as &$option ){
if( isset( $option[ 'value' ] ) && $option[ 'value' ] ) continue;
$option[ 'value' ] = $option[ 'label' ];
if( 'country' == $field[ 'type' ] ){
$field[ 'type' ] = 'listcountry';
$field[ 'options' ] = array();
// Convert `textbox` to other field types
foreach( array( 'fist_name', 'last_name', 'user_zip', 'user_city', 'user_phone', 'user_email', 'user_address_1', 'user_address_2', 'datepicker' ) as $item ) {
if ( isset( $field[ $item ] ) && $field[ $item ] ) {
$field[ 'type' ] = str_replace( array( '_', 'user', '1', '2', 'picker' ), '', $item );
unset( $field[ $item ] );
if( 'timed_submit' == $field[ 'type' ] ) {
$field[ 'type' ] = 'submit';
if( 'checkbox' == $field[ 'type' ] ){
if( isset( $field[ 'calc_value' ] ) ){
if( isset( $field[ 'calc_value' ][ 'checked' ] ) ){
$field[ 'checked_calc_value' ] = $field[ 'calc_value' ][ 'checked' ];
unset( $field[ 'calc_value' ][ 'checked' ] );
if( isset( $field[ 'calc_value' ][ 'unchecked' ] ) ){
$field[ 'unchecked_calc_value' ] = $field[ 'calc_value' ][ 'unchecked' ];
unset( $field[ 'calc_value' ][ 'unchecked' ] );
if( 'rating' == $field[ 'type' ] ){
$field[ 'type' ] = 'starrating';
if( isset( $field[ 'rating_stars' ] ) ){
$field[ 'default' ] = $field[ 'rating_stars' ];
unset( $field[ 'rating_stars' ] );
if( 'number' == $field[ 'type' ] ){
if( ! isset( $field[ 'num_min'] ) ) {
if( ! isset( $field[ 'number_min' ] ) || ! $field[ 'number_min' ] ){
$field[ 'num_min' ] = '';
$field[ 'num_min' ] = $field[ 'number_min' ];
if( ! isset( $field[ 'num_max'] ) ) {
if( ! isset( $field[ 'number_max' ] ) || ! $field[ 'number_max' ] ){
$field[ 'num_max' ] = '';
$field[ 'num_max' ] = $field[ 'number_max' ];
if( ! isset( $field[ 'num_step'] ) ) {
if( ! isset( $field[ 'number_step' ] ) || ! $field[ 'number_step' ] ){
$field[ 'num_step' ] = 1;
$field[ 'num_step' ] = $field[ 'number_step' ];
if( 'profile_pass' == $field[ 'type' ] ){
$field[ 'type' ] = 'password';
$passwordconfirm = array_merge( $field, array(
'type' => 'passwordconfirm',
'label' => $field[ 'label' ] . ' ' . esc_html__( 'Confirm', 'ninja-forms' ),
'confirm_field' => 'password_' . $field[ 'id' ]
$field[ 'new_fields' ][] = $passwordconfirm;
if( 'desc' == $field[ 'type' ] ){
$field[ 'type' ] = 'html';
if( 'credit_card' == $field[ 'type' ] ){
$field[ 'type' ] = 'creditcardnumber';
$field[ 'label' ] = $field[ 'cc_number_label' ];
$field[ 'label_pos' ] = 'above';
if( $field[ 'help_text' ] ){
$field[ 'help_text' ] = '<p>' . $field[ 'help_text' ] . '</p>';
$credit_card_fields = array(
'creditcardcvc' => $field[ 'cc_cvc_label' ],
'creditcardfullname' => $field[ 'cc_name_label' ],
'creditcardexpiration' => $field[ 'cc_exp_month_label' ] . ' ' . $field[ 'cc_exp_year_label' ],
'creditcardzip' => esc_html__( 'Credit Card Zip', 'ninja-forms' ),
foreach( $credit_card_fields as $new_type => $new_label ){
$field[ 'new_fields' ][] = array_merge( $field, array(
* Convert inside label position over to placeholder
if ( isset ( $field[ 'label_pos' ] ) && 'inside' == $field[ 'label_pos' ] ) {
if ( ! isset ( $field[ 'placeholder' ] ) || empty ( $field[ 'placeholder' ] ) ) {
$field[ 'placeholder' ] = $field[ 'label' ];
$field[ 'label_pos' ] = 'hidden';
if( isset( $field[ 'desc_text' ] ) ){
$field[ 'desc_text' ] = nl2br( $field[ 'desc_text' ] );
if( isset( $field[ 'help_text' ] ) ){
$field[ 'help_text' ] = nl2br( $field[ 'help_text' ] );
return apply_filters( 'ninja_forms_upgrade_field', $field );