wp plugin uninstall udpate & cleanup migrations
This commit is contained in:
@@ -0,0 +1,43 @@
|
|||||||
|
# Generated manually on 2026-01-13
|
||||||
|
# Purpose: Drop all remaining blueprint-related tables
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('igny8_core_auth', '0030_drop_site_blueprints_table'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RunSQL(
|
||||||
|
sql="""
|
||||||
|
-- Drop foreign key constraints first
|
||||||
|
ALTER TABLE IF EXISTS igny8_page_blueprints
|
||||||
|
DROP CONSTRAINT IF EXISTS igny8_page_blueprints_sector_id_c7e67972_fk_igny8_sectors_id;
|
||||||
|
|
||||||
|
ALTER TABLE IF EXISTS igny8_site_blueprint_taxonomies
|
||||||
|
DROP CONSTRAINT IF EXISTS igny8_site_blueprint_sector_id_d80376a0_fk_igny8_sec;
|
||||||
|
|
||||||
|
ALTER TABLE IF EXISTS igny8_site_blueprint_clusters
|
||||||
|
DROP CONSTRAINT IF EXISTS igny8_site_blueprint_sector_id_34c615f1_fk_igny8_sec;
|
||||||
|
|
||||||
|
-- Drop tables in correct order (child tables first)
|
||||||
|
DROP TABLE IF EXISTS igny8_site_blueprint_taxonomies_clusters CASCADE;
|
||||||
|
DROP TABLE IF EXISTS igny8_site_blueprint_taxonomies CASCADE;
|
||||||
|
DROP TABLE IF EXISTS igny8_site_blueprint_clusters CASCADE;
|
||||||
|
DROP TABLE IF EXISTS igny8_page_blueprints CASCADE;
|
||||||
|
|
||||||
|
-- Drop any remaining sequences
|
||||||
|
DROP SEQUENCE IF EXISTS igny8_page_blueprints_id_seq;
|
||||||
|
DROP SEQUENCE IF EXISTS igny8_site_blueprint_taxonomies_id_seq;
|
||||||
|
DROP SEQUENCE IF EXISTS igny8_site_blueprint_clusters_id_seq;
|
||||||
|
DROP SEQUENCE IF EXISTS igny8_site_blueprint_taxonomies_clusters_id_seq;
|
||||||
|
""",
|
||||||
|
reverse_sql="""
|
||||||
|
-- Cannot reverse this migration - table structures were removed from models
|
||||||
|
SELECT 1;
|
||||||
|
"""
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -12,40 +12,119 @@ if (!defined('WP_UNINSTALL_PLUGIN')) {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove all options
|
// Remove all IGNY8 options from wp_options table
|
||||||
delete_option('igny8_access_token');
|
$igny8_options = array(
|
||||||
delete_option('igny8_refresh_token');
|
// Authentication & Connection
|
||||||
delete_option('igny8_email');
|
'igny8_access_token',
|
||||||
delete_option('igny8_site_id');
|
'igny8_refresh_token',
|
||||||
delete_option('igny8_last_site_sync');
|
'igny8_api_key',
|
||||||
delete_option('igny8_last_site_import_id');
|
'igny8_email',
|
||||||
delete_option('igny8_token_refreshed_at');
|
'igny8_site_id',
|
||||||
delete_option('igny8_bridge_version');
|
'igny8_integration_id',
|
||||||
|
'igny8_access_token_issued',
|
||||||
|
'igny8_token_refreshed_at',
|
||||||
|
'igny8_bridge_version',
|
||||||
|
|
||||||
|
// API & Health
|
||||||
|
'igny8_last_api_health_check',
|
||||||
|
'igny8_api_key_revoked',
|
||||||
|
|
||||||
|
// Site Sync Timestamps
|
||||||
|
'igny8_last_site_sync',
|
||||||
|
'igny8_last_site_import_id',
|
||||||
|
'igny8_last_structure_sync',
|
||||||
|
'igny8_last_taxonomy_sync',
|
||||||
|
'igny8_last_keyword_sync',
|
||||||
|
'igny8_last_writer_sync',
|
||||||
|
'igny8_last_full_site_scan',
|
||||||
|
'igny8_last_semantic_map',
|
||||||
|
'igny8_last_semantic_map_summary',
|
||||||
|
'igny8_last_incremental_site_sync',
|
||||||
|
'igny8_last_link_graph_sync',
|
||||||
|
'igny8_last_link_graph_count',
|
||||||
|
'igny8_last_sync_from_igny8',
|
||||||
|
'igny8_last_site_snapshot',
|
||||||
|
|
||||||
|
// Settings & Configuration
|
||||||
|
'igny8_default_post_status',
|
||||||
|
'igny8_default_author_role',
|
||||||
|
'igny8_enable_woocommerce',
|
||||||
|
'igny8_enable_two_way_sync',
|
||||||
|
'igny8_connection_enabled',
|
||||||
|
'igny8_control_mode',
|
||||||
|
'igny8_widgets_enabled',
|
||||||
|
'igny8_toc_min_headings',
|
||||||
|
'igny8_auto_create_authors',
|
||||||
|
'igny8_show_image_description',
|
||||||
|
|
||||||
|
// Module & Feature Toggles
|
||||||
|
'igny8_enabled_modules',
|
||||||
|
'igny8_enabled_post_types',
|
||||||
|
'igny8_enabled_taxonomies',
|
||||||
|
'igny8_available_modules',
|
||||||
|
'igny8_supported_post_types',
|
||||||
|
'igny8_supported_taxonomies',
|
||||||
|
|
||||||
|
// Data & Mappings
|
||||||
|
'igny8_taxonomy_sector_mappings',
|
||||||
|
'igny8_link_queue',
|
||||||
|
'igny8_webhook_logs',
|
||||||
|
'igny8_site_scan_settings',
|
||||||
|
'igny8_site_metadata_v1',
|
||||||
|
|
||||||
|
// Sync & Queue
|
||||||
|
'igny8_sync_enabled',
|
||||||
|
);
|
||||||
|
|
||||||
// Remove all post meta (optional - uncomment if you want to remove all meta on uninstall)
|
// Delete all IGNY8 options
|
||||||
/*
|
foreach ($igny8_options as $option) {
|
||||||
|
delete_option($option);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove all post meta (IGNY8-specific metadata on posts)
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$wpdb->query("
|
$wpdb->query("
|
||||||
DELETE FROM {$wpdb->postmeta}
|
DELETE FROM {$wpdb->postmeta}
|
||||||
WHERE meta_key LIKE '_igny8_%'
|
WHERE meta_key LIKE '_igny8_%' OR meta_key LIKE 'igny8_%'
|
||||||
");
|
");
|
||||||
*/
|
|
||||||
|
|
||||||
// Unschedule cron jobs
|
// Unschedule ALL cron jobs
|
||||||
$timestamp = wp_next_scheduled('igny8_sync_post_statuses');
|
$cron_hooks = array(
|
||||||
if ($timestamp) {
|
'igny8_sync_post_statuses',
|
||||||
wp_unschedule_event($timestamp, 'igny8_sync_post_statuses');
|
'igny8_sync_site_data',
|
||||||
|
'igny8_sync_from_igny8',
|
||||||
|
'igny8_cron_sync_post_statuses',
|
||||||
|
'igny8_cron_sync_site_data',
|
||||||
|
'igny8_cron_sync_from_igny8',
|
||||||
|
'igny8_cron_full_site_scan',
|
||||||
|
'igny8_cron_sync_keywords',
|
||||||
|
'igny8_cron_sync_taxonomies',
|
||||||
|
'igny8_clear_old_webhook_logs',
|
||||||
|
'igny8_batch_sync_post_statuses',
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($cron_hooks as $hook) {
|
||||||
|
$timestamp = wp_next_scheduled($hook);
|
||||||
|
while ($timestamp) {
|
||||||
|
wp_unschedule_event($timestamp, $hook);
|
||||||
|
$timestamp = wp_next_scheduled($hook);
|
||||||
|
}
|
||||||
|
// Also clear any hooks from the cron array
|
||||||
|
wp_clear_scheduled_hook($hook);
|
||||||
}
|
}
|
||||||
|
|
||||||
$timestamp = wp_next_scheduled('igny8_sync_site_data');
|
// Remove all IGNY8 transients
|
||||||
if ($timestamp) {
|
$wpdb->query("
|
||||||
wp_unschedule_event($timestamp, 'igny8_sync_site_data');
|
DELETE FROM {$wpdb->options}
|
||||||
}
|
WHERE option_name LIKE '_transient_igny8_%'
|
||||||
|
OR option_name LIKE '_transient_timeout_igny8_%'
|
||||||
|
");
|
||||||
|
|
||||||
$timestamp = wp_next_scheduled('igny8_sync_from_igny8');
|
// Remove any IGNY8 user meta
|
||||||
if ($timestamp) {
|
$wpdb->query("
|
||||||
wp_unschedule_event($timestamp, 'igny8_sync_from_igny8');
|
DELETE FROM {$wpdb->usermeta}
|
||||||
}
|
WHERE meta_key LIKE 'igny8_%' OR meta_key LIKE '_igny8_%'
|
||||||
|
");
|
||||||
|
|
||||||
// Note: Taxonomies and terms are NOT deleted
|
// Note: Taxonomies and terms are NOT deleted
|
||||||
// They remain in WordPress for user reference
|
// They remain in WordPress for user reference
|
||||||
|
|||||||
Reference in New Issue
Block a user