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 | 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 +67 -0
- deprecated/ninja-forms.php +1 -1
- includes/Abstracts/Migration.php +32 -1
- includes/Abstracts/Model.php +80 -22
- includes/Database/Migrations/FormMeta.php +14 -0
- includes/Database/Migrations/Forms.php +35 -3
- includes/Database/Models/Form.php +29 -4
- includes/Helper.php +1 -1
- ninja-forms.php +10 -3
- readme.txt +10 -7
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.
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
19 |
`created_at` TIMESTAMP,
|
20 |
`updated_at` DATETIME,
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
'
|
17 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
123 |
} else {
|
124 |
$last_seq_num = 1;
|
125 |
-
$wpdb->insert( $wpdb->prefix . 'nf3_form_meta',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 =
|
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.
|
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.
|
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.
|
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.
|
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.
|
115 |
|
116 |
-
*
|
117 |
|
118 |
-
*
|
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:*
|