*/ public static function table_suffixes(): array { $suffixes = [ 'bookline_webhook_deliveries', 'bookline_webhooks', 'bookline_verification_tokens', 'bookline_activity_log', 'bookline_settings', 'bookline_booking_forms', 'bookline_reminders', 'bookline_automation_runs', 'bookline_automations', 'bookline_notification_log', 'bookline_notification_templates', 'bookline_coupons', 'bookline_transaction_refunds', 'bookline_payments', 'bookline_entity_meta', 'bookline_transaction_intents', 'bookline_cart_items', 'bookline_carts', 'bookline_order_intents', 'bookline_booking_fields', 'bookline_booking_extras', 'bookline_bookings', 'bookline_orders', 'bookline_customers', 'bookline_schedule_overrides', 'bookline_schedules', 'bookline_agent_locations', 'bookline_locations', 'bookline_agent_services', 'bookline_agents', 'bookline_service_extra_links', 'bookline_service_extras', 'bookline_service_categories', 'bookline_service_durations', 'bookline_services', 'bookline_migrations', ]; $extra = []; if ( function_exists( 'apply_filters' ) ) { $filtered = apply_filters( 'bookline/uninstall/table_suffixes', [] ); if ( is_array( $filtered ) ) { $extra = $filtered; } } foreach ( $extra as $suffix ) { if ( ! is_string( $suffix ) ) { continue; } if ( 1 !== preg_match( '/^bookline_[a-z0-9_]+$/', $suffix ) ) { continue; } if ( ! in_array( $suffix, $suffixes, true ) ) { $suffixes[] = $suffix; } } return $suffixes; } /** * Drop all Bookline tables and options. * * @param wpdb|null $db Database handle. * * @since 0.1.0 */ public static function run( ?wpdb $db = null ): void { if ( null === $db ) { global $wpdb; $db = $wpdb; } foreach ( self::table_suffixes() as $suffix ) { $table = esc_sql( $db->prefix . $suffix ); $sql = 'DROP TABLE IF EXISTS `' . $table . '`'; // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange $db->query( $sql ); } $options = [ 'bookline_db_version', 'bookline_delete_data_on_uninstall', 'buildler_booking_licence', 'buildler_booking_licence_telemetry_consent', 'buildler_booking_licence_install_hash', ]; foreach ( $options as $option ) { delete_option( $option ); } delete_transient( 'bookline_migrating' ); delete_transient( 'bookline_heartbeat' ); } }