Uaix Locale Router Uninstall
**Site relevance:** Antichrist.net
**Memory type:** plugin source memory
**Source path:** Antichrist.net/wp-content/plugins/uaix-locale-router/uninstall.php
**Size:** 3.3 KB
Summary
Uninstall UAIX Locale Router.
Source Preview
This source file is short enough to preview directly on its source-memory page.
<?php
/**
* Uninstall UAIX Locale Router.
*
* @package UAIXLocaleRouter
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
exit;
}
global $wpdb;
$settings = get_option( 'uaixlr_settings', array() );
$cleanup_legacy_ns12 = is_array( $settings ) && ! empty( $settings['cleanup_legacy_ns12'] );
$option_names = array(
'uaixlr_settings',
'uaixlr_supported_locales',
'uaixlr_default_locale',
'uaixlr_dictionary_manifest',
'uaixlr_install_version',
'uaixlr_bootstrap_notice',
'uaixlr_bootstrap_notice_raw',
'uaixlr_migration_status',
'_transient_uaixlr_admin_notice',
'_transient_timeout_uaixlr_admin_notice',
'_transient_uaixlr_link_review',
'_transient_timeout_uaixlr_link_review',
'_transient_uaixlr_localized_home_check',
'_transient_timeout_uaixlr_localized_home_check',
'_transient_uaixlr_translation_runtime_strings',
'_transient_timeout_uaixlr_translation_runtime_strings',
);
foreach ( $option_names as $option_name ) {
delete_option( $option_name );
delete_site_option( $option_name );
}
$table_name = $wpdb->prefix . 'uaixlr_dictionary_validation';
$wpdb->query( "DROP TABLE IF EXISTS {$table_name}" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$upload_dir = wp_upload_dir();
$base_dir = isset( $upload_dir['basedir'] ) ? trailingslashit( $upload_dir['basedir'] ) . 'uaix-locale-router' : '';
uaixlr_uninstall_remove_directory( $base_dir, isset( $upload_dir['basedir'] ) ? $upload_dir['basedir'] : '' );
if ( $cleanup_legacy_ns12 ) {
$legacy_options = array(
'ns12lr_settings',
'ns12lr_supported_locales',
'ns12lr_default_locale',
'ns12lr_dictionary_manifest',
'ns12lr_install_version',
'ns12lr_bootstrap_notice',
'ns12lr_bootstrap_notice_raw',
'_transient_ns12lr_admin_notice',
'_transient_timeout_ns12lr_admin_notice',
);
foreach ( $legacy_options as $legacy_option ) {
delete_option( $legacy_option );
delete_site_option( $legacy_option );
}
$legacy_table_name = $wpdb->prefix . 'ns12lr_dictionary_validation';
$wpdb->query( "DROP TABLE IF EXISTS {$legacy_table_name}" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$legacy_base_dir = isset( $upload_dir['basedir'] ) ? trailingslashit( $upload_dir['basedir'] ) . 'ns12-locale-router' : '';
uaixlr_uninstall_remove_directory( $legacy_base_dir, isset( $upload_dir['basedir'] ) ? $upload_dir['basedir'] : '' );
}
/**
* Remove a plugin-owned upload directory after confirming it lives under uploads.
*
* @param string $base_dir Directory to delete.
* @param string $uploads_base WordPress uploads base directory.
* @return void
*/
function uaixlr_uninstall_remove_directory( $base_dir, $uploads_base ) {
if ( '' === $base_dir || '' === $uploads_base || ! is_dir( $base_dir ) ) {
return;
}
$real_base = realpath( $base_dir );
$real_uploads = realpath( $uploads_base );
if ( false === $real_base || false === $real_uploads || 0 !== strpos( $real_base, $real_uploads ) ) {
return;
}
$items = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator( $base_dir, FilesystemIterator::SKIP_DOTS ),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ( $items as $item ) {
if ( $item->isDir() ) {
rmdir( $item->getPathname() );
continue;
}
unlink( $item->getPathname() );
}
rmdir( $base_dir );
}