| @@ -14,8 +14,9 @@ | ||
| 14 | 14 | |
| 15 | 15 | $table = $wpdb->prefix . static::$tableName; |
| 16 | 16 | |
| 17 | 17 | if ($wpdb->get_var($wpdb->prepare("SHOW TABLES LIKE %s", $table)) != $table) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery |
| 18 | + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.SchemaChange | |
| 18 | 19 | $sql = "CREATE TABLE $table ( |
| 19 | 20 | `id` BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, |
| 20 | 21 | `hash` VARCHAR(192) NULL, |
| 21 | 22 | `calendar_id` BIGINT(20) UNSIGNED NOT NULL, |
| @@ -63,18 +64,30 @@ | ||
| 63 | 64 | KEY `fcal_b_calendar_id` (`calendar_id`), |
| 64 | 65 | KEY `fcal_b_fcrm_id` (`fcrm_id`), |
| 65 | 66 | KEY `fcal_b_event_id` (`event_id`), |
| 66 | 67 | KEY `fcal_b_booking_type` (`booking_type`), |
| 67 | - KEY `fcal_b_start_time` (`start_time`) | |
| 68 | + KEY `fcal_b_start_time` (`start_time`), | |
| 69 | + KEY `fcal_b_group_id` (`group_id`) | |
| 68 | 70 | ) $charsetCollate;"; |
| 69 | 71 | |
| 70 | 72 | require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); |
| 71 | 73 | |
| 74 | + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.SchemaChange -- dbDelta() is the safe schema-change wrapper. | |
| 72 | 75 | dbDelta($sql); |
| 73 | 76 | } else { |
| 74 | 77 | $isUtmContentMigrated = $wpdb->get_col($wpdb->prepare("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND COLUMN_NAME='utm_content' AND TABLE_NAME=%s",$table)); // phpcs:ignore WordPress.DB.DirectDatabaseQuery |
| 75 | 78 | if (!$isUtmContentMigrated) { |
| 76 | - $wpdb->query($wpdb->prepare("ALTER TABLE %s ADD COLUMN utm_content VARCHAR(192) NULL DEFAULT '' AFTER utm_term", $table)); // phpcs:ignore WordPress.DB.DirectDatabaseQuery | |
| 79 | + $safe_table = esc_sql($table); | |
| 80 | + $wpdb->query("ALTER TABLE `{$safe_table}` ADD COLUMN `utm_content` VARCHAR(192) NULL DEFAULT '' AFTER `utm_term`"); // phpcs:ignore WordPress.DB.DirectDatabaseQuery,WordPress.DB.PreparedSQL.InterpolatedNotPrepared | |
| 77 | 81 | } |
| 82 | + | |
| 83 | + $hasGroupIdIndex = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=%s AND INDEX_NAME='fcal_b_group_id'", $table)); // phpcs:ignore WordPress.DB.DirectDatabaseQuery | |
| 84 | + if (!$hasGroupIdIndex) { | |
| 85 | + $safe_table = esc_sql($table); | |
| 86 | + $wpdb->query("ALTER TABLE `{$safe_table}` ADD KEY `fcal_b_group_id` (`group_id`)"); // phpcs:ignore WordPress.DB.DirectDatabaseQuery,WordPress.DB.PreparedSQL.InterpolatedNotPrepared | |
| 87 | + } | |
| 78 | 88 | } |
| 89 | + | |
| 90 | + // Row locked by Booking::assignNextGroupId(). | |
| 91 | + $wpdb->query("INSERT IGNORE INTO {$wpdb->options} (option_name, option_value, autoload) VALUES ('fcal_booking_group_lock', '', 'no')"); // phpcs:ignore WordPress.DB.DirectDatabaseQuery | |
| 79 | 92 | } |
| 80 | 93 | } |