Ninja Forms – The Easy and Powerful Forms Builder - Version 3.3.11

Version Description

(23 July 2018) =

Changes:

  • Updated save methods for form settings to reduce potential encoding errors.

=

Download this release

Release Info

Developer krmoorhouse
Plugin Icon 128x128 Ninja Forms – The Easy and Powerful Forms Builder
Version 3.3.11
Comparing to
See all releases

Code changes from version 3.3.10 to 3.3.11

DATA_STRUCTURE.md CHANGED
@@ -31,6 +31,21 @@ _**nf3_forms**_ (Table of individual Forms)
31
  * int(11)
32
  * subs (The Form's number of lifetime Submissions)
33
  * int(11)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
 
36
  _**nf3_form_meta**_ (Table of Settings assoicated with each Form)
@@ -50,6 +65,12 @@ _**nf3_form_meta**_ (Table of Settings assoicated with each Form)
50
  * value (The value of the Setting)
51
  * longtext
52
  * COLLATE DATABASE_DEFAULT
 
 
 
 
 
 
53
 
54
  ### Fields
55
 
@@ -270,6 +291,21 @@ _**nf3_upgrades**_ (Table of Forms as they exist in the current structure and th
270
  * int(11)
271
  * NOT NULL
272
  * DEFAULT 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
 
274
  ### Chunks
275
 
@@ -575,3 +611,34 @@ _**nf3_chunks**_ (Table of Chunks created on publish to be reconstructed into a
575
  * value (The value of the Chunk)
576
  * longtext
577
  * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  * int(11)
32
  * subs (The Form's number of lifetime Submissions)
33
  * int(11)
34
+ * form_title (The displayable title of the Form)
35
+ * longtext
36
+ * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
37
+ * default_label_pos (The default label position of fields on the Form)
38
+ * varchar(15)
39
+ * show_title (Whether or not to show the Form title)
40
+ * bit(1)
41
+ * clear_complete (Whether or not to clear the Form after submission)
42
+ * bit(1)
43
+ * hide_complete (Whether or not to hide the Form after submission)
44
+ * bit(1)
45
+ * logged_in (Whether or not the user must be logged in to view the Form)
46
+ * bit(1)
47
+ * seq_num (The number of the next submission to the Form)
48
+ * int(11)
49
 
50
 
51
  _**nf3_form_meta**_ (Table of Settings assoicated with each Form)
65
  * value (The value of the Setting)
66
  * longtext
67
  * COLLATE DATABASE_DEFAULT
68
+ * meta_key (The administrative key of the Setting)
69
+ * longtext
70
+ * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
71
+ * meta_value (The value of the Setting)
72
+ * longtext
73
+ * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
74
 
75
  ### Fields
76
 
291
  * int(11)
292
  * NOT NULL
293
  * DEFAULT 0
294
+
295
+ ### Chunks
296
+
297
+ _**nf3_chunks**_ (Table of Chunks created on publish to be reconstructed into a Ninja Forms cache)
298
+ * id (The unique ID of the Chunk)
299
+ * int(11)
300
+ * NOT NULL
301
+ * AUTO_INCREMENT
302
+ * Primary Key
303
+ * name (The name of the Chunk)
304
+ * varchar(200)
305
+ * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
306
+ * value (The value of the Chunk)
307
+ * longtext
308
+ * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
309
 
310
  ### Chunks
311
 
611
  * value (The value of the Chunk)
612
  * longtext
613
  * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
614
+
615
+ Updated forms tables
616
+
617
+ ### Forms
618
+
619
+ _**nf3_forms**_ (Table of individual Forms)
620
+ ADDED:
621
+ * form_title (The displayable title of the Form)
622
+ * longtext
623
+ * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
624
+ * default_label_pos (The default label position of fields on the Form)
625
+ * varchar(15)
626
+ * show_title (Whether or not to show the Form title)
627
+ * bit(1)
628
+ * clear_complete (Whether or not to clear the Form after submission)
629
+ * bit(1)
630
+ * hide_complete (Whether or not to hide the Form after submission)
631
+ * bit(1)
632
+ * logged_in (Whether or not the user must be logged in to view the Form)
633
+ * bit(1)
634
+ * seq_num (The number of the next submission to the Form)
635
+ * int(11)
636
+
637
+ _**nf3_form_meta**_ (Table of Settings assoicated with each Form)
638
+ ADDED:
639
+ * meta_key (The administrative key of the Setting)
640
+ * longtext
641
+ * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
642
+ * meta_value (The value of the Setting)
643
+ * longtext
644
+ * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
deprecated/ninja-forms.php CHANGED
@@ -265,7 +265,7 @@ class Ninja_Forms {
265
 
266
  // Plugin version
267
  if ( ! defined( 'NF_PLUGIN_VERSION' ) )
268
- define( 'NF_PLUGIN_VERSION', '3.3.10' );
269
 
270
  // Plugin Folder Path
271
  if ( ! defined( 'NF_PLUGIN_DIR' ) )
265
 
266
  // Plugin version
267
  if ( ! defined( 'NF_PLUGIN_VERSION' ) )
268
+ define( 'NF_PLUGIN_VERSION', '3.3.11' );
269
 
270
  // Plugin Folder Path
271
  if ( ! defined( 'NF_PLUGIN_DIR' ) )
includes/Abstracts/Migration.php CHANGED
@@ -32,9 +32,40 @@ abstract class NF_Abstracts_Migration
32
  else {
33
  // We use standard utf8.
34
  return 'DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci';
35
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
  }
 
 
 
 
 
 
 
 
 
 
38
 
39
  public function _run()
40
  {
32
  else {
33
  // We use standard utf8.
34
  return 'DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci';
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Function to get the column collate for ALTER TABLE statements.
40
+ *
41
+ * @since 3.3.7
42
+ *
43
+ * @return string
44
+ */
45
+ public function collate()
46
+ {
47
+ global $wpdb;
48
+ // If our mysql version is 5.5.3 or higher...
49
+ if ( version_compare( $wpdb->db_version(), '5.5.3', '>=' ) ) {
50
+ // We can use mb4.
51
+ return 'COLLATE utf8mb4_general_ci';
52
+ } // Otherwise...
53
+ else {
54
+ // We use standard utf8.
55
+ return 'COLLATE utf8_general_ci';
56
+ }
57
 
58
  }
59
+
60
+ /**
61
+ * Function to run our stage one db updates.
62
+ */
63
+ public function _stage_one()
64
+ {
65
+ if ( method_exists( $this, 'do_stage_one' ) ) {
66
+ $this->do_stage_one();
67
+ }
68
+ }
69
 
70
  public function _run()
71
  {
includes/Abstracts/Model.php CHANGED
@@ -298,10 +298,13 @@ class NF_Abstracts_Model
298
  }
299
  }
300
 
 
 
 
301
  // Query settings from the meta table.
302
  $meta_results = $this->_db->get_results(
 
303
  "
304
- SELECT `key`, `value`
305
  FROM `$this->_meta_table_name`
306
  WHERE `parent_id` = $this->_id
307
  "
@@ -309,7 +312,13 @@ class NF_Abstracts_Model
309
 
310
  // Assign settings to the settings property.
311
  foreach ($meta_results as $meta) {
312
- $this->_settings[ $meta->key ] = $meta->value;
 
 
 
 
 
 
313
  }
314
  }
315
 
@@ -578,15 +587,49 @@ class NF_Abstracts_Model
578
  // If the setting is a column, save the settings to the model's table.
579
  if( in_array( $key, $this->_columns ) ){
580
 
581
- return $this->_db->update(
582
- $this->_table_name,
583
- array(
584
- $key => $value
585
- ),
586
- array(
587
- 'id' => $this->_id
588
- )
589
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
590
  }
591
 
592
  $meta_row = $this->_db->get_row(
@@ -600,11 +643,19 @@ class NF_Abstracts_Model
600
 
601
  if( $meta_row ){
602
 
 
 
 
 
 
 
 
 
 
 
603
  $result = $this->_db->update(
604
  $this->_meta_table_name,
605
- array(
606
- 'value' => $value
607
- ),
608
  array(
609
  'key' => $key,
610
  'parent_id' => $this->_id
@@ -613,13 +664,21 @@ class NF_Abstracts_Model
613
 
614
  } else {
615
 
 
 
 
 
 
 
 
 
 
 
 
 
616
  $result = $this->_db->insert(
617
  $this->_meta_table_name,
618
- array(
619
- 'key' => $key,
620
- 'value' => $value,
621
- 'parent_id' => $this->_id
622
- ),
623
  array(
624
  '%s',
625
  '%s',
@@ -628,7 +687,6 @@ class NF_Abstracts_Model
628
  );
629
  }
630
 
631
-
632
  return $result;
633
  }
634
 
@@ -643,7 +701,7 @@ class NF_Abstracts_Model
643
  {
644
  if( ! $this->_settings ) return;
645
 
646
- foreach( $this->_settings as $key => $value ){
647
  $value = maybe_serialize( $value );
648
  $this->_results[] = $this->_save_setting( $key, $value );
649
  }
@@ -674,7 +732,7 @@ class NF_Abstracts_Model
674
  );
675
 
676
  // If a relationship does not exists, then create one.
677
- if( 0 == $this->_db->num_rows ){
678
 
679
  $this->_db->insert(
680
  $this->_relationships_table,
298
  }
299
  }
300
 
301
+ $meta_select_fields = "SELECT `key`, `value`";//, `meta_key`,
302
+ //`meta_value`";
303
+
304
  // Query settings from the meta table.
305
  $meta_results = $this->_db->get_results(
306
+ $meta_select_fields .
307
  "
 
308
  FROM `$this->_meta_table_name`
309
  WHERE `parent_id` = $this->_id
310
  "
312
 
313
  // Assign settings to the settings property.
314
  foreach ($meta_results as $meta) {
315
+ // If we don't already have a value from the main table...
316
+ // OR If that value was NULL...
317
+ if ( ! isset( $this->_settings[ $meta->key ] ) || NULL == $this->_settings[ $meta->key ] ) {
318
+ // TODO: Update this logic after removal of original meta columns.
319
+ // Set the value from meta.
320
+ $this->_settings[ $meta->key ] = $meta->value;
321
+ }
322
  }
323
  }
324
 
587
  // If the setting is a column, save the settings to the model's table.
588
  if( in_array( $key, $this->_columns ) ){
589
 
590
+ $format = null;
591
+ if( in_array( $key, array( 'show_title', 'clear_complete', 'hide_complete', 'logged_in' ) ) ) {
592
+ // gotta set the format for the columns that use bit type
593
+ $format = '%d';
594
+ }
595
+
596
+ if( 'form' === $this->_type && 'title' == $key ) {
597
+ $this->_db->update(
598
+ $this->_table_name,
599
+ array(
600
+ 'form_title' => $value
601
+ ),
602
+ array(
603
+ 'id' => $this->_id
604
+ ),
605
+ $format
606
+ );
607
+ }
608
+
609
+ // Don't update the form_title. Duplicating issue for now
610
+ if( 'form_title' !== $key ) {
611
+ $update_model = $this->_db->update(
612
+ $this->_table_name,
613
+ array(
614
+ $key => $value
615
+ ),
616
+ array(
617
+ 'id' => $this->_id
618
+ ),
619
+ $format
620
+ );
621
+ } else {
622
+ return 1;
623
+ }
624
+
625
+ /*
626
+ * if it's not a form, you can return, but we are still saving some
627
+ * settings for forms in the form_meta table
628
+ */
629
+ if( 'form' != $this->_type
630
+ || ( 'form' == $this->_type && 'title' == $key ) ) {
631
+ return $update_model;
632
+ }
633
  }
634
 
635
  $meta_row = $this->_db->get_row(
643
 
644
  if( $meta_row ){
645
 
646
+ $update_values = array(
647
+ 'value' => $value
648
+ );
649
+
650
+ // for forms we need to update the meta_key and meta_value columns
651
+ if( 'form' == $this->_type ) {
652
+ $update_values[ 'meta_key' ] = $key;
653
+ $update_values[ 'meta_value' ] = $value;
654
+ }
655
+
656
  $result = $this->_db->update(
657
  $this->_meta_table_name,
658
+ $update_values,
 
 
659
  array(
660
  'key' => $key,
661
  'parent_id' => $this->_id
664
 
665
  } else {
666
 
667
+ $insert_values = array(
668
+ 'key' => $key,
669
+ 'value' => $value,
670
+ 'parent_id' => $this->_id
671
+ );
672
+
673
+ // for forms we need to update the meta_key and meta_value columns
674
+ if( 'form' == $this->_type ) {
675
+ $insert_values[ 'meta_key' ] = $key;
676
+ $insert_values[ 'meta_value' ] = $value;
677
+ }
678
+
679
  $result = $this->_db->insert(
680
  $this->_meta_table_name,
681
+ $insert_values,
 
 
 
 
682
  array(
683
  '%s',
684
  '%s',
687
  );
688
  }
689
 
 
690
  return $result;
691
  }
692
 
701
  {
702
  if( ! $this->_settings ) return;
703
 
704
+ foreach( $this->_settings as $key => $value ) {
705
  $value = maybe_serialize( $value );
706
  $this->_results[] = $this->_save_setting( $key, $value );
707
  }
732
  );
733
 
734
  // If a relationship does not exists, then create one.
735
+ if( 0 == $this->_db->num_rows ) {
736
 
737
  $this->_db->insert(
738
  $this->_relationships_table,
includes/Database/Migrations/FormMeta.php CHANGED
@@ -17,10 +17,24 @@ class NF_Database_Migrations_FormMeta extends NF_Abstracts_Migration
17
  `parent_id` int NOT NULL,
18
  `key` longtext NOT NULL,
19
  `value` longtext,
 
 
20
  UNIQUE KEY (`id`)
21
  ) {$this->charset_collate()};";
22
 
23
  dbDelta( $query );
24
  }
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
  }
17
  `parent_id` int NOT NULL,
18
  `key` longtext NOT NULL,
19
  `value` longtext,
20
+ `meta_key` longtext,
21
+ `meta_value` longtext,
22
  UNIQUE KEY (`id`)
23
  ) {$this->charset_collate()};";
24
 
25
  dbDelta( $query );
26
  }
27
+
28
+ /**
29
+ * Function to run our stage one upgrades.
30
+ */
31
+ public function do_stage_one()
32
+ {
33
+ $query = "ALTER TABLE {$this->table_name()}
34
+ ADD `meta_key` longtext {$this->collate()},
35
+ ADD `meta_value` longtext {$this->collate()}";
36
+ global $wpdb;
37
+ $wpdb->query( $query );
38
+ }
39
 
40
  }
includes/Database/Migrations/Forms.php CHANGED
@@ -15,15 +15,47 @@ class NF_Database_Migrations_Forms extends NF_Abstracts_Migration
15
  $query = "CREATE TABLE IF NOT EXISTS {$this->table_name()} (
16
  `id` int NOT NULL AUTO_INCREMENT,
17
  `title` longtext,
18
- `key` longtext,
19
  `created_at` TIMESTAMP,
20
  `updated_at` DATETIME,
21
- `views` int(11),
22
- `subs` int(11),
 
 
 
 
 
 
 
23
  UNIQUE KEY (`id`)
24
  ) {$this->charset_collate()};";
25
 
26
  dbDelta( $query );
27
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
 
29
  }
15
  $query = "CREATE TABLE IF NOT EXISTS {$this->table_name()} (
16
  `id` int NOT NULL AUTO_INCREMENT,
17
  `title` longtext,
18
+ `key` longtext,
19
  `created_at` TIMESTAMP,
20
  `updated_at` DATETIME,
21
+ `views` int(11),
22
+ `subs` int(11),
23
+ `form_title` longtext,
24
+ `default_label_pos` varchar(15),
25
+ `show_title` bit,
26
+ `clear_complete` bit,
27
+ `hide_complete` bit,
28
+ `logged_in` bit,
29
+ `seq_num` int,
30
  UNIQUE KEY (`id`)
31
  ) {$this->charset_collate()};";
32
 
33
  dbDelta( $query );
34
  }
35
+
36
+ /**
37
+ * Function to run our stage one upgrades.
38
+ */
39
+ public function do_stage_one()
40
+ {
41
+ /**
42
+ * TODO:
43
+ *
44
+ DROP `key`,
45
+ DROP `views`,
46
+ DROP `subs`,
47
+ *
48
+ */
49
+ $query = "ALTER TABLE {$this->table_name()}
50
+ ADD `form_title` longtext {$this->collate()},
51
+ ADD `default_label_pos` varchar(15) {$this->collate()},
52
+ ADD `show_title` bit,
53
+ ADD `clear_complete` bit,
54
+ ADD `hide_complete` bit,
55
+ ADD `logged_in` bit,
56
+ ADD `seq_num` int";
57
+ global $wpdb;
58
+ $wpdb->query( $query );
59
+ }
60
 
61
  }
includes/Database/Models/Form.php CHANGED
@@ -13,8 +13,14 @@ final class NF_Database_Models_Form extends NF_Abstracts_Model
13
 
14
  protected $_columns = array(
15
  'title',
16
- 'key',
17
- 'created_at'
 
 
 
 
 
 
18
  );
19
 
20
  protected $_fields;
@@ -119,10 +125,21 @@ final class NF_Database_Models_Form extends NF_Abstracts_Model
119
  , $form_id ) );
120
 
121
  if( $last_seq_num ) {
122
- $wpdb->update( $wpdb->prefix . 'nf3_form_meta', array( 'value' => $last_seq_num + 1 ), array( 'key' => '_seq_num', 'parent_id' => $form_id ) );
 
 
 
 
123
  } else {
124
  $last_seq_num = 1;
125
- $wpdb->insert( $wpdb->prefix . 'nf3_form_meta', array( 'key' => '_seq_num', 'value' => $last_seq_num + 1, 'parent_id' => $form_id ) );
 
 
 
 
 
 
 
126
  }
127
 
128
  return $last_seq_num;
@@ -299,6 +316,14 @@ final class NF_Database_Models_Form extends NF_Abstracts_Model
299
  ));
300
  }
301
 
 
 
 
 
 
 
 
 
302
  return $new_form_id;
303
  }
304
 
13
 
14
  protected $_columns = array(
15
  'title',
16
+ 'created_at',
17
+ 'form_title',
18
+ 'default_label_pos',
19
+ 'show_title',
20
+ 'clear_complete',
21
+ 'hide_complete',
22
+ 'logged_in',
23
+ 'seq_num'
24
  );
25
 
26
  protected $_fields;
125
  , $form_id ) );
126
 
127
  if( $last_seq_num ) {
128
+ $wpdb->update( $wpdb->prefix . 'nf3_form_meta', array( 'value' => $last_seq_num + 1,
129
+ 'meta_value' => $last_seq_num + 1, 'meta_key' => '_seq_num' )
130
+ , array( 'key' => '_seq_num', 'parent_id'
131
+ => $form_id ) );
132
+ $wpdb->update( $wpdb->prefix . 'nf3_forms', array( 'seq_num' => $last_seq_num + 1 ), array( 'id' => $form_id ) );
133
  } else {
134
  $last_seq_num = 1;
135
+ $wpdb->insert( $wpdb->prefix . 'nf3_form_meta',
136
+ array( 'key' => '_seq_num',
137
+ 'value' => $last_seq_num + 1,
138
+ 'parent_id' => $form_id,
139
+ 'meta_key' => '_seq_num',
140
+ 'meta_value' => $last_seq_num + 1
141
+ ) );
142
+ $wpdb->update( $wpdb->prefix . 'nf3_forms', array( 'seq_num' => $last_seq_num + 1 ), array( 'id' => $form_id ) );
143
  }
144
 
145
  return $last_seq_num;
316
  ));
317
  }
318
 
319
+ /*
320
+ * In order for our new form and form_meta fields to populate on
321
+ * duplicate we need to update_settings and save
322
+ */
323
+ $new_form = Ninja_Forms()->form( $new_form_id )->get();
324
+ $new_form->update_settings( $new_form->get_settings() );
325
+ $new_form->save();
326
+
327
  return $new_form_id;
328
  }
329
 
includes/Helper.php CHANGED
@@ -296,7 +296,7 @@ final class WPN_Helper
296
  */
297
  public static function update_nf_cache( $id, $data ) {
298
  // Define our current stage here for use as we run various upgrades.
299
- $CURRENT_STAGE = 0;
300
  // Serialize our data.
301
  $cache = serialize( $data );
302
  global $wpdb;
296
  */
297
  public static function update_nf_cache( $id, $data ) {
298
  // Define our current stage here for use as we run various upgrades.
299
+ $CURRENT_STAGE = 1;
300
  // Serialize our data.
301
  $cache = serialize( $data );
302
  global $wpdb;
ninja-forms.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Ninja Forms
4
  Plugin URI: http://ninjaforms.com/
5
  Description: Ninja Forms is a webform builder with unparalleled ease of use and features.
6
- Version: 3.3.10
7
  Author: The WP Ninjas
8
  Author URI: http://ninjaforms.com
9
  Text Domain: ninja-forms
@@ -58,7 +58,7 @@ if( get_option( 'ninja_forms_load_deprecated', FALSE ) && ! ( isset( $_POST[ 'nf
58
  /**
59
  * @since 3.0
60
  */
61
- const VERSION = '3.3.10';
62
 
63
  const WP_MIN_VERSION = '4.7';
64
 
@@ -227,7 +227,7 @@ if( get_option( 'ninja_forms_load_deprecated', FALSE ) && ! ( isset( $_POST[ 'nf
227
  // If we've not recorded our db version...
228
  if ( ! get_option( 'ninja_forms_db_version' ) ) {
229
  // Set it to the baseline (1.0).
230
- add_option( 'ninja_forms_db_version', '1.0', '', 'no' );
231
  }
232
 
233
  /*
@@ -400,6 +400,13 @@ if( get_option( 'ninja_forms_load_deprecated', FALSE ) && ! ( isset( $_POST[ 'nf
400
  // Ensure all of our tables have been defined.
401
  $migrations = new NF_Database_Migrations();
402
  $migrations->migrate();
 
 
 
 
 
 
 
403
  }
404
  }
405
 
3
  Plugin Name: Ninja Forms
4
  Plugin URI: http://ninjaforms.com/
5
  Description: Ninja Forms is a webform builder with unparalleled ease of use and features.
6
+ Version: 3.3.11
7
  Author: The WP Ninjas
8
  Author URI: http://ninjaforms.com
9
  Text Domain: ninja-forms
58
  /**
59
  * @since 3.0
60
  */
61
+ const VERSION = '3.3.11';
62
 
63
  const WP_MIN_VERSION = '4.7';
64
 
227
  // If we've not recorded our db version...
228
  if ( ! get_option( 'ninja_forms_db_version' ) ) {
229
  // Set it to the baseline (1.0).
230
+ add_option( 'ninja_forms_db_version', '1.1', '', 'no' );
231
  }
232
 
233
  /*
400
  // Ensure all of our tables have been defined.
401
  $migrations = new NF_Database_Migrations();
402
  $migrations->migrate();
403
+ // If our db version is below 1.1...
404
+ if ( version_compare( get_option( 'ninja_forms_db_version' ), '1.1', '<' ) ) {
405
+ // Do our stage 1 updates.
406
+ $migrations->do_stage_one();
407
+ // Update our db version.
408
+ update_option( 'ninja_forms_db_version', '1.1' );
409
+ }
410
  }
411
  }
412
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: wpninjasllc, kstover, jameslaws, kbjohnson90, klhall1987, krmoorho
3
  Tags: form, forms, contact form, custom form, form builder, form creator, form manager, form creation, contact forms, custom forms, forms builder, forms creator, forms manager, forms creation, form administration,
4
  Requires at least: 4.7
5
  Tested up to: 4.9
6
- Stable tag: 3.3.10
7
  License: GPLv2 or later
8
 
9
  Drag and drop fields in an intuitive UI to create contact forms, email subscription forms, order forms, payment forms, send emails and more!
@@ -111,17 +111,20 @@ For help and video tutorials, please visit our website: [Ninja Forms Documentati
111
 
112
  == Upgrade Notice ==
113
 
114
- = 3.3.10 (16 July 2018) =
115
 
116
- *Bugs:*
117
 
118
- * (Beta) The Ninja Forms Gutenberg block should now work properly on the newest version of Gutenberg.
119
- * Min and max values for number fields should once more accept decimal values.
120
- * Resolved an issue that was sometimes causing a description text block to be output, even if it contained no text.
121
- * Radio lists should now properly display the default value when using our opinionated styles.
122
 
123
  == Changelog ==
124
 
 
 
 
 
 
 
125
  = 3.3.10 (16 July 2018) =
126
 
127
  *Bugs:*
3
  Tags: form, forms, contact form, custom form, form builder, form creator, form manager, form creation, contact forms, custom forms, forms builder, forms creator, forms manager, forms creation, form administration,
4
  Requires at least: 4.7
5
  Tested up to: 4.9
6
+ Stable tag: 3.3.11
7
  License: GPLv2 or later
8
 
9
  Drag and drop fields in an intuitive UI to create contact forms, email subscription forms, order forms, payment forms, send emails and more!
111
 
112
  == Upgrade Notice ==
113
 
114
+ = 3.3.11 (23 July 2018) =
115
 
116
+ *Changes:*
117
 
118
+ * Updated save methods for form settings to reduce potential encoding errors.
 
 
 
119
 
120
  == Changelog ==
121
 
122
+ = 3.3.11 (23 July 2018) =
123
+
124
+ *Changes:*
125
+
126
+ * Updated save methods for form settings to reduce potential encoding errors.
127
+
128
  = 3.3.10 (16 July 2018) =
129
 
130
  *Bugs:*