security->isGranted('plugin:plugins:manage')) { return $this->accessDenied(); } // Find the integration try { /** @var ConfigFormSyncInterface $integrationObject */ $integrationObject = $integrationsHelper->getIntegration($integration); $integrationConfiguration = $integrationObject->getIntegrationConfiguration(); } catch (IntegrationNotFoundException) { return $this->notFound(); } $keyword = $request->get('keyword'); $featureSettings = $integrationConfiguration->getFeatureSettings(); $currentFields = $this->getFields($request, $integrationObject, $featureSettings, $object); $fieldFilterHelper = new FieldFilterHelper($integrationObject); if ($keyword) { $fieldFilterHelper->filterFieldsByKeyword($object, $keyword, $page); } else { $fieldFilterHelper->filterFieldsByPage($object, $page); } // Create the form $form = $formFactory->create( IntegrationSyncSettingsObjectFieldMappingType::class, $currentFields, [ 'integrationFields' => $fieldFilterHelper->getFilteredFields(), 'page' => $page, 'keyword' => $keyword, 'totalFieldCount' => $fieldFilterHelper->getTotalFieldCount(), 'object' => $object, 'integrationObject' => $integrationObject, 'csrf_protection' => false, ] ); $html = $this->render( '@Integrations/Config/field_mapping.html.twig', [ 'form' => $form->createView(), 'integration' => $integration, 'object' => $object, 'page' => $page, ] )->getContent(); $prefix = "integration_config[featureSettings][sync][fieldMappings][$object]"; $idPrefix = str_replace(['][', '[', ']'], '_', $prefix); if (str_ends_with($idPrefix, '_')) { $idPrefix = substr($idPrefix, 0, -1); } $formType = 'integration_sync_settings_object_field_mapping'; $html = preg_replace('/'.$formType.'\[(.*?)\]/', $prefix.'[$1]', $html); $html = str_replace($formType, $idPrefix, $html); return new JsonResponse( [ 'success' => 1, 'html' => $html, ] ); } private function getFields(Request $request, ConfigFormSyncInterface $integrationObject, array $featureSettings, string $object): array { $fields = $featureSettings['sync']['fieldMappings'] ?? []; if (!isset($fields[$object])) { $fields[$object] = []; } // Pull those changed from session $session = $request->getSession(); $sessionFields = $session->get(sprintf('%s-fields', $integrationObject->getName()), []); if (!isset($sessionFields[$object])) { return $fields[$object]; } $fieldMerger = new FieldMergerHelper($integrationObject, $fields); $fieldMerger->mergeSyncFieldMapping($object, $sessionFields[$object]); return $fieldMerger->getFieldMappings()[$object]; } }