From 9ee03f4f7fae2bb8c64dbdccd5f23ce03ef679d2 Mon Sep 17 00:00:00 2001 From: alorig <220087330+alorig@users.noreply.github.com> Date: Sat, 22 Nov 2025 21:10:05 +0500 Subject: [PATCH] fix --- .../igny8_core/modules/integration/views.py | 22 +++++++++-- .../sites/WordPressIntegrationForm.tsx | 39 ++++++------------- frontend/src/pages/Sites/Settings.tsx | 31 ++++++++------- 3 files changed, 47 insertions(+), 45 deletions(-) diff --git a/backend/igny8_core/modules/integration/views.py b/backend/igny8_core/modules/integration/views.py index bada5004..8246c81e 100644 --- a/backend/igny8_core/modules/integration/views.py +++ b/backend/igny8_core/modules/integration/views.py @@ -16,6 +16,9 @@ from igny8_core.business.integration.services.integration_service import Integra from igny8_core.business.integration.services.sync_service import SyncService from igny8_core.business.integration.services.sync_health_service import SyncHealthService from igny8_core.business.integration.services.content_sync_service import ContentSyncService +import logging + +logger = logging.getLogger(__name__) class IntegrationViewSet(SiteSectorModelViewSet): @@ -186,15 +189,21 @@ class IntegrationViewSet(SiteSectorModelViewSet): # Try to find an existing integration for this site+platform integration = SiteIntegration.objects.filter(site=site, platform='wordpress').first() - # If not found, create a temporary in-memory integration object + # If not found, create and save the integration to database + integration_created = False if not integration: - integration = SiteIntegration( + integration = SiteIntegration.objects.create( + account=site.account, site=site, platform='wordpress', + platform_type='cms', config_json={'site_url': site_url} if site_url else {}, credentials_json={'api_key': api_key} if api_key else {}, - is_active=False + is_active=True, + sync_enabled=True ) + integration_created = True + logger.info(f"[IntegrationViewSet] Created WordPress integration {integration.id} for site {site.id}") service = IntegrationService() # Mark this as initial connection test since API key was provided in request body @@ -203,8 +212,15 @@ class IntegrationViewSet(SiteSectorModelViewSet): result = service._test_wordpress_connection(integration, is_initial_connection=is_initial_connection) if result.get('success'): + # Include integration_id in response so plugin can store it + result['integration_id'] = integration.id + result['integration_created'] = integration_created return success_response(result, request=request) else: + # If test failed and we just created integration, delete it + if integration_created: + integration.delete() + logger.info(f"[IntegrationViewSet] Deleted integration {integration.id} due to failed connection test") return error_response(result.get('message', 'Connection test failed'), None, status.HTTP_400_BAD_REQUEST, request) @action(detail=True, methods=['post']) diff --git a/frontend/src/components/sites/WordPressIntegrationForm.tsx b/frontend/src/components/sites/WordPressIntegrationForm.tsx index 286b6843..1ad2b1dc 100644 --- a/frontend/src/components/sites/WordPressIntegrationForm.tsx +++ b/frontend/src/components/sites/WordPressIntegrationForm.tsx @@ -178,46 +178,29 @@ export default function WordPressIntegrationForm({ return key.substring(0, 8) + '**********' + key.substring(key.length - 4); }; - // Toggle integration enabled status - const [integrationEnabled, setIntegrationEnabled] = useState(integration?.is_active ?? true); + // Toggle integration sync enabled status (not creation - that happens automatically) + const [integrationEnabled, setIntegrationEnabled] = useState(integration?.sync_enabled ?? false); const handleToggleIntegration = async (enabled: boolean) => { try { setIntegrationEnabled(enabled); if (integration) { - // Update existing integration + // Update existing integration - only toggle sync_enabled, not creation await integrationApi.updateIntegration(integration.id, { - is_active: enabled, + sync_enabled: enabled, } as any); - toast.success(enabled ? 'Integration enabled' : 'Integration disabled'); + toast.success(enabled ? 'Sync enabled' : 'Sync disabled'); // Reload integration const updated = await integrationApi.getWordPressIntegration(siteId); if (onIntegrationUpdate && updated) { onIntegrationUpdate(updated); } - } else if (enabled && apiKey) { - // Create integration when enabling for first time - // Use API key-only authentication (no username/password required) - await integrationApi.saveWordPressIntegration(siteId, { - url: siteUrl || '', - username: '', // Optional when using API key - app_password: '', // Optional when using API key - api_key: apiKey, - is_active: enabled, - sync_enabled: true, - }); - toast.success('Integration created and enabled'); - - // Reload integration - const updated = await integrationApi.getWordPressIntegration(siteId); - if (onIntegrationUpdate && updated) { - onIntegrationUpdate(updated); - } - } else if (enabled && !apiKey) { - // Toggle enabled but no API key - show error - toast.error('API key is required to enable WordPress integration'); + } else { + // Integration doesn't exist - it should be created automatically by plugin + // when user connects from WordPress side + toast.info('Integration will be created automatically when you connect from WordPress plugin. Please connect from the plugin first.'); setIntegrationEnabled(false); } } catch (error: any) { @@ -229,7 +212,7 @@ export default function WordPressIntegrationForm({ useEffect(() => { if (integration) { - setIntegrationEnabled(integration.is_active ?? true); + setIntegrationEnabled(integration.sync_enabled ?? false); } }, [integration]); @@ -255,7 +238,7 @@ export default function WordPressIntegrationForm({ {apiKey && (
- {integrationEnabled ? 'Enabled' : 'Disabled'} + {integrationEnabled ? 'Sync Enabled' : 'Sync Disabled'}