93 lines
3.3 KiB
PHP
93 lines
3.3 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;
|
|
|
|
// User preferences are always removed: they are not user data, they are UI state.
|
|
$wpdb->delete( $wpdb->usermeta, array( 'meta_key' => 'robotstxt_mediaaudit_manager_notice_dismissed' ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery,WordPress.DB.SlowDBQuery.slow_db_query_meta_key
|
|
|
|
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' );
|
|
}
|