PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 2.15.3
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v2.15.3
3.3.1 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 All 138 releases
← All changes | includes/Core/Database/DB.php +51 -209 3.3.12.15.3 View file →
@@ -8,10 +8,8 @@
8 8 */
9 9
10 10 namespace BitCode\BitForm\Core\Database;
11 11
12 -use BitCode\BitForm\Core\Util\Log;
13 -
14 12 /**
15 13 * Database Migration
16 14 */
17 15 final class DB
@@ -20,122 +18,8 @@
20 18 * Undocumented function
21 19 *
22 20 * @return void
23 21 */
24 -
25 - /**
26 - * Idempotently add the email-template status/config columns.
27 - *
28 - * @return void
29 - */
30 - public static function ensureEmailTemplateStatusColumn()
31 - {
32 - global $wpdb;
33 - $emailTable = $wpdb->prefix . 'bitforms_email_template';
34 - if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$emailTable}` LIKE 'status'")) {
35 - // Schema migration: table name interpolation only (no user input). $wpdb->prepare() cannot parameterize DDL.
36 - $wpdb->query(
37 - "ALTER TABLE `{$emailTable}`
38 - ADD COLUMN `status` TINYINT(1) DEFAULT 1 AFTER `body`,
39 - ADD COLUMN `config` LONGTEXT NULL AFTER `status`"
40 - );
41 - }
42 - }
43 -
44 - /**
45 - * Idempotently add the workflows `workflow_info` column.
46 - *
47 - * @return void
48 - */
49 - public static function ensureWorkflowInfoColumn()
50 - {
51 - global $wpdb;
52 - $table = $wpdb->prefix . 'bitforms_workflows';
53 - if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$table}` LIKE 'workflow_info'")) {
54 - // Schema migration: table name interpolation only (no user input). $wpdb->prepare() cannot parameterize DDL.
55 - $wpdb->query(
56 - "ALTER TABLE `{$table}`
57 - ADD COLUMN `workflow_info` LONGTEXT NULL AFTER `workflow_condition`"
58 - );
59 - }
60 - }
61 -
62 - /**
63 - * Idempotently add the workflows `workflow_category` column (conditional-logic classic/basic split).
64 - *
65 - * @return void
66 - */
67 - public static function ensureWorkflowCategoryColumn()
68 - {
69 - self::ensureWorkflowInfoColumn();
70 - global $wpdb;
71 - $table = $wpdb->prefix . 'bitforms_workflows';
72 - if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$table}` LIKE 'workflow_category'")) {
73 - // Schema migration: table name interpolation only (no user input). $wpdb->prepare() cannot parameterize DDL.
74 - $wpdb->query(
75 - "ALTER TABLE `{$table}`
76 - ADD COLUMN `workflow_category` VARCHAR(20) DEFAULT 'classic' AFTER `workflow_info`,
77 - ADD KEY `workflow_category` (`workflow_category`)"
78 - );
79 - }
80 - }
81 -
82 - /**
83 - * Idempotently add the workflows `workflow_order` column.
84 - *
85 - * @return void
86 - */
87 - public static function ensureWorkflowOrderColumn()
88 - {
89 - global $wpdb;
90 - $table = $wpdb->prefix . 'bitforms_workflows';
91 - if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$table}` LIKE 'workflow_order'")) {
92 - $wpdb->query(
93 - "ALTER TABLE `{$table}`
94 - ADD COLUMN `workflow_order` INT(11) DEFAULT NULL AFTER `workflow_condition`"
95 - );
96 - }
97 - }
98 -
99 - /**
100 - * Idempotently add the workflows `workflow_status` column.
101 - *
102 - * @return void
103 - */
104 - public static function ensureWorkflowStatusColumn()
105 - {
106 - self::ensureWorkflowOrderColumn();
107 - global $wpdb;
108 - $table = $wpdb->prefix . 'bitforms_workflows';
109 - if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$table}` LIKE 'workflow_status'")) {
110 - $wpdb->query(
111 - "ALTER TABLE `{$table}`
112 - ADD COLUMN `workflow_status` TINYINT(1) DEFAULT 1 NOT NULL AFTER `workflow_order`"
113 - );
114 - }
115 - }
116 -
117 - /**
118 - * Idempotently add every workflows column the queries reference, for installs whose
119 - * `bitforms_db_version` ran ahead of their real schema (a version-gated ALTER failed once).
120 - *
121 - * @return bool true when all four columns exist afterwards
122 - */
123 - public static function ensureWorkflowSchema()
124 - {
125 - global $wpdb;
126 - self::ensureWorkflowStatusColumn();
127 - self::ensureWorkflowCategoryColumn();
128 -
129 - $table = $wpdb->prefix . 'bitforms_workflows';
130 - foreach (['workflow_order', 'workflow_info', 'workflow_category', 'workflow_status'] as $column) {
131 - if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$table}` LIKE '{$column}'")) {
132 - return false;
133 - }
134 - }
135 - return true;
136 - }
137 -
138 22 public static function migrate()
139 23 {
140 24 global $wpdb;
141 25 global $bitforms_db_version;
@@ -193,12 +77,9 @@
193 77 `workflow_type` varchar(50) NOT NULL,
194 78 `workflow_run` varchar(50) NOT NULL,
195 79 `workflow_behaviour` varchar(25) NOT NULL,
196 80 `workflow_condition` longtext DEFAULT NULL,
197 - `workflow_info` longtext DEFAULT NULL,
198 - `workflow_category` varchar(20) DEFAULT 'classic',/* classic = legacy, basic = field show/hide, advanced = multi-condition routing */
199 81 `workflow_order` int(11) unsigned DEFAULT NULL,
200 - `workflow_status` tinyint(1) DEFAULT 1,/* 0 disable, 1 enable, 2 enable in field settings */
201 82 `form_id` bigint(20) unsigned DEFAULT NULL,
202 83 `user_id` bigint(20) unsigned DEFAULT NULL,
203 84 `user_ip` int(11) unsigned DEFAULT NULL,
204 85 `user_location` text DEFAULT NULL,
@@ -205,10 +86,9 @@
205 86 `user_device` varchar(50) DEFAULT NULL,
206 87 `created_at` datetime DEFAULT NULL,
207 88 `updated_at` datetime DEFAULT NULL,
208 89 PRIMARY KEY (`id`),
209 - KEY `form_id` (`form_id`),
210 - KEY `workflow_category` (`workflow_category`)
90 + KEY `form_id` (`form_id`)
211 91 ) $collate;",
212 92
213 93 "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}bitforms_success_messages` (
214 94 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
@@ -227,10 +107,8 @@
227 107 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
228 108 `title` text DEFAULT NULL,
229 109 `sub` text DEFAULT NULL,
230 110 `body` longtext DEFAULT NULL,
231 - `status` tinyint(1) DEFAULT 1,/* 0 disabled, 1 enabled */
232 - `config` longtext DEFAULT NULL,/* SendTo / From / From Name / CC / BCC / Reply-To / attachments JSON */
233 111 `form_id` bigint(20) unsigned DEFAULT NULL,
234 112 `user_id` bigint(20) unsigned DEFAULT NULL,
235 113 `user_ip` int(11) unsigned DEFAULT NULL,
236 114 `created_at` datetime DEFAULT NULL,
@@ -321,98 +199,62 @@
321 199 KEY `entry_id` (`entry_id`)
322 200 ) $collate;"
323 201 ];
324 202
325 - try {
326 - include_once ABSPATH . 'wp-admin/includes/upgrade.php';
327 - foreach ($table_schema as $table) {
328 - dbDelta($table);
329 - }
330 - $installed_db_version = get_option('bitforms_db_version');
331 - if ($installed_db_version && version_compare('1.1', $installed_db_version, '>=')) {
332 - // if new db version is equal or higher than 1.1
333 - // Schema migration: table name interpolation only (no user input). $wpdb->prepare() cannot parameterize DDL statements.
334 - try {
335 - $wpdb->query("ALTER TABLE `{$wpdb->prefix}bitforms_form_entry_log`
336 - MODIFY `log_type` VARCHAR(50) NULL DEFAULT NULL,
337 - MODIFY `created_at` DATETIME NOT NULL,
203 + $table_schema_update = [
204 + "ALTER TABLE `{$wpdb->prefix}bitforms_form_entry_log`
205 + CHANGE COLUMN `log_type` `log_type` VARCHAR(50) NULL DEFAULT NULL,
206 + ADD COLUMN `action_type` VARCHAR(50) NULL DEFAULT NULL,
338 207 CHANGE COLUMN `meta_key` `content` LONGTEXT NULL,
339 - ADD COLUMN `action_type` VARCHAR(50) NULL DEFAULT NULL,
340 - ADD COLUMN `content` LONGTEXT NULL AFTER `action_type`");
341 - } catch (\Exception $e) {
342 - Log::debug_log("Update failed: {$e->getMessage()} in query: ALTER TABLE `{$wpdb->prefix}bitforms_form_entry_log`...");
343 - }
344 - try {
345 - $wpdb->query("ALTER TABLE `{$wpdb->prefix}bitforms_form_log_details`
346 - MODIFY `api_type` VARCHAR(255) NULL DEFAULT NULL,
347 - MODIFY `response_obj` LONGTEXT NULL,
348 - MODIFY `created_at` DATETIME NOT NULL");
349 - } catch (\Exception $e) {
350 - Log::debug_log("Update failed: {$e->getMessage()} in query: ALTER TABLE `{$wpdb->prefix}bitforms_form_log_details`...");
351 - }
352 - }
353 - if ($installed_db_version && version_compare('1.3', $installed_db_version, '>=')) {
354 - // if new db version is equal or higher than 1.3
355 - $wpdb->query("ALTER TABLE `{$wpdb->prefix}bitforms_form_entries` MODIFY `user_ip` VARCHAR(255) NULL DEFAULT NULL");
356 - }
208 + CHANGE COLUMN `created_at` `created_at` DATETIME NOT NULL",
209 + "ALTER TABLE `{$wpdb->prefix}bitforms_form_log_details`
210 + CHANGE COLUMN `api_type` `api_type` VARCHAR(255) NULL DEFAULT NULL,
211 + CHANGE COLUMN `response_obj` `response_obj` LONGTEXT NULL,
212 + CHANGE COLUMN `created_at` `created_at` DATETIME NOT NULL",
213 + ];
357 214
358 - if ($installed_db_version && version_compare('2.0', $installed_db_version, '>=')) {
359 - if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$wpdb->prefix}bitforms_success_messages` LIKE 'message_config'")) {
360 - $wpdb->query(
361 - "ALTER TABLE `{$wpdb->prefix}bitforms_success_messages`
362 - ADD COLUMN `message_config` LONGTEXT NULL AFTER `message_content`"
363 - );
364 - }
365 - if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$wpdb->prefix}bitforms_form` LIKE 'builder_helper_state'")) {
366 - $wpdb->query(
367 - "ALTER TABLE `{$wpdb->prefix}bitforms_form`
368 - ADD COLUMN `builder_helper_state` LONGTEXT NULL AFTER `form_content`,
369 - ADD COLUMN `atomic_class_map` LONGTEXT NULL AFTER `builder_helper_state`,
370 - ADD COLUMN `generated_script_page_ids` LONGTEXT NULL AFTER `atomic_class_map`"
371 - );
372 - }
373 - if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$wpdb->prefix}bitforms_workflows` LIKE 'workflow_order'")) {
374 - $wpdb->query(
375 - "ALTER TABLE `{$wpdb->prefix}bitforms_workflows`
376 - ADD COLUMN `workflow_order` INT(11) DEFAULT NULL AFTER `workflow_condition`"
377 - );
378 - }
215 + include_once ABSPATH . 'wp-admin/includes/upgrade.php';
216 + foreach ($table_schema as $table) {
217 + dbDelta($table);
218 + }
219 + $installed_db_version = get_site_option('bitforms_db_version');
220 + if ($installed_db_version && version_compare('1.1', $installed_db_version, '>=')) {
221 + // if new db version is equal or higher than 1.1
222 + foreach ($table_schema_update as $table) {
223 + $wpdb->query($table);
379 224 }
225 + }
226 + if ($installed_db_version && version_compare('1.3', $installed_db_version, '>=')) {
227 + // if new db version is equal or higher than 1.3
228 + $wpdb->query("ALTER TABLE `{$wpdb->prefix}bitforms_form_entries` CHANGE `user_ip` `user_ip` VARCHAR(255) NULL DEFAULT NULL");
229 + }
380 230
381 - if ($installed_db_version && version_compare('2.2', $installed_db_version, '>=')) {
382 - if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$wpdb->prefix}bitforms_form_entries` LIKE 'referer'")) {
383 - $wpdb->query(
384 - "ALTER TABLE `{$wpdb->prefix}bitforms_form_entries`
385 - ADD COLUMN `referer` TEXT NULL DEFAULT NULL"
386 - );
387 - }
388 - }
231 + if ($installed_db_version && version_compare('2.0', $installed_db_version, '>=')) {
232 + $wpdb->query(
233 + "ALTER TABLE `{$wpdb->prefix}bitforms_success_messages`
234 + ADD `message_config` LONGTEXT NULL AFTER `message_content`"
235 + );
236 + $wpdb->query(
237 + "ALTER TABLE `{$wpdb->prefix}bitforms_form`
238 + ADD `builder_helper_state` LONGTEXT NULL AFTER `form_content`,
239 + ADD `atomic_class_map` LONGTEXT NULL AFTER `builder_helper_state`,
240 + ADD `generated_script_page_ids` LONGTEXT NULL AFTER `atomic_class_map`"
241 + );
242 + $wpdb->query(
243 + "ALTER TABLE `{$wpdb->prefix}bitforms_workflows`
244 + ADD `workflow_order` INT(11) DEFAULT NULL AFTER `workflow_condition`"
245 + );
246 + }
389 247
390 - if ($installed_db_version && version_compare('2.4', $installed_db_version, '>=')) {
391 - if (null === $wpdb->get_var("SHOW COLUMNS FROM `{$wpdb->prefix}bitforms_workflows` LIKE 'workflow_status'")) {
392 - $wpdb->query(
393 - "ALTER TABLE `{$wpdb->prefix}bitforms_workflows`
394 - ADD COLUMN `workflow_status` TINYINT(1) DEFAULT 1 NOT NULL AFTER `workflow_order`"
395 - );
396 - }
397 - }
248 + if ($installed_db_version && version_compare('2.2', $installed_db_version, '>=')) {
249 + $wpdb->query(
250 + "ALTER TABLE `{$wpdb->prefix}bitforms_form_entries`
251 + MODIFY `referer` TEXT DEFAULT NULL"
252 + );
253 + }
398 254
399 - // add workflow_info column if not exists
400 - if ($installed_db_version && version_compare('3.0', $installed_db_version, '>=')) {
401 - self::ensureWorkflowInfoColumn();
402 - }
403 -
404 - // add workflow_category column if not exists (conditional logic separation)
405 - // existing rows default to 'classic' so Free keeps executing them unchanged; data normalization in Fallback WorkFlow@normalizeCategory
406 - if ($installed_db_version && version_compare('3.2', $installed_db_version, '>=')) {
407 - self::ensureWorkflowCategoryColumn();
408 - // email template enable/disable + per-template config (SendTo/From/CC/BCC/Reply-To/attachments)
409 - self::ensureEmailTemplateStatusColumn();
410 - }
411 -
412 - update_option('bitforms_db_version', $bitforms_db_version, true);
413 - } catch (\Exception $e) {
414 - // Log the error to a file or the database
415 - Log::debug_log('Error during DB migration: ' . $e->getMessage());
416 - }
255 + update_site_option(
256 + 'bitforms_db_version',
257 + $bitforms_db_version
258 + );
417 259 }
418 260 }