Initial commit: CloudOps infrastructure platform
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mautic\IntegrationsBundle\Command;
|
||||
|
||||
use Mautic\IntegrationsBundle\Entity\FieldChangeRepository;
|
||||
use Symfony\Component\Console\Attribute\AsCommand;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
|
||||
#[AsCommand(
|
||||
name: CleanupCommand::NAME,
|
||||
description: 'Delete records from field changes which are invalid'
|
||||
)]
|
||||
class CleanupCommand extends Command
|
||||
{
|
||||
public const NAME = 'mautic:integrations:cleanup';
|
||||
|
||||
public function __construct(private FieldChangeRepository $fieldChangeRepository)
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||
{
|
||||
$io = new SymfonyStyle($input, $output);
|
||||
|
||||
$numberOfRecordsDeleted = $this->fieldChangeRepository->deleteOrphanLeadChanges();
|
||||
$io->success("$numberOfRecordsDeleted records deleted.");
|
||||
$io->success('Execution time: '.number_format(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'], 3));
|
||||
|
||||
return Command::SUCCESS;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
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\Attribute\AsCommand;
|
||||
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;
|
||||
|
||||
#[AsCommand(
|
||||
name: SyncCommand::NAME,
|
||||
description: 'Fetch objects from integration.'
|
||||
)]
|
||||
class SyncCommand extends Command
|
||||
{
|
||||
public const NAME = 'mautic:integrations:sync';
|
||||
|
||||
public function __construct(
|
||||
private SyncServiceInterface $syncService,
|
||||
) {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure(): void
|
||||
{
|
||||
$this
|
||||
->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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user