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__ | |
); | |
} | |
} | |
} | |
} | |