202 lines
5.4 KiB
PHP
202 lines
5.4 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Remove plugin settings data.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @package Smush
|
||
|
*/
|
||
|
|
||
|
use Smush\Core\Settings;
|
||
|
|
||
|
// If uninstall not called from WordPress exit.
|
||
|
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
|
||
|
exit();
|
||
|
}
|
||
|
|
||
|
if ( ! class_exists( '\\Smush\\Core\\Settings' ) ) {
|
||
|
/* @noinspection PhpIncludeInspection */
|
||
|
include_once plugin_dir_path( __FILE__ ) . '/core/class-settings.php';
|
||
|
}
|
||
|
$keep_data = Settings::get_instance()->get( 'keep_data' );
|
||
|
|
||
|
// Check if someone want to keep the stats and settings.
|
||
|
if ( ( defined( 'WP_SMUSH_PRESERVE_STATS' ) && WP_SMUSH_PRESERVE_STATS ) || true === $keep_data ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
global $wpdb;
|
||
|
|
||
|
$smushit_keys = array(
|
||
|
'wp-smush-resmush-list',
|
||
|
'wp-smush-nextgen-resmush-list',
|
||
|
'wp-smush-resize_sizes',
|
||
|
'wp-smush-transparent_png',
|
||
|
'wp-smush-image_sizes',
|
||
|
'wp-smush-super_smushed',
|
||
|
'wp-smush-super_smushed_nextgen',
|
||
|
'wp-smush-settings_updated',
|
||
|
'wp-smush-hide_update_info',
|
||
|
'wp-smush-install-type',
|
||
|
'wp-smush-version',
|
||
|
'wp-smush-scan',
|
||
|
'wp-smush-settings',
|
||
|
'wp-smush-cdn_status',
|
||
|
'wp-smush-lazy_load',
|
||
|
'wp-smush-last_run_sync',
|
||
|
'wp-smush-networkwide',
|
||
|
'wp-smush-cron_update_running',
|
||
|
'wp-smush-dismissed-notices',
|
||
|
'wp-smush-show_upgrade_modal',
|
||
|
'wp-smush-preset_configs',
|
||
|
'wp-smush-webp_hide_wizard',
|
||
|
'wp-smush-hide-tutorials',
|
||
|
'wp-smush-hide_tutorials_from_bulk_smush', // Possible leftover from 3.8.4.
|
||
|
'wp-smush-png2jpg-rewrite-rules-flushed',
|
||
|
'wp-smush-optimization-global-stats',
|
||
|
'wp-smush-resize-global-stats',
|
||
|
'wp-smush-png2jpg-global-stats',
|
||
|
'wp_smush_skip_image_sizes_recheck',
|
||
|
'wp_smush_image_sizes_state',
|
||
|
'wp_smush_global_stats',
|
||
|
'wp-smush-optimize-list',
|
||
|
'wp-smush-reoptimize-list',
|
||
|
'wp-smush-error-items-list',
|
||
|
'wp-smush-plugin-activated',
|
||
|
'wp_smush_run_optimize_on_scan_completed',
|
||
|
'wp-smush-nextgen-reoptimize-list',
|
||
|
'wp-smush-nextgen-super-smushed-list',
|
||
|
'wp_smush_scan_slice_size',
|
||
|
);
|
||
|
|
||
|
$db_keys = array(
|
||
|
'skip-smush-setup',
|
||
|
'smush_global_stats',
|
||
|
'wp_smush_stats_nextgen',
|
||
|
);
|
||
|
|
||
|
// Cache Keys.
|
||
|
$cache_smush_group = array(
|
||
|
'exceeding_items',
|
||
|
'wp-smush-resize_count',
|
||
|
'wp-smush-resize_savings',
|
||
|
'wp-smush-pngjpg_savings',
|
||
|
'wp-smush-smushed_ids',
|
||
|
'media_attachments',
|
||
|
'skipped_images',
|
||
|
'images_with_backups',
|
||
|
'wp-smush-dir_total_stats',
|
||
|
);
|
||
|
|
||
|
$cache_nextgen_group = array(
|
||
|
'wp_smush_images',
|
||
|
'wp_smush_images_smushed',
|
||
|
'wp_smush_images_unsmushed',
|
||
|
'wp_smush_stats_nextgen',
|
||
|
);
|
||
|
|
||
|
if ( ! is_multisite() ) {
|
||
|
// Delete Options.
|
||
|
foreach ( $smushit_keys as $key ) {
|
||
|
delete_option( $key );
|
||
|
delete_site_option( $key );
|
||
|
}
|
||
|
|
||
|
foreach ( $db_keys as $key ) {
|
||
|
delete_option( $key );
|
||
|
delete_site_option( $key );
|
||
|
}
|
||
|
|
||
|
// Delete Cache data.
|
||
|
foreach ( $cache_smush_group as $s_key ) {
|
||
|
wp_cache_delete( $s_key, 'wp-smush' );
|
||
|
}
|
||
|
|
||
|
foreach ( $cache_nextgen_group as $n_key ) {
|
||
|
wp_cache_delete( $n_key, 'nextgen' );
|
||
|
}
|
||
|
|
||
|
wp_cache_delete( 'get_image_sizes', 'smush_image_sizes' );
|
||
|
|
||
|
delete_transient( 'wp-smush-conflict_check' );
|
||
|
}
|
||
|
|
||
|
// Delete Directory Smush stats.
|
||
|
delete_option( 'dir_smush_stats' );
|
||
|
delete_option( 'wp_smush_scan' );
|
||
|
delete_option( 'wp_smush_api_auth' );
|
||
|
delete_site_option( 'wp_smush_api_auth' );
|
||
|
|
||
|
// Delete Post meta.
|
||
|
$meta_type = 'post';
|
||
|
$meta_key = 'wp-smpro-smush-data';
|
||
|
$meta_value = '';
|
||
|
$delete_all = true;
|
||
|
|
||
|
if ( is_multisite() ) {
|
||
|
$offset = 0;
|
||
|
$limit = 100;
|
||
|
while ( $blogs = $wpdb->get_results( "SELECT blog_id FROM {$wpdb->blogs} LIMIT $offset, $limit", ARRAY_A ) ) {
|
||
|
if ( $blogs ) {
|
||
|
foreach ( $blogs as $blog ) {
|
||
|
switch_to_blog( $blog['blog_id'] );
|
||
|
delete_metadata( $meta_type, null, $meta_key, $meta_value, $delete_all );
|
||
|
delete_metadata( $meta_type, null, 'wp-smush-lossy', '', $delete_all );
|
||
|
delete_metadata( $meta_type, null, 'wp-smush-resize_savings', '', $delete_all );
|
||
|
delete_metadata( $meta_type, null, 'wp-smush-original_file', '', $delete_all );
|
||
|
delete_metadata( $meta_type, null, 'wp-smush-pngjpg_savings', '', $delete_all );
|
||
|
|
||
|
foreach ( $smushit_keys as $key ) {
|
||
|
delete_option( $key );
|
||
|
delete_site_option( $key );
|
||
|
}
|
||
|
|
||
|
foreach ( $db_keys as $key ) {
|
||
|
delete_option( $key );
|
||
|
delete_site_option( $key );
|
||
|
}
|
||
|
|
||
|
// Delete Cache data.
|
||
|
foreach ( $cache_smush_group as $s_key ) {
|
||
|
wp_cache_delete( $s_key, 'wp-smush' );
|
||
|
}
|
||
|
|
||
|
foreach ( $cache_nextgen_group as $n_key ) {
|
||
|
wp_cache_delete( $n_key, 'nextgen' );
|
||
|
}
|
||
|
|
||
|
wp_cache_delete( 'get_image_sizes', 'smush_image_sizes' );
|
||
|
}
|
||
|
restore_current_blog();
|
||
|
}
|
||
|
$offset += $limit;
|
||
|
}
|
||
|
} else {
|
||
|
delete_metadata( $meta_type, null, $meta_key, $meta_value, $delete_all );
|
||
|
delete_metadata( $meta_type, null, 'wp-smush-lossy', '', $delete_all );
|
||
|
delete_metadata( $meta_type, null, 'wp-smush-resize_savings', '', $delete_all );
|
||
|
delete_metadata( $meta_type, null, 'wp-smush-original_file', '', $delete_all );
|
||
|
delete_metadata( $meta_type, null, 'wp-smush-pngjpg_savings', '', $delete_all );
|
||
|
}
|
||
|
// Delete Directory smush table.
|
||
|
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->base_prefix}smush_dir_images" );
|
||
|
|
||
|
// Delete directory scan data.
|
||
|
delete_option( 'wp-smush-scan-step' );
|
||
|
|
||
|
// Delete all WebP images.
|
||
|
global $wp_filesystem;
|
||
|
if ( is_null( $wp_filesystem ) ) {
|
||
|
WP_Filesystem();
|
||
|
}
|
||
|
|
||
|
$upload_dir = wp_get_upload_dir();
|
||
|
$webp_dir = dirname( $upload_dir['basedir'] ) . '/smush-webp';
|
||
|
$wp_filesystem->delete( $webp_dir, true );
|
||
|
|
||
|
// Delete WebP test image.
|
||
|
$webp_img = $upload_dir['basedir'] . '/smush-webp-test.png';
|
||
|
$wp_filesystem->delete( $webp_img );
|
||
|
|
||
|
// TODO: Add procedure to delete backup files
|
||
|
// TODO: Update NextGen Metadata to remove Smush stats on plugin deletion.
|