PluginProbe
Booktics – Appointment Booking Calendar for Service Businesses / 1.0.28
Booktics – Appointment Booking Calendar for Service Businesses v1.0.28
1.0.29 1.0.28 1.0.27 1.0.26 1.0.25 1.0.24 1.0.23 1.0.22 1.0.21 1.0.20 1.0.19 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.2 1.0.3 All 31 releases
← All changes | base/installer.php +36 -12 1.0.12 → 1.0.28 View file →
@@ -1,8 +1,12 @@
1 1 <?php
2 2
3 3 namespace Booktics;
4 4
5 +if ( ! defined( 'ABSPATH' ) ) {
6 + exit;
7 +}
8 +
5 9 use Booktics\Dummy_Data\Dummy_Data_Manager;
6 10
7 11 class Installer {
8 12 /**
@@ -88,8 +92,9 @@
88 92 customer_note VARCHAR(100) DEFAULT NULL,
89 93 status VARCHAR(50) DEFAULT 'pending',
90 94 payment_status VARCHAR(50) DEFAULT NULL,
91 95 timezone VARCHAR(50) DEFAULT 'UTC',
96 + currency VARCHAR(10) DEFAULT NULL,
92 97 price_breakdown JSON DEFAULT NULL,
93 98 tax_total VARCHAR(100) DEFAULT NULL,
94 99 coupon_code VARCHAR(100) DEFAULT NULL,
95 100 coupon_discount VARCHAR(100) DEFAULT NULL,
@@ -147,8 +152,21 @@
147 152 foreach ( $table_schema as $table_sql ) {
148 153 dbDelta( $table_sql );
149 154 }
150 155
156 + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.NotPrepared -- Schema migration; direct DB access required, caching inappropriate for DDL, identifiers sanitized via esc_sql().
157 +
158 + // Add currency column to existing orders table if it doesn't exist
159 + $orders_table = "{$table_prefix}booktics_orders";
160 + $column_exists = $wpdb->get_results(
161 + "SHOW COLUMNS FROM `" . \esc_sql( $orders_table ) . "` LIKE 'currency'"
162 + );
163 + if ( empty( $column_exists ) ) {
164 + $wpdb->query(
165 + "ALTER TABLE `" . \esc_sql( $orders_table ) . "` ADD COLUMN currency VARCHAR(10) DEFAULT NULL AFTER timezone"
166 + );
167 + }
168 +
151 169 // Handle booktics_guests table
152 170 $guests_table = "{$table_prefix}booktics_guests";
153 171 $guests_columns = $wpdb->get_col( 'DESC `' . \esc_sql( $guests_table ) . '`', 0 );
154 172
@@ -217,15 +235,17 @@
217 235 );
218 236
219 237 foreach ( $orders_columns_to_add as $column => $definition ) {
220 238 if ( ! in_array( $column, $orders_columns, true ) ) {
221 - $query = sprintf(
222 - 'ALTER TABLE `%s` ADD COLUMN `%s` %s',
223 - esc_sql( $orders_table ),
224 - esc_sql( $column ),
225 - $definition
239 + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.NotPrepared -- Schema migration; identifiers sanitized via esc_sql().
240 + $wpdb->query(
241 + sprintf(
242 + 'ALTER TABLE `%s` ADD COLUMN `%s` %s',
243 + esc_sql( $orders_table ),
244 + esc_sql( $column ),
245 + $definition
246 + )
226 247 );
227 - $wpdb->query( $query );
228 248 }
229 249 }
230 250
231 251 // Add index for directorist_id if it doesn't exist
@@ -269,15 +289,19 @@
269 289 );
270 290
271 291 foreach ( $cart_items_columns_to_add as $column => $definition ) {
272 292 if ( ! in_array( $column, $cart_items_columns, true ) ) {
273 - $query = sprintf(
274 - 'ALTER TABLE `%s` ADD COLUMN `%s` %s',
275 - esc_sql( $cart_items_table ),
276 - esc_sql( $column ),
277 - $definition
293 + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.NotPrepared -- Schema migration; identifiers sanitized via esc_sql().
294 + $wpdb->query(
295 + sprintf(
296 + 'ALTER TABLE `%s` ADD COLUMN `%s` %s',
297 + esc_sql( $cart_items_table ),
298 + esc_sql( $column ),
299 + $definition
300 + )
278 301 );
279 - $wpdb->query( $query );
280 302 }
281 303 }
304 +
305 + // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.NotPrepared
282 306 }
283 307 }