function ninja_forms_import_form($file)
{
    global $wpdb;
    $form = unserialize(trim($file));
    $form_fields = isset($form['field']) ? $form['field'] : null;
    $notifications = isset($form['notifications']) ? $form['notifications'] : null;
    unset($form['field']);
    unset($form['notifications']);
    $form = apply_filters('ninja_forms_before_import_form', $form);
    // Remove our last_sub setting. This is our starting seq_num.
    if (isset($form['data']['last_sub'])) {
        unset($form['data']['last_sub']);
    }
    $form['data'] = serialize($form['data']);
    $wpdb->insert(NINJA_FORMS_TABLE_NAME, $form);
    $form_id = $wpdb->insert_id;
    $form['id'] = $form_id;
    if (is_array($form_fields)) {
        for ($x = 0; $x < count($form_fields); $x++) {
            $form_fields[$x]['form_id'] = $form_id;
            $form_fields[$x]['data'] = apply_filters('nf_before_import_field', $form_fields[$x]['data'], $form_fields[$x]['id']);
            $form_fields[$x]['data'] = serialize($form_fields[$x]['data']);
            $old_field_id = $form_fields[$x]['id'];
            $form_fields[$x]['id'] = NULL;
            $wpdb->insert(NINJA_FORMS_FIELDS_TABLE_NAME, $form_fields[$x]);
            $form_fields[$x]['id'] = $wpdb->insert_id;
            $form_fields[$x]['old_id'] = $old_field_id;
            $form_fields[$x]['data'] = unserialize($form_fields[$x]['data']);
        }
    }
    $form['data'] = unserialize($form['data']);
    $form['field'] = $form_fields;
    $form['notifications'] = $notifications;
    // Insert any notifications we might have.
    if (is_array($notifications)) {
        foreach ($notifications as $n) {
            $n_id = nf_insert_notification($form_id);
            $n = apply_filters('nf_import_notification_meta', $n, $n_id, $form);
            unset($n['conditions']);
            foreach ($n as $meta_key => $meta_value) {
                foreach ($form_fields as $field) {
                    // We need to replace any references to old fields in our notification
                    if ('email_message' == $meta_key) {
                        $meta_value = str_replace('[ninja_forms_field id=' . $field['old_id'] . ']', '[ninja_forms_field id=' . $field['id'] . ']', $meta_value);
                        $meta_value = str_replace('ninja_forms_field_' . $field['old_id'], 'ninja_forms_field_' . $field['id'], $meta_value);
                    } else {
                        $meta_value = preg_replace('/\\bfield_' . $field['old_id'] . '\\b/u', 'field_' . $field['id'], $meta_value);
                    }
                }
                nf_update_object_meta($n_id, $meta_key, $meta_value);
            }
        }
    }
    do_action('ninja_forms_after_import_form', $form);
    return $form['id'];
}
 public function step($step)
 {
     global $ninja_forms_fields;
     // Get our form ID
     $form_id = $this->args['forms'][$step];
     // Bail if we've already converted the notifications for this form.
     if (in_array($form_id, $this->completed_forms)) {
         return false;
     }
     // Grab our form from the database
     $form_settings = Ninja_Forms()->form($form_id)->settings;
     $fields = Ninja_Forms()->form($form_id)->fields;
     $process_fields = array();
     foreach ($fields as $field_id => $field) {
         $label = strip_tags(nf_get_field_admin_label($field_id));
         if (strlen($label) > 30) {
             $tmp_label = substr($label, 0, 30);
         } else {
             $tmp_label = $label;
         }
         $tmp_array = array('value' => $field_id, 'label' => $tmp_label . ' - ID: ' . $field_id);
         $admin_label = $label;
         $label = isset($field['data']['label']) ? $field['data']['label'] : '';
         // Check to see if this field is supposed to be "processed"
         $type = $field['type'];
         if (isset($ninja_forms_fields[$type]['process_field']) && $ninja_forms_fields[$type]['process_field']) {
             $process_fields[$field_id] = array('field_id' => $field_id, 'label' => $label, 'admin_label' => $admin_label);
         }
     }
     // Create a notification for our admin email
     if (isset($form_settings['admin_email_msg']) && !empty($form_settings['admin_email_msg']) || isset($form_settings['admin_email_fields']) && 1 == $form_settings['admin_email_fields']) {
         // Create a notification
         $n_id = nf_insert_notification($form_id);
         // Update our notification type
         nf_update_object_meta($n_id, 'type', 'email');
         // Activate our notification
         Ninja_Forms()->notification($n_id)->activate();
         // Update our notification name
         Ninja_Forms()->notification($n_id)->update_setting('name', __('Admin Email', 'ninja-forms'));
         $admin_mailto = isset($form_settings['admin_mailto']) ? $form_settings['admin_mailto'] : array();
         // Implode our admin email addresses
         $to = implode('`', $admin_mailto);
         // Update our to setting
         Ninja_Forms()->notification($n_id)->update_setting('to', $to);
         // Update our Format Setting
         Ninja_Forms()->notification($n_id)->update_setting('email_format', $form_settings['email_type']);
         // Update our attach csv option
         Ninja_Forms()->notification($n_id)->update_setting('attach_csv', $form_settings['admin_attach_csv']);
         // Update our subject
         $subject = $this->replace_shortcodes($form_settings['admin_subject']);
         Ninja_Forms()->notification($n_id)->update_setting('email_subject', $subject);
         // Update our From Name
         if (isset($form_settings['email_from_name'])) {
             Ninja_Forms()->notification($n_id)->update_setting('from_name', $form_settings['email_from_name']);
         }
         foreach ($fields as $field) {
             if (isset($field['data']['from_name']) && $field['data']['from_name'] == 1) {
                 // Update our From Name
                 Ninja_Forms()->notification($n_id)->update_setting('from_name', 'field_' . $field['id']);
                 break;
             }
         }
         // Update our From Address
         Ninja_Forms()->notification($n_id)->update_setting('from_address', $form_settings['email_from']);
         // Get our reply-to address
         foreach ($fields as $field) {
             if (isset($field['data']['replyto_email']) && $field['data']['replyto_email'] == 1) {
                 Ninja_Forms()->notification($n_id)->update_setting('reply_to', 'field_' . $field['id']);
                 break;
             }
         }
         $email_message = $form_settings['admin_email_msg'];
         // Check to see if the "include list of fields" checkbox was checked.
         if (isset($form_settings['admin_email_fields']) && $form_settings['admin_email_fields'] == 1) {
             $email_message .= '<br />[ninja_forms_all_fields]';
         }
         // Update our email message
         Ninja_Forms()->notification($n_id)->update_setting('email_message', $email_message);
         Ninja_Forms()->notification($n_id)->update_setting('admin_email', true);
     }
     // Create a notification for our user email
     if (!empty($fields)) {
         $addresses = array();
         foreach ($fields as $field_id => $field) {
             if (isset($field['data']['send_email']) && $field['data']['send_email'] == 1) {
                 // Add this field to our $addresses variable.
                 $addresses[] = 'field_' . $field_id;
                 unset($field['data']['send_email']);
                 unset($field['data']['replyto_email']);
                 unset($field['data']['from_name']);
                 $args = array('update_array' => array('data' => serialize($field['data'])), 'where' => array('id' => $field_id));
                 ninja_forms_update_field($args);
             }
         }
         if (!empty($addresses)) {
             // We have a user email, so create a notification
             $n_id = nf_insert_notification($form_id);
             // Update our notification type
             nf_update_object_meta($n_id, 'type', 'email');
             // Activate our notification
             Ninja_Forms()->notification($n_id)->activate();
             // Update our notification name
             Ninja_Forms()->notification($n_id)->update_setting('name', __('User Email', 'ninja-forms'));
             // Implode our admin email addresses
             $n_var = count($addresses) > 1 ? 'bcc' : 'to';
             $addresses = implode('`', $addresses);
             Ninja_Forms()->notification($n_id)->update_setting($n_var, $addresses);
             // Update our Format Setting
             Ninja_Forms()->notification($n_id)->update_setting('email_format', $form_settings['email_type']);
             // Update our subject
             $subject = $this->replace_shortcodes($form_settings['user_subject']);
             Ninja_Forms()->notification($n_id)->update_setting('email_subject', $subject);
             // Update our From Name
             if (isset($form_settings['email_from_name'])) {
                 Ninja_Forms()->notification($n_id)->update_setting('from_name', $form_settings['email_from_name']);
             }
             // Update our From Address
             Ninja_Forms()->notification($n_id)->update_setting('from_address', $form_settings['email_from']);
             $email_message = $form_settings['user_email_msg'];
             // Check to see if the "include list of fields" checkbox was checked. If so, add our table to the end of the email message.
             if (isset($form_settings['user_email_fields']) && $form_settings['user_email_fields'] == 1) {
                 $email_message .= '<br />[ninja_forms_all_fields]';
             }
             // Update our email message
             Ninja_Forms()->notification($n_id)->update_setting('email_message', $email_message);
             Ninja_Forms()->notification($n_id)->update_setting('user_email', true);
         }
     }
     if (isset($form_settings['success_msg']) && !empty($form_settings['success_msg'])) {
         // Create a notification for our success message
         $n_id = nf_insert_notification($form_id);
         nf_update_object_meta($n_id, 'name', __('Success Message', 'ninja-forms'));
         nf_update_object_meta($n_id, 'type', 'success_message');
         nf_update_object_meta($n_id, 'active', 1);
         nf_update_object_meta($n_id, 'success_msg', $form_settings['success_msg']);
     }
     if (isset($form_settings['landing_page']) && !empty($form_settings['landing_page'])) {
         // Create a notification for our redirect
         $n_id = nf_insert_notification($form_id);
         nf_update_object_meta($n_id, 'name', __('Redirect', 'ninja-forms'));
         nf_update_object_meta($n_id, 'type', 'redirect');
         nf_update_object_meta($n_id, 'active', 1);
         nf_update_object_meta($n_id, 'redirect_url', $form_settings['landing_page']);
     }
     $completed_forms = get_option('nf_convert_notifications_forms');
     if (!is_array($completed_forms) || empty($completed_forms)) {
         $completed_forms = array($form_id);
     } else {
         $completed_forms[] = $form_id;
     }
     update_option('nf_convert_notifications_forms', $completed_forms);
     // Unset our admin email settings and save the form.
     if (isset($form_settings['admin_mailto'])) {
         unset($form_settings['admin_mailto']);
         unset($form_settings['admin_attach_csv']);
         unset($form_settings['admin_subject']);
         unset($form_settings['admin_email_msg']);
         unset($form_settings['admin_email_fields']);
         unset($form_settings['success_msg']);
         unset($form_settings['user_email_msg']);
         unset($form_settings['user_subject']);
         unset($form_settings['landing_page']);
         $args = array('update_array' => array('data' => serialize($form_settings)), 'where' => array('id' => $form_id));
         ninja_forms_update_form($args);
     }
 }
 /**
  * Create a new notification
  * 
  * @access public
  * @since 2.8
  * @return int $n_id
  */
 public function create($form_id = '')
 {
     // Bail if we don't have a form_id
     if ('' == $form_id) {
         return false;
     }
     $n_id = nf_insert_notification($form_id);
     // Activate our new notification
     Ninja_Forms()->notification($n_id)->activate();
     return $n_id;
 }