robotstxt-mediaaudit/uninstall.php
2026-06-08 18:01:39 +00:00

90 lines
3.1 KiB
PHP

<?php
/**
* Fired when the plugin is uninstalled.
*
* Drops all plugin data only if the user has explicitly opted in via Settings.
* By default, data is preserved. On Multisite, iterates all sites.
*
* @package MediaRightsAudit
*/
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
exit;
}
global $wpdb;
if ( is_multisite() ) {
// In Multisite, read the delete preference from the network settings option.
$net_raw = get_site_option( 'robotstxt_mediaaudit_network_settings', array() );
$net_opts = is_array( $net_raw ) ? $net_raw : array();
$delete = ! empty( $net_opts['delete_on_uninstall'] );
// Also check any site that may have its own setting.
if ( ! $delete ) {
// Check the main site's per-site setting as a fallback.
switch_to_blog( get_main_site_id() );
$site_raw = get_option( 'robotstxt_mediaaudit_settings', array() );
$site_opts = is_array( $site_raw ) ? $site_raw : array();
$delete = ! empty( $site_opts['delete_on_uninstall'] );
restore_current_blog();
}
if ( ! $delete ) {
return;
}
// Drop per-site tables for every site.
$sites = get_sites(
array(
'fields' => 'ids',
'number' => 0,
)
);
if ( is_array( $sites ) ) {
foreach ( $sites as $site_id ) {
switch_to_blog( (int) $site_id );
// phpcs:disable WordPress.DB.DirectDatabaseQuery
$wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}mra_dismissed_alerts`" );
$wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}mra_provider_status`" );
$wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}mra_external_results`" );
$wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}mra_media_usage`" );
$wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}mra_media_index`" );
// phpcs:enable WordPress.DB.DirectDatabaseQuery
delete_option( 'robotstxt_mediaaudit_db_version' );
delete_option( 'robotstxt_mediaaudit_settings' );
restore_current_blog();
}
}
// Drop the network mirror table (lives in main site DB, uses base_prefix).
// phpcs:ignore WordPress.DB.DirectDatabaseQuery,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->base_prefix}mra_network_index`" );
delete_site_option( 'robotstxt_mediaaudit_network_mode' );
delete_site_option( 'robotstxt_mediaaudit_network_settings' );
} else {
// Single-site uninstall.
$raw = get_option( 'robotstxt_mediaaudit_settings', array() );
$settings = is_array( $raw ) ? $raw : array();
$delete = ! empty( $settings['delete_on_uninstall'] );
if ( ! $delete ) {
return;
}
// phpcs:disable WordPress.DB.DirectDatabaseQuery
$wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}mra_dismissed_alerts`" );
$wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}mra_provider_status`" );
$wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}mra_external_results`" );
$wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}mra_media_usage`" );
$wpdb->query( "DROP TABLE IF EXISTS `{$wpdb->prefix}mra_media_index`" );
// phpcs:enable WordPress.DB.DirectDatabaseQuery
delete_option( 'robotstxt_mediaaudit_db_version' );
delete_option( 'robotstxt_mediaaudit_settings' );
}