prefix; $preserve_everything = get_option('aieo_preserve_data_on_uninstall', '0') === '1'; $keep_embeddings = get_option('aieo_keep_embeddings_on_deactivation', '1') === '1'; $keep_chat_history = get_option('aieo_keep_chat_history_on_deactivation', '1') === '1'; $keep_archive = get_option('aieo_keep_session_archive_on_deactivation', '0') === '1'; $keep_sessions = get_option('aieo_keep_sessions_on_deactivation', '0') === '1'; $spare = array(); if ($keep_embeddings) { $spare[] = $prefix . 'aieo_chat_embeddings'; } if ($keep_chat_history) { $spare[] = $prefix . 'aieo_chat_history'; } if ($keep_archive) { $spare[] = $prefix . 'aieo_sessions_archive'; $spare[] = $prefix . 'aieo_sessions_statics_archive'; } if ($keep_sessions) { $spare[] = $prefix . 'aieo_sessions'; $spare[] = $prefix . 'aieo_sessions_statics'; } $spare = array_flip($spare); $wpdb->hide_errors(); $cron = _get_cron_array(); if (is_array($cron)) { foreach ($cron as $timestamp => $hooks) { if (!is_array($hooks)) { continue; } foreach ($hooks as $hook => $events) { if (strpos($hook, 'aieo_') !== 0 || !is_array($events)) { continue; } foreach ($events as $event) { $args = isset($event['args']) && is_array($event['args']) ? $event['args'] : array(); wp_unschedule_event($timestamp, $hook, $args); } } } } $as_actions = $wpdb->prefix . 'actionscheduler_actions'; if ($wpdb->get_var($wpdb->prepare('SHOW TABLES LIKE %s', $as_actions)) === $as_actions) { $wpdb->query( $wpdb->prepare( "DELETE FROM `{$as_actions}` WHERE hook LIKE %s", $wpdb->esc_like('aieo_') . '%' ) ); } $routines = $wpdb->get_results( $wpdb->prepare( "SELECT ROUTINE_NAME, ROUTINE_TYPE FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE() AND ( ROUTINE_NAME LIKE %s OR ROUTINE_NAME LIKE %s OR ROUTINE_NAME LIKE %s )", $wpdb->esc_like($prefix . 'AIEO_') . '%', $wpdb->esc_like('aieo_sp_') . '%', $wpdb->esc_like('AIEO_') . '%' ), ARRAY_A ); foreach ((array) $routines as $routine) { $name = preg_replace('/[^A-Za-z0-9_]/', '', (string) $routine['ROUTINE_NAME']); $type = strtoupper((string) $routine['ROUTINE_TYPE']) === 'FUNCTION' ? 'FUNCTION' : 'PROCEDURE'; if ($name === '') { continue; } $wpdb->query("DROP {$type} IF EXISTS `{$name}`"); } if (!$preserve_everything) { $tables = $wpdb->get_col( $wpdb->prepare('SHOW TABLES LIKE %s', $wpdb->esc_like($prefix . 'aieo_') . '%') ); if (!empty($tables)) { $wpdb->query('SET FOREIGN_KEY_CHECKS = 0'); foreach ($tables as $table) { if (isset($spare[$table])) { continue; } $safe = preg_replace('/[^A-Za-z0-9_]/', '', (string) $table); if ($safe === '') { continue; } $wpdb->query("DROP TABLE IF EXISTS `{$safe}`"); } $wpdb->query('SET FOREIGN_KEY_CHECKS = 1'); } } $wpdb->query( $wpdb->prepare( "DELETE FROM `{$wpdb->options}` WHERE option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s", $wpdb->esc_like('aieo_') . '%', $wpdb->esc_like('_transient_aieo_') . '%', $wpdb->esc_like('_transient_timeout_aieo_') . '%' ) ); $wpdb->query( $wpdb->prepare( "DELETE FROM `{$wpdb->options}` WHERE option_name LIKE %s OR option_name LIKE %s", $wpdb->esc_like('_site_transient_aieo_') . '%', $wpdb->esc_like('_site_transient_timeout_aieo_') . '%' ) ); wp_cache_flush(); } if (is_multisite()) { $site_ids = get_sites( array( 'fields' => 'ids', 'number' => 0, 'update_site_meta_cache' => false, ) ); foreach ((array) $site_ids as $site_id) { switch_to_blog((int) $site_id); aieo_uninstall_current_site(); restore_current_blog(); } } else { aieo_uninstall_current_site(); }