HEX
Server: Apache/2.4.65 (Debian)
System: Linux 88f31f35b0b8 6.1.0-38-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.147-1 (2025-08-02) x86_64
User: www-data (33)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/html/wp-content/plugins/advanced-ads-tracking/includes/installation/class-uninstall.php
<?php
/**
 * The class provides plugin uninstallation routines.
 *
 * @package AdvancedAds\Tracking
 * @author  Advanced Ads <info@wpadvancedads.com>
 * @since   2.6.0
 */

namespace AdvancedAds\Tracking\Installation;

use Advanced_Ads_Admin_Licenses;
use AdvancedAds\Tracking\Debugger;
use AdvancedAds\Tracking\Constants;
use AdvancedAds\Framework\Interfaces\Initializer_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Uninstall.
 *
 * phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery
 * phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching
 * phpcs:disable WordPress.DB.DirectDatabaseQuery.SchemaChange
 */
class Uninstall implements Initializer_Interface {

	/**
	 * Runs this initializer.
	 *
	 * @return void
	 */
	public function initialize(): void {
		$this->license();
		( new Tracking_Installer() )->uninstall(); // Remove AJAX dropin.

		if ( ! is_multisite() ) {
			$this->uninstall();
			return;
		}

		$site_ids = Install::get_sites();

		if ( empty( $site_ids ) ) {
			return;
		}

		foreach ( $site_ids as $site_id ) {
			switch_to_blog( $site_id );
			$this->uninstall();
			restore_current_blog();
		}
	}

	/**
	 * Deactivate license
	 *
	 * @return void
	 */
	private function license(): void {
		// Early bail!!
		if ( ! class_exists( 'Advanced_Ads_Admin_Licenses' ) ) {
			return;
		}

		$options_key = 'advanced-ads-tracking';
		$manager     = Advanced_Ads_Admin_Licenses::get_instance();

		if ( 'valid' === $manager->get_license_status( $options_key ) ) {
			$manager->deactivate_license( 'tracking', 'Tracking', $options_key );
		}
	}

	/**
	 * Fired for each blog when the plugin is uninstalled.
	 *
	 * @return void
	 */
	private function uninstall(): void {
		$options = get_option( Constants::OPTIONS_SLUG );

		if ( isset( $options['uninstall'] ) && $options['uninstall'] ) {
			$this->drop_tables();
			$this->delete_options();
			$this->delete_usermeta();

			wp_cache_flush();
		}
	}

	/**
	 * Drop tables
	 *
	 * @return void
	 */
	private function drop_tables(): void {
		global $wpdb;

		$wpdb->query(
			$wpdb->prepare(
				'DROP TABLE IF EXISTS %s, %s;',
				$wpdb->prefix . 'advads_impressions',
				$wpdb->prefix . 'advads_clicks'
			)
		);
	}

	/**
	 * Delete options.
	 *
	 * @return void
	 */
	private function delete_options(): void {
		delete_option( 'advanced-ads-tracking' );
		delete_option( Debugger::DEBUG_FILENAME_OPT );
		delete_option( Debugger::DEBUG_OPT );
	}

	/**
	 * Delete usermeta.
	 *
	 * @return void
	 */
	private function delete_usermeta(): void {
		delete_metadata( 'user', null, 'advads_tracking_performing_ads_prefs', '', true );
	}
}