getIdentifiedObjects(); $unidentifiedObjects = $syncOrderDAO->getUnidentifiedObjects(); $objectMappings = new ObjectMappingsDAO(); foreach ($identifiedObjects as $objectName => $updateObjects) { $this->referenceResolver->resolveReferences($objectName, $updateObjects); $this->fieldValidator->validateFields($objectName, $updateObjects); $this->updateObjects($objectMappings, $objectName, $updateObjects, $syncOrderDAO); } foreach ($unidentifiedObjects as $objectName => $createObjects) { $this->referenceResolver->resolveReferences($objectName, $createObjects); $this->fieldValidator->validateFields($objectName, $createObjects); $this->createObjects($objectMappings, $objectName, $createObjects); } return $objectMappings; } /** * @param ObjectChangeDAO[] $updateObjects */ private function updateObjects(ObjectMappingsDAO $objectMappings, string $objectName, array $updateObjects, OrderDAO $syncOrderDAO): void { $updateCount = count($updateObjects); DebugLogger::log( MauticSyncDataExchange::NAME, sprintf( 'Updating %d %s object(s)', $updateCount, $objectName ), self::class.':'.__FUNCTION__ ); if (0 === $updateCount) { return; } try { $event = new InternalObjectUpdateEvent( $this->objectProvider->getObjectByName($objectName), $syncOrderDAO->getIdentifiedObjectIds($objectName), $updateObjects ); } catch (ObjectNotFoundException) { DebugLogger::log( MauticSyncDataExchange::NAME, $objectName, self::class.':'.__FUNCTION__ ); return; } $this->dispatcher->dispatch($event, IntegrationEvents::INTEGRATION_UPDATE_INTERNAL_OBJECTS); $updatedObjectMappings = $event->getUpdatedObjectMappings(); $this->mappingHelper->updateObjectMappings($updatedObjectMappings); // The ObjectMapping entity is pushed into UpdatedObjectMappingDAO in MappingHelper::updateObjectMapping in order // to make it available to the IntegrationEvents::INTEGRATION_BATCH_SYNC_COMPLETED_* events foreach ($updatedObjectMappings as $updatedObjectMapping) { if (!$updatedObjectMapping->getObjectMapping()) { continue; } $objectMappings->addUpdatedObjectMapping($updatedObjectMapping->getObjectMapping()); } } /** * @param ObjectChangeDAO[] $createObjects */ private function createObjects(ObjectMappingsDAO $objectMappings, string $objectName, array $createObjects): void { $createCount = count($createObjects); DebugLogger::log( MauticSyncDataExchange::NAME, sprintf( 'Creating %d %s object(s)', $createCount, $objectName ), self::class.':'.__FUNCTION__ ); if (0 === $createCount) { return; } try { $event = new InternalObjectCreateEvent( $this->objectProvider->getObjectByName($objectName), $createObjects ); } catch (ObjectNotFoundException) { DebugLogger::log( MauticSyncDataExchange::NAME, $objectName, self::class.':'.__FUNCTION__ ); return; } $this->dispatcher->dispatch($event, IntegrationEvents::INTEGRATION_CREATE_INTERNAL_OBJECTS); $createdObjectMappings = $event->getObjectMappings(); $this->mappingHelper->saveObjectMappings($createdObjectMappings); // Make ObjectMappings available to the IntegrationEvents::INTEGRATION_BATCH_SYNC_COMPLETED_* events foreach ($createdObjectMappings as $createdObjectMapping) { $objectMappings->addNewObjectMapping($createdObjectMapping); } } }