Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\IntegrationsBundle\Command; | |
use Mautic\IntegrationsBundle\Exception\InvalidValueException; | |
use Mautic\IntegrationsBundle\Sync\DAO\Sync\InputOptionsDAO; | |
use Mautic\IntegrationsBundle\Sync\SyncService\SyncServiceInterface; | |
use Symfony\Component\Console\Command\Command; | |
use Symfony\Component\Console\Input\InputInterface; | |
use Symfony\Component\Console\Input\InputOption; | |
use Symfony\Component\Console\Output\OutputInterface; | |
use Symfony\Component\Console\Style\SymfonyStyle; | |
class SyncCommand extends Command | |
{ | |
public const NAME = 'mautic:integrations:sync'; | |
public function __construct( | |
private SyncServiceInterface $syncService | |
) { | |
parent::__construct(); | |
} | |
protected function configure(): void | |
{ | |
$this->setName(self::NAME) | |
->addArgument( | |
'integration', | |
InputOption::VALUE_REQUIRED, | |
'Fetch objects from integration.', | |
null | |
) | |
->addOption( | |
'--start-datetime', | |
'-t', | |
InputOption::VALUE_OPTIONAL, | |
'Set start date/time for updated values in UTC timezone.' | |
) | |
->addOption( | |
'--end-datetime', | |
null, | |
InputOption::VALUE_OPTIONAL, | |
'Set start date/time for updated values in UTC timezone.' | |
) | |
->addOption( | |
'--mautic-object-id', | |
null, | |
InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, | |
'Provide specific Mautic object IDs you want to sync. If some object IDs are provided then the start/end dates have no effect. Example: --mautic-object-id=contact:12 --mautic-object-id=company:13' | |
) | |
->addOption( | |
'--integration-object-id', | |
null, | |
InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, | |
'Provide specific integration object IDs you want to sync. If some object IDs are provided then the start/end dates have no effect. It depends on each integration if this is supported. Example: --integration-object-id=Account:12 --integration-object-id=Lead:13' | |
) | |
->addOption( | |
'--first-time-sync', | |
'-f', | |
InputOption::VALUE_NONE, | |
'Notate if this is a first time sync where Mautic will sync existing objects instead of just tracked changes' | |
) | |
->addOption( | |
'--disable-push', | |
null, | |
InputOption::VALUE_NONE, | |
'Notate if the sync should execute only pushing items from Mautic to the integration' | |
) | |
->addOption( | |
'--disable-pull', | |
null, | |
InputOption::VALUE_NONE, | |
'Notate if the sync should execute only pulling items from integration to the Mautic' | |
) | |
->addOption( | |
'--option', | |
null, | |
InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, | |
'Provide option pass to InputOptions Example: --option="type:1" --option="channel_id:1"' | |
) | |
->addOption( | |
'--disable-activity-push', | |
null, | |
InputOption::VALUE_NONE, | |
'Notate if the sync should disable the activities sync if the integration supports it' | |
); | |
parent::configure(); | |
} | |
protected function execute(InputInterface $input, OutputInterface $output): int | |
{ | |
$io = new SymfonyStyle($input, $output); | |
try { | |
$inputOptions = new InputOptionsDAO(array_merge($input->getArguments(), $input->getOptions())); | |
} catch (InvalidValueException $e) { | |
$io->error($e->getMessage()); | |
return Command::FAILURE; | |
} | |
try { | |
defined('MAUTIC_INTEGRATION_SYNC_IN_PROGRESS') or define('MAUTIC_INTEGRATION_SYNC_IN_PROGRESS', $inputOptions->getIntegration()); | |
// Tell audit log to use integration name rather than "System" | |
defined('MAUTIC_AUDITLOG_USER') or define('MAUTIC_AUDITLOG_USER', $inputOptions->getIntegration()); | |
$this->syncService->processIntegrationSync($inputOptions); | |
} catch (\Throwable $e) { | |
if ('dev' === $input->getOption('env') || (defined('MAUTIC_ENV') && MAUTIC_ENV === 'dev')) { | |
throw $e; | |
} | |
$io->error($e->getMessage()); | |
return Command::FAILURE; | |
} | |
$io->success('Execution time: '.number_format(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'], 3)); | |
return Command::SUCCESS; | |
} | |
protected static $defaultDescription = 'Fetch objects from integration.'; | |
} | |