Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\IntegrationsBundle\Sync\SyncService; | |
| use GuzzleHttp\Exception\ClientException; | |
| use Mautic\IntegrationsBundle\Helper\SyncIntegrationsHelper; | |
| use Mautic\IntegrationsBundle\Sync\DAO\Sync\InputOptionsDAO; | |
| use Mautic\IntegrationsBundle\Sync\Helper\MappingHelper; | |
| use Mautic\IntegrationsBundle\Sync\Helper\RelationsHelper; | |
| use Mautic\IntegrationsBundle\Sync\Helper\SyncDateHelper; | |
| use Mautic\IntegrationsBundle\Sync\Logger\DebugLogger; | |
| use Mautic\IntegrationsBundle\Sync\Notification\Notifier; | |
| use Mautic\IntegrationsBundle\Sync\SyncDataExchange\MauticSyncDataExchange; | |
| use Mautic\IntegrationsBundle\Sync\SyncProcess\Direction\Integration\IntegrationSyncProcess; | |
| use Mautic\IntegrationsBundle\Sync\SyncProcess\Direction\Internal\MauticSyncProcess; | |
| use Mautic\IntegrationsBundle\Sync\SyncProcess\SyncProcess; | |
| use Psr\Log\LogLevel; | |
| use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
| final class SyncService implements SyncServiceInterface | |
| { | |
| public function __construct( | |
| private MauticSyncDataExchange $internalSyncDataExchange, | |
| private SyncDateHelper $syncDateHelper, | |
| private MappingHelper $mappingHelper, | |
| private RelationsHelper $relationsHelper, | |
| private SyncIntegrationsHelper $syncIntegrationsHelper, | |
| private EventDispatcherInterface $eventDispatcher, | |
| private Notifier $notifier, | |
| private IntegrationSyncProcess $integratinSyncProcess, | |
| private MauticSyncProcess $mauticSyncProcess | |
| ) { | |
| } | |
| /** | |
| * @throws \Mautic\IntegrationsBundle\Exception\IntegrationNotFoundException | |
| */ | |
| public function processIntegrationSync(InputOptionsDAO $inputOptionsDAO): void | |
| { | |
| $integrationSyncProcess = new SyncProcess( | |
| $this->syncDateHelper, | |
| $this->mappingHelper, | |
| $this->relationsHelper, | |
| $this->integratinSyncProcess, | |
| $this->mauticSyncProcess, | |
| $this->eventDispatcher, | |
| $this->notifier, | |
| $this->syncIntegrationsHelper->getMappingManual($inputOptionsDAO->getIntegration()), | |
| $this->internalSyncDataExchange, | |
| $this->syncIntegrationsHelper->getSyncDataExchange($inputOptionsDAO->getIntegration()), | |
| $inputOptionsDAO, | |
| $this | |
| ); | |
| DebugLogger::log( | |
| $inputOptionsDAO->getIntegration(), | |
| sprintf( | |
| 'Starting %s sync from %s date/time', | |
| $inputOptionsDAO->isFirstTimeSync() ? 'first time' : 'subsequent', | |
| $inputOptionsDAO->getStartDateTime() ? $inputOptionsDAO->getStartDateTime()->format('Y-m-d H:i:s') : 'yet to be determined' | |
| ), | |
| self::class.':'.__FUNCTION__ | |
| ); | |
| try { | |
| $integrationSyncProcess->execute(); | |
| } catch (ClientException $exception) { | |
| // The sync failed to communicate with the integration so log it | |
| DebugLogger::log($inputOptionsDAO->getIntegration(), $exception->getMessage(), null, [], LogLevel::ERROR); | |
| } | |
| } | |
| public function initiateDebugLogger(DebugLogger $logger): void | |
| { | |
| // Yes it's a hack to prevent from having to pass the logger as a dependency into dozens of classes | |
| // So not doing anything with the logger, just need Symfony to initiate the service | |
| } | |
| } | |