<?php
use WP_Rocket\Engine\Optimization\RUCSS\Database\Tables\Resources;
use WP_Rocket\Engine\Optimization\RUCSS\Database\Tables\UsedCSS;
class WPRocketUninstall
{
private $cache_path;
private $config_path;
private $options = array('wp_rocket_settings', 'rocket_analytics_notice_displayed', 'rocketcdn_user_token', 'rocketcdn_process');
private $transients = array('wp_rocket_customer_data', 'rocket_notice_missing_tags', 'rocket_clear_cache', 'rocket_check_key_errors', 'rocket_send_analytics_data', 'rocket_critical_css_generation_process_running', 'rocket_critical_css_generation_process_complete', 'rocket_critical_css_generation_triggered', 'rocketcdn_status', 'rocketcdn_pricing', 'rocketcdn_purge_cache_response', 'rocket_cloudflare_ips', 'rocket_cloudflare_is_api_keys_valid', 'rocket_preload_triggered', 'rocket_preload_complete', 'rocket_preload_complete_time', 'rocket_preload_errors', 'rocket_database_optimization_process', 'rocket_database_optimization_process_complete');
private $events = array('rocket_purge_time_event', 'rocket_database_optimization_time_event', 'rocket_cache_dir_size_check', 'rocketcdn_check_subscription_status_event', 'rocket_cron_deactivate_cloudflare_devmode');
private $cache_dirs = array('wp-rocket', 'min', 'busting', 'critical-css');
private $rucss_resources_table;
private $rucss_usedcss_table;
public function __construct($cache_path, $config_path, $rucss_resources_table, $rucss_usedcss_table)
{
$this->cache_path = trailingslashit($cache_path);
$this->config_path = $config_path;
$this->rucss_resources_table = $rucss_resources_table;
$this->rucss_usedcss_table = $rucss_usedcss_table;
}
public function uninstall()
{
$this->delete_plugin_data();
$this->delete_cache_files();
$this->delete_config_files();
$this->drop_rucss_database_tables();
}
private function drop_rucss_database_tables()
{
$this->drop_rucss_current_site_tables();
if (!is_multisite()) {
return;
}
foreach (get_sites(['fields' => 'ids']) as $site_id) {
switch_to_blog($site_id);
$this->drop_rucss_current_site_tables();
restore_current_blog();
}
}
private function drop_rucss_current_site_tables()
{
if ($this->rucss_resources_table->exists()) {
$this->rucss_resources_table->uninstall();
}
if ($this->rucss_usedcss_table->exists()) {
$this->rucss_usedcss_table->uninstall();
}
}
private function delete_plugin_data()
{
delete_site_transient('wp_rocket_update_data');
delete_metadata('user', '', 'rocket_boxes', '', true);
array_walk($this->transients, 'delete_transient');
array_walk($this->options, 'delete_option');
foreach ($this->events as $event) {
wp_clear_scheduled_hook($event);
}
}
private function delete_cache_files()
{
foreach ($this->cache_dirs as $dir) {
$this->delete($this->cache_path . $dir);
}
}
private function delete_config_files()
{
$this->delete($this->config_path);
}
private function delete($file)
{
if (!is_dir($file)) {
@unlink($file);
return;
}
try {
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($file, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST);
} catch (UnexpectedValueException $e) {
return;
}
foreach ($iterator as $item) {
if ($item->isDir()) {
@rmdir($item);
continue;
}
@unlink($item);
}
@rmdir($file);
}
}