PluginProbe ʕ •ᴥ•ʔ
Appointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress / 5.6.10
Appointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress v5.6.10
5.6.10 5.6.9 5.6.8 5.6.7 5.6.6 5.6.5 5.6.4 5.6.3 5.6.2 5.6.1 5.6.0 5.5.2 5.5.1 5.5.0 5.4.2 trunk 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.1.91 5.1.92 5.1.93 5.1.94 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1
latepoint / uninstall.php
latepoint Last commit date
blocks 1 month ago languages 1 month ago lib 1 week ago public 1 week ago latepoint.php 1 week ago readme.txt 1 week ago uninstall.php 3 weeks ago
uninstall.php
120 lines
1 <?php
2 /**
3 * Fired when the plugin is uninstalled.
4 *
5 * Removes all LatePoint database tables and plugin settings when
6 * the "Remove all data on uninstall" option is enabled in Settings > General.
7 *
8 * @package LatePoint
9 */
10
11 // Exit if uninstall is not called from WordPress.
12 if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
13 exit;
14 }
15
16 global $wpdb;
17
18 $prefix = $wpdb->prefix;
19
20 // Read the setting directly from the custom settings table, since the plugin
21 // classes are not loaded during uninstall.
22 $settings_table = $prefix . 'latepoint_settings';
23
24 // Check whether the settings table still exists before querying it.
25 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- We need to run a direct query here since the plugin's DB classes are not available during uninstall.
26 $table_exists = $wpdb->get_var(
27 $wpdb->prepare( 'SHOW TABLES LIKE %s', $settings_table )
28 );
29
30 if ( $table_exists ) {
31 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- We need to run a direct query here since the plugin's DB classes are not available during uninstall.
32 $remove_data = $wpdb->get_var(
33 $wpdb->prepare(
34 "SELECT value FROM %i WHERE name = %s LIMIT 1",
35 $settings_table,
36 'remove_data_on_plugin_delete'
37 )
38 );
39 } else {
40 $remove_data = null;
41 }
42
43 // Only proceed with full data removal if the toggle is explicitly enabled ("on").
44 if ( 'on' !== $remove_data ) {
45 return;
46 }
47
48 // -------------------------------------------------------------------------
49 // Drop all LatePoint tables.
50 // The list mirrors OsDatabaseHelper::get_all_latepoint_tables() plus the
51 // two tables that are defined as constants but were missing from that method.
52 // -------------------------------------------------------------------------
53 $tables = [
54 $prefix . 'latepoint_bundles',
55 $prefix . 'latepoint_bundles_services',
56 $prefix . 'latepoint_bookings',
57 $prefix . 'latepoint_sessions',
58 $prefix . 'latepoint_services',
59 $prefix . 'latepoint_settings',
60 $prefix . 'latepoint_service_categories',
61 $prefix . 'latepoint_work_periods',
62 $prefix . 'latepoint_custom_prices',
63 $prefix . 'latepoint_agents_services',
64 $prefix . 'latepoint_activities',
65 $prefix . 'latepoint_transactions',
66 $prefix . 'latepoint_transaction_refunds',
67 $prefix . 'latepoint_transaction_intents',
68 $prefix . 'latepoint_agents',
69 $prefix . 'latepoint_customers',
70 $prefix . 'latepoint_customer_meta',
71 $prefix . 'latepoint_service_meta',
72 $prefix . 'latepoint_booking_meta',
73 $prefix . 'latepoint_agent_meta',
74 $prefix . 'latepoint_bundle_meta',
75 $prefix . 'latepoint_steps',
76 $prefix . 'latepoint_step_settings',
77 $prefix . 'latepoint_locations',
78 $prefix . 'latepoint_location_categories',
79 $prefix . 'latepoint_processes',
80 $prefix . 'latepoint_process_jobs',
81 $prefix . 'latepoint_carts',
82 $prefix . 'latepoint_cart_meta',
83 $prefix . 'latepoint_cart_items',
84 $prefix . 'latepoint_orders',
85 $prefix . 'latepoint_order_meta',
86 $prefix . 'latepoint_order_items',
87 $prefix . 'latepoint_order_intents',
88 $prefix . 'latepoint_order_intent_meta',
89 $prefix . 'latepoint_order_invoices',
90 $prefix . 'latepoint_payment_requests',
91 $prefix . 'latepoint_recurrences',
92 $prefix . 'latepoint_customer_otp_codes',
93 $prefix . 'latepoint_blocked_periods',
94 ];
95
96 foreach ( $tables as $table ) {
97 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.SchemaChange -- We need to run a direct query here since the plugin's DB classes are not available during uninstall.
98 $wpdb->query( $wpdb->prepare( 'DROP TABLE IF EXISTS %i', $table ) );
99 }
100
101 // -------------------------------------------------------------------------
102 // Delete WordPress options created by LatePoint.
103 // -------------------------------------------------------------------------
104 $options_to_delete = [
105 'latepoint_db_version',
106 'latepoint_wizard_visited',
107 'latepoint_redirect_to_wizard',
108 'latepoint_first_booking_created',
109 ];
110
111 foreach ( $options_to_delete as $option ) {
112 delete_option( $option );
113 }
114
115 // Remove any transients prefixed with latepoint_.
116 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- We need to run a direct query here since the plugin's DB classes are not available during uninstall.
117 $wpdb->query(
118 "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_latepoint_%' OR option_name LIKE '_transient_timeout_latepoint_%'"
119 );
120