PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 2.21.4
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v2.21.4
V-3.3.0 3.2.2 3.2.1 3.2.0 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 V3.0.3 V3.0.2 -3.0.1 V_3.0.0 1.1.1 1.1.8 1.2 1.3 1.4 1.4.18 1.5.2 1.9 2.0 2.10.0 2.10.1 2.10.2 All 137 releases
← All changes | includes/Core/Database/DB.php +127 -61 1.92.21.4 View file →
@@ -8,36 +8,40 @@
8 8 */
9 9
10 10 namespace BitCode\BitForm\Core\Database;
11 11
12 +use BitCode\BitForm\Core\Util\Log;
13 +
12 14 /**
13 15 * Database Migration
14 16 */
15 -final class DB {
16 - /**
17 - * Undocumented function
18 - *
19 - * @return void
20 - */
21 - public static function migrate() {
22 - global $wpdb;
23 - global $bitforms_db_version;
24 - $collate = '';
17 +final class DB
18 +{
19 + /**
20 + * Undocumented function
21 + *
22 + * @return void
23 + */
24 + public static function migrate()
25 + {
26 + global $wpdb;
27 + global $bitforms_db_version;
28 + $collate = '';
25 29
26 - if ($wpdb->has_cap('collation')) {
27 - if (!empty($wpdb->charset)) {
28 - $collate .= "DEFAULT CHARACTER SET $wpdb->charset";
29 - }
30 + if ($wpdb->has_cap('collation')) {
31 + if (!empty($wpdb->charset)) {
32 + $collate .= "DEFAULT CHARACTER SET $wpdb->charset";
33 + }
30 34
31 - if (!empty($wpdb->collate)) {
32 - $collate .= " COLLATE $wpdb->collate";
33 - }
34 - }
35 + if (!empty($wpdb->collate)) {
36 + $collate .= " COLLATE $wpdb->collate";
37 + }
38 + }
35 39
36 - $max_index_length = 191;
40 + $max_index_length = 191;
37 41
38 - $table_schema = array(
39 - "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_reports` (
42 + $table_schema = [
43 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_reports` (
40 44 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
41 45 `category` varchar(50) NOT NULL,
42 46 `type` varchar(20) NOT NULL,
43 47 `context` varchar(20) NOT NULL,
@@ -50,12 +54,15 @@
50 54 `updated_at` datetime DEFAULT NULL,
51 55 PRIMARY KEY (`id`)
52 56 ) $collate;",
53 57
54 - "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form` (
58 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form` (
55 59 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
56 60 `form_name` varchar(255) DEFAULT NULL,
57 61 `form_content` longtext DEFAULT NULL,
62 + `builder_helper_state` longtext DEFAULT NULL,
63 + `atomic_class_map` longtext DEFAULT NULL,
64 + `generated_script_page_ids` longtext DEFAULT NULL,
58 65 `user_id` bigint(20) unsigned DEFAULT NULL,
59 66 `user_ip` int(11) unsigned DEFAULT NULL,
60 67 `views` int(11) unsigned DEFAULT 0,
61 68 `entries` int(11) unsigned DEFAULT 0,
@@ -65,9 +72,9 @@
65 72 `updated_at` datetime DEFAULT NULL,
66 73 PRIMARY KEY (`id`)
67 74 ) $collate;",
68 75
69 - "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_workflows` (
76 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_workflows` (
70 77 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
71 78 `workflow_name` varchar(255) NOT NULL,
72 79 `workflow_type` varchar(50) NOT NULL,
73 80 `workflow_run` varchar(50) NOT NULL,
@@ -72,9 +79,10 @@
72 79 `workflow_type` varchar(50) NOT NULL,
73 80 `workflow_run` varchar(50) NOT NULL,
74 81 `workflow_behaviour` varchar(25) NOT NULL,
75 82 `workflow_condition` longtext DEFAULT NULL,
76 - `workflow_action` longtext DEFAULT NULL,
83 + `workflow_order` int(11) unsigned DEFAULT NULL,
84 + `workflow_status` tinyint(1) DEFAULT 1,/* 0 disable, 1 enable, 2 enable in field settings */
77 85 `form_id` bigint(20) unsigned DEFAULT NULL,
78 86 `user_id` bigint(20) unsigned DEFAULT NULL,
79 87 `user_ip` int(11) unsigned DEFAULT NULL,
80 88 `user_location` text DEFAULT NULL,
@@ -84,12 +92,13 @@
84 92 PRIMARY KEY (`id`),
85 93 KEY `form_id` (`form_id`)
86 94 ) $collate;",
87 95
88 - "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_success_messages` (
96 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_success_messages` (
89 97 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
90 98 `message_title` varchar(255) DEFAULT NULL,
91 99 `message_content` longtext DEFAULT NULL,
100 + `message_config` longtext DEFAULT NULL,
92 101 `form_id` bigint(20) unsigned DEFAULT NULL,
93 102 `user_id` bigint(20) unsigned DEFAULT NULL,
94 103 `user_ip` int(11) unsigned DEFAULT NULL,
95 104 `created_at` datetime DEFAULT NULL,
@@ -96,9 +105,9 @@
96 105 `updated_at` datetime DEFAULT NULL,
97 106 PRIMARY KEY (`id`)
98 107 ) $collate;",
99 108
100 - "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_email_template` (
109 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_email_template` (
101 110 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
102 111 `title` text DEFAULT NULL,
103 112 `sub` text DEFAULT NULL,
104 113 `body` longtext DEFAULT NULL,
@@ -109,9 +118,9 @@
109 118 `updated_at` datetime DEFAULT NULL,
110 119 PRIMARY KEY (`id`)
111 120 ) $collate;",
112 121
113 - "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_integration` (
122 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_integration` (
114 123 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
115 124 `category` varchar(50) NOT NULL,
116 125 `integration_name` varchar(255) DEFAULT NULL,
117 126 `integration_type` varchar(50) NOT NULL,
@@ -124,9 +133,9 @@
124 133 `updated_at` datetime DEFAULT NULL,
125 134 PRIMARY KEY (`id`)
126 135 ) $collate;",
127 136
128 - "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form_entries` (
137 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form_entries` (
129 138 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
130 139 `form_id` bigint(20) unsigned DEFAULT NULL,
131 140 `user_id` bigint(20) unsigned DEFAULT NULL,
132 141 `user_ip` varchar(255) DEFAULT NULL,
@@ -131,9 +140,9 @@
131 140 `user_id` bigint(20) unsigned DEFAULT NULL,
132 141 `user_ip` varchar(255) DEFAULT NULL,
133 142 `user_location` text DEFAULT NULL,
134 143 `user_device` varchar(50) DEFAULT NULL,
135 - `referer` varchar(255) DEFAULT NULL,
144 + `referer` TEXT DEFAULT NULL,
136 145 `status` tinyint(1) DEFAULT 0,/* 0 not viewed, 1 viewed, 2 trashed */
137 146 `created_at` datetime DEFAULT NULL,
138 147 `updated_at` datetime DEFAULT NULL,
139 148 PRIMARY KEY (`id`),
@@ -139,9 +148,9 @@
139 148 PRIMARY KEY (`id`),
140 149 KEY `form_id` (`form_id`)
141 150 ) $collate;",
142 151
143 - "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form_entrymeta` (
152 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form_entrymeta` (
144 153 `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
145 154 `bitforms_form_entry_id` bigint(20) unsigned DEFAULT NULL,
146 155 `meta_key` varchar(255) DEFAULT NULL,
147 156 `meta_value` longtext,
@@ -149,9 +158,9 @@
149 158 KEY `meta_key` (`meta_key`({$max_index_length})),
150 159 KEY `entry_id` (`bitforms_form_entry_id`)
151 160 ) $collate;",
152 161
153 - "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form_entry_log` (
162 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form_entry_log` (
154 163 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
155 164 `user_id` int(11) NOT NULL,
156 165 `log_type` varchar(50) DEFAULT NULL,
157 166 `ip` int(11) DEFAULT NULL,
@@ -164,9 +173,9 @@
164 173 KEY `form_id` (`form_id`),
165 174 KEY `form_entry_id` (`form_entry_id`)
166 175 ) $collate;",
167 176
168 - "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form_log_details` (
177 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form_log_details` (
169 178 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
170 179 `log_id` bigint(20) NOT NULL,
171 180 `integration_id` bigint(20) DEFAULT NULL,
172 181 `api_type` varchar(255) DEFAULT NULL,
@@ -176,9 +185,9 @@
176 185 PRIMARY KEY (`id`),
177 186 KEY `log_id` (`log_id`),
178 187 KEY `integration_id` (`integration_id`)
179 188 ) $collate;",
180 - "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form_entry_relatedinfo` (
189 + "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_form_entry_relatedinfo` (
181 190 `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
182 191 `info_type` VARCHAR(50) NOT NULL,
183 192 `info_details` LONGTEXT NULL,
184 193 `form_id` BIGINT(20) UNSIGNED NOT NULL,
@@ -190,40 +199,97 @@
190 199 `updated_at` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
191 200 PRIMARY KEY (`id`),
192 201 KEY `form_id` (`form_id`),
193 202 KEY `entry_id` (`entry_id`)
194 - ) $collate;",
195 - );
203 + ) $collate;"
204 + ];
196 205
197 - $table_schema_update = array(
198 - "ALTER TABLE `{$wpdb->prefix}bitforms_form_entry_log`
199 - CHANGE COLUMN `log_type` `log_type` VARCHAR(50) NULL DEFAULT NULL,
206 + $table_schema_update = [
207 + "ALTER TABLE `{$wpdb->prefix}bitforms_form_entry_log`
208 + MODIFY `log_type` VARCHAR(50) NULL DEFAULT NULL,
209 + MODIFY `created_at` DATETIME NOT NULL,
210 + CHANGE COLUMN `meta_key` `content` LONGTEXT NULL,
200 211 ADD COLUMN `action_type` VARCHAR(50) NULL DEFAULT NULL,
201 - CHANGE COLUMN `meta_key` `content` LONGTEXT NULL,
202 - CHANGE COLUMN `created_at` `created_at` DATETIME NOT NULL",
203 - "ALTER TABLE `{$wpdb->prefix}bitforms_form_log_details`
204 - CHANGE COLUMN `api_type` `api_type` VARCHAR(255) NULL DEFAULT NULL,
205 - CHANGE COLUMN `response_obj` `response_obj` LONGTEXT NULL,
206 - CHANGE COLUMN `created_at` `created_at` DATETIME NOT NULL",
207 - );
212 + ADD COLUMN `content` LONGTEXT NULL AFTER `action_type`",
213 + "ALTER TABLE `{$wpdb->prefix}bitforms_form_log_details`
214 + MODIFY `api_type` VARCHAR(255) NULL DEFAULT NULL,
215 + MODIFY `response_obj` LONGTEXT NULL,
216 + MODIFY `created_at` DATETIME NOT NULL"
217 + ];
208 218
209 - include_once ABSPATH . 'wp-admin/includes/upgrade.php';
210 - foreach ($table_schema as $table) {
211 - dbDelta($table);
219 + try {
220 + include_once ABSPATH . 'wp-admin/includes/upgrade.php';
221 + foreach ($table_schema as $table) {
222 + dbDelta($table);
223 + }
224 + $installed_db_version = get_site_option('bitforms_db_version');
225 + if ($installed_db_version && version_compare('1.1', $installed_db_version, '>=')) {
226 + // if new db version is equal or higher than 1.1
227 + foreach ($table_schema_update as $query) {
228 + try {
229 + $wpdb->query($query);
230 + } catch (\Exception $e) {
231 + Log::debug_log("Update failed: {$e->getMessage()} in query: {$query}");
232 + }
212 233 }
213 - $installed_db_version = get_site_option("bitforms_db_version");
214 - if ($installed_db_version && version_compare('1.1', $installed_db_version, '<=')) {
215 - // if new db version is equal or higher than 1.1
216 - foreach ($table_schema_update as $table) {
217 - $wpdb->query($table);
218 - }
234 + }
235 + if ($installed_db_version && version_compare('1.3', $installed_db_version, '>=')) {
236 + // if new db version is equal or higher than 1.3
237 + $wpdb->query("ALTER TABLE `{$wpdb->prefix}bitforms_form_entries` MODIFY `user_ip` VARCHAR(255) NULL DEFAULT NULL");
238 + }
239 +
240 + if ($installed_db_version && version_compare('2.0', $installed_db_version, '>=')) {
241 + $table_name = $wpdb->prefix . 'bitforms_success_messages';
242 + if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$table_name}` LIKE 'message_config'")) {
243 + $wpdb->query(
244 + "ALTER TABLE `{$table_name}`
245 + ADD COLUMN `message_config` LONGTEXT NULL AFTER `message_content`"
246 + );
219 247 }
220 - if ($installed_db_version && version_compare('1.3', $installed_db_version, '<=')) {
221 - // if new db version is equal or higher than 1.3
222 - $wpdb->query("ALTER TABLE `{$wpdb->prefix}bitforms_form_entries` CHANGE `user_ip` `user_ip` VARCHAR(255) NULL DEFAULT NULL");
248 + $table_name = $wpdb->prefix . 'bitforms_form';
249 + if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$table_name}` LIKE 'builder_helper_state'")) {
250 + $wpdb->query(
251 + "ALTER TABLE `{$table_name}`
252 + ADD COLUMN `builder_helper_state` LONGTEXT NULL AFTER `form_content`,
253 + ADD COLUMN `atomic_class_map` LONGTEXT NULL AFTER `builder_helper_state`,
254 + ADD COLUMN `generated_script_page_ids` LONGTEXT NULL AFTER `atomic_class_map`"
255 + );
223 256 }
224 - update_site_option(
225 - 'bitforms_db_version',
226 - $bitforms_db_version
227 - );
257 + $table_name = $wpdb->prefix . 'bitforms_workflows';
258 + if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$table_name}` LIKE 'workflow_order'")) {
259 + $wpdb->query(
260 + "ALTER TABLE `{$table_name}`
261 + ADD COLUMN `workflow_order` INT(11) DEFAULT NULL AFTER `workflow_condition`"
262 + );
263 + }
264 + }
265 +
266 + if ($installed_db_version && version_compare('2.2', $installed_db_version, '>=')) {
267 + $table_name = $wpdb->prefix . 'bitforms_form_entries';
268 + if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$table_name}` LIKE 'referer'")) {
269 + $wpdb->query(
270 + "ALTER TABLE `{$table_name}`
271 + ADD COLUMN `referer` TEXT NULL DEFAULT NULL"
272 + );
273 + }
274 + }
275 +
276 + if ($installed_db_version && version_compare('2.4', $installed_db_version, '>=')) {
277 + $table_name = $wpdb->prefix . 'bitforms_workflows';
278 + if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$table_name}` LIKE 'workflow_status'")) {
279 + $wpdb->query(
280 + "ALTER TABLE `{$table_name}`
281 + ADD COLUMN `workflow_status` TINYINT(1) DEFAULT 1 NOT NULL AFTER `workflow_order`"
282 + );
283 + }
284 + }
285 +
286 + update_site_option(
287 + 'bitforms_db_version',
288 + $bitforms_db_version
289 + );
290 + } catch (\Exception $e) {
291 + // Log the error to a file or the database
292 + Log::debug_log('Error during DB migration: ' . $e->getMessage());
228 293 }
294 + }
229 295 }