import-export.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php if ( ! defined( 'ABSPATH' ) ) exit;
  2. /*
  3. * Import a serialized ninja form
  4. *
  5. * @since unknown
  6. * @returns int
  7. */
  8. function ninja_forms_import_form( $file ){
  9. global $wpdb;
  10. $form = unserialize( trim( $file ) );
  11. $form_fields = isset( $form['field'] ) ? $form['field'] : null;
  12. $notifications = isset ( $form['notifications'] ) ? $form['notifications'] : null;
  13. unset ( $form['field'] );
  14. unset ( $form['notifications'] );
  15. $form = apply_filters( 'ninja_forms_before_import_form', $form );
  16. // Remove our last_sub setting. This is our starting seq_num.
  17. if ( isset ( $form['data']['last_sub'] ) )
  18. unset( $form['data']['last_sub'] );
  19. // Create our form
  20. $form_id = Ninja_Forms()->form()->create( $form['data'] );
  21. $form['id'] = $form_id;
  22. if(is_array($form_fields)){
  23. for ($x=0; $x < count( $form_fields ); $x++) {
  24. $form_fields[$x]['form_id'] = $form_id;
  25. $form_fields[$x]['data'] = apply_filters( 'nf_before_import_field', $form_fields[$x]['data'], $form_fields[$x]['id'] );
  26. $form_fields[$x]['data'] = serialize( $form_fields[$x]['data'] );
  27. $old_field_id = $form_fields[$x]['id'];
  28. $form_fields[$x]['id'] = NULL;
  29. $wpdb->insert( NINJA_FORMS_FIELDS_TABLE_NAME, $form_fields[$x] );
  30. $form_fields[$x]['id'] = $wpdb->insert_id;
  31. $form_fields[$x]['old_id'] = $old_field_id;
  32. $form_fields[$x]['data'] = unserialize( $form_fields[$x]['data'] );
  33. }
  34. }
  35. $form['field'] = $form_fields;
  36. $form['notifications'] = $notifications;
  37. // Insert any notifications we might have.
  38. if ( is_array( $notifications ) ) {
  39. foreach ( $notifications as $n ) {
  40. $n_id = nf_insert_notification( $form_id );
  41. $n = apply_filters( 'nf_import_notification_meta', $n, $n_id, $form );
  42. unset( $n['conditions'] );
  43. foreach ( $n as $meta_key => $meta_value ) {
  44. foreach ( $form_fields as $field ) {
  45. // We need to replace any references to old fields in our notification
  46. if ( 'email_message' == $meta_key ) {
  47. $meta_value = str_replace( '[ninja_forms_field id=' . $field['old_id'].']', '[ninja_forms_field id='.$field['id'].']', $meta_value );
  48. $meta_value = str_replace( 'ninja_forms_field_' . $field['old_id'], 'ninja_forms_field_' . $field['id'], $meta_value );
  49. } else {
  50. $meta_value = preg_replace( '/\bfield_' . $field['old_id'] . '\b/u', 'field_' . $field['id'], $meta_value );
  51. }
  52. }
  53. nf_update_object_meta( $n_id, $meta_key, $meta_value );
  54. }
  55. }
  56. }
  57. do_action( 'ninja_forms_after_import_form', $form );
  58. return $form['id'];
  59. }