Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\IntegrationsBundle\Sync\SyncDataExchange; | |
| use Mautic\IntegrationsBundle\Entity\FieldChangeRepository; | |
| use Mautic\IntegrationsBundle\Sync\DAO\Mapping\MappingManualDAO; | |
| use Mautic\IntegrationsBundle\Sync\DAO\Sync\Order\ObjectChangeDAO; | |
| use Mautic\IntegrationsBundle\Sync\DAO\Sync\Order\ObjectMappingsDAO; | |
| use Mautic\IntegrationsBundle\Sync\DAO\Sync\Order\OrderDAO; | |
| use Mautic\IntegrationsBundle\Sync\DAO\Sync\Report\ObjectDAO as ReportObjectDAO; | |
| use Mautic\IntegrationsBundle\Sync\DAO\Sync\Report\ReportDAO; | |
| use Mautic\IntegrationsBundle\Sync\DAO\Sync\Request\RequestDAO; | |
| use Mautic\IntegrationsBundle\Sync\Exception\ObjectDeletedException; | |
| use Mautic\IntegrationsBundle\Sync\Exception\ObjectNotFoundException; | |
| use Mautic\IntegrationsBundle\Sync\Exception\ObjectNotSupportedException; | |
| use Mautic\IntegrationsBundle\Sync\Helper\MappingHelper; | |
| use Mautic\IntegrationsBundle\Sync\Helper\SyncDateHelper; | |
| use Mautic\IntegrationsBundle\Sync\Logger\DebugLogger; | |
| use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Helper\FieldHelper; | |
| use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Internal\Executioner\OrderExecutioner; | |
| use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Internal\ReportBuilder\FullObjectReportBuilder; | |
| use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Internal\ReportBuilder\PartialObjectReportBuilder; | |
| class MauticSyncDataExchange implements SyncDataExchangeInterface | |
| { | |
| public const NAME = 'mautic'; | |
| public const OBJECT_CONTACT = 'lead'; // kept as lead for BC | |
| public const OBJECT_COMPANY = 'company'; | |
| public function __construct( | |
| private FieldChangeRepository $fieldChangeRepository, | |
| private FieldHelper $fieldHelper, | |
| private MappingHelper $mappingHelper, | |
| private FullObjectReportBuilder $fullObjectReportBuilder, | |
| private PartialObjectReportBuilder $partialObjectReportBuilder, | |
| private OrderExecutioner $orderExecutioner, | |
| private SyncDateHelper $syncDateHelper | |
| ) { | |
| } | |
| public function getSyncReport(RequestDAO $requestDAO): ReportDAO | |
| { | |
| if ($requestDAO->isFirstTimeSync() || $requestDAO->getInputOptionsDAO()->getMauticObjectIds()) { | |
| return $this->fullObjectReportBuilder->buildReport($requestDAO); | |
| } | |
| return $this->partialObjectReportBuilder->buildReport($requestDAO); | |
| } | |
| public function executeSyncOrder(OrderDAO $syncOrderDAO): ObjectMappingsDAO | |
| { | |
| return $this->orderExecutioner->execute($syncOrderDAO); | |
| } | |
| /** | |
| * @return ReportObjectDAO | |
| * | |
| * @throws ObjectNotFoundException | |
| * @throws ObjectNotSupportedException | |
| * @throws ObjectDeletedException | |
| */ | |
| public function getConflictedInternalObject(MappingManualDAO $mappingManualDAO, string $internalObjectName, ReportObjectDAO $integrationObjectDAO) | |
| { | |
| // Check to see if we have a match | |
| $internalObjectDAO = $this->mappingHelper->findMauticObject($mappingManualDAO, $internalObjectName, $integrationObjectDAO); | |
| if (!$internalObjectDAO->getObjectId()) { | |
| return new ReportObjectDAO($internalObjectName, null); | |
| } | |
| $fieldChanges = $this->fieldChangeRepository->findChangesForObject( | |
| $mappingManualDAO->getIntegration(), | |
| $this->mappingHelper->getMauticEntityClassName($internalObjectName), | |
| $internalObjectDAO->getObjectId() | |
| ); | |
| foreach ($fieldChanges as $fieldChange) { | |
| $internalObjectDAO->addField( | |
| $this->fieldHelper->getFieldChangeObject($fieldChange) | |
| ); | |
| } | |
| return $internalObjectDAO; | |
| } | |
| /** | |
| * @param ObjectChangeDAO[] $objectChanges | |
| */ | |
| public function cleanupProcessedObjects(array $objectChanges): void | |
| { | |
| foreach ($objectChanges as $changedObjectDAO) { | |
| try { | |
| $object = $this->fieldHelper->getFieldObjectName($changedObjectDAO->getMappedObject()); | |
| $objectId = $changedObjectDAO->getMappedObjectId(); | |
| $this->fieldChangeRepository->deleteEntitiesForObject( | |
| (int) $objectId, | |
| $object, | |
| $changedObjectDAO->getIntegration(), | |
| $this->syncDateHelper->getInternalSyncStartDateTime() | |
| ); | |
| } catch (ObjectNotSupportedException $exception) { | |
| DebugLogger::log( | |
| self::NAME, | |
| $exception->getMessage(), | |
| self::class.':'.__FUNCTION__ | |
| ); | |
| } | |
| } | |
| } | |
| } | |