publication, 'processPublication'], 10, 1); add_action('crocoai_dbridge_process_media_job', [$this->publication, 'processMedia'], 10, 1); add_action('crocoai_dbridge_process_attribute_lookup', [$this->publication, 'processAttributeLookup']); add_action('crocoai_dbridge_cleanup', [$this, 'cleanup']); // Compatibility: Action Scheduler events queued before the rename. add_action('wpi_process_publication_job', [$this->publication, 'processPublication'], 10, 1); add_action('wpi_process_media_job', [$this->publication, 'processMedia'], 10, 1); add_action('wpi_process_attribute_lookup', [$this->publication, 'processAttributeLookup']); add_action('wpi_cleanup', [$this, 'cleanup']); add_action('action_scheduler_init', [$this, 'syncSchedules']); } public function syncSchedules(): void { $this->retireLegacySources(); if (!function_exists('as_has_scheduled_action')) { return; } if ( !as_has_scheduled_action('crocoai_dbridge_cleanup', [], 'crocoai-data-bridge') && !as_has_scheduled_action('wpi_cleanup', [], 'woo-product-importer') ) { as_schedule_recurring_action(time() + HOUR_IN_SECONDS, DAY_IN_SECONDS, 'crocoai_dbridge_cleanup', [], 'crocoai-data-bridge', true); } $this->publication->ensureActiveJobs(); } public function cleanup(): void { $settings = get_option('crocoai_dbridge_settings', []); (new Repository())->prune((int) ($settings['retention_days'] ?? 30)); } private function retireLegacySources(): void { if (get_option('crocoai_dbridge_legacy_sources_retired') === '1') { return; } if (function_exists('as_unschedule_all_actions')) { as_unschedule_all_actions('crocoai_dbridge_process_run', [], 'crocoai-data-bridge'); as_unschedule_all_actions('crocoai_dbridge_scheduled_source', [], 'crocoai-data-bridge'); as_unschedule_all_actions('wpi_process_run', [], 'woo-product-importer'); as_unschedule_all_actions('wpi_scheduled_source', [], 'woo-product-importer'); } global $wpdb; $wpdb->query($wpdb->prepare( 'UPDATE %i SET enabled=0 WHERE enabled<>0', Database::table('sources') )); update_option('crocoai_dbridge_legacy_sources_retired', '1', false); } public static function deactivate(): void { if (function_exists('as_unschedule_all_actions')) { foreach ( [ 'crocoai_dbridge_process_run', 'crocoai_dbridge_process_publication_job', 'crocoai_dbridge_process_media_job', 'crocoai_dbridge_process_attribute_lookup', 'crocoai_dbridge_scheduled_source', 'crocoai_dbridge_cleanup', ] as $hook ) { as_unschedule_all_actions($hook, [], 'crocoai-data-bridge'); } foreach ( [ 'wpi_process_run', 'wpi_process_publication_job', 'wpi_process_media_job', 'wpi_process_attribute_lookup', 'wpi_scheduled_source', 'wpi_cleanup', ] as $hook ) { as_unschedule_all_actions($hook, [], 'woo-product-importer'); } } AttributeLookupRebuilder::deactivate(); } }