Spaces:
No application file
No application file
File size: 2,815 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
<?php
declare(strict_types=1);
namespace Mautic\LeadBundle\Command;
use Mautic\LeadBundle\Deduplicate\ContactDeduper;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Stopwatch\Stopwatch;
class DeduplicateIdsCommand extends Command
{
public const NAME = 'mautic:contacts:deduplicate:ids';
public function __construct(
private ContactDeduper $contactDeduper
) {
parent::__construct();
}
public function configure(): void
{
parent::configure();
$this->setName(self::NAME)
->addOption(
'--newer-into-older',
null,
InputOption::VALUE_NONE,
'By default, this command will merge older contacts and activity into the newer. Use this flag to reverse that behavior.'
)
->addOption(
'--contact-ids',
null,
InputOption::VALUE_REQUIRED,
'Comma separated list of contact IDs to deduplicate. If not provided, all contacts will be deduplicated. Example: --contact-ids=23,3,11'
)
->setHelp(
<<<'EOT'
The <info>%command.name%</info> command will dedpulicate contacts based on unique identifier values.
<info>php %command.full_name%</info>
EOT
);
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$newerIntoOlder = (bool) $input->getOption('newer-into-older');
$contactIds = array_filter(explode(',', $input->getOption('contact-ids')));
$duplicateCount = count($contactIds);
$progressBar = new ProgressBar($output, $duplicateCount);
$stopwatch = new Stopwatch();
if (!$contactIds) {
$output->writeln('<error>No contacts to deduplicate.</error>');
return Command::FAILURE;
}
$output->writeln("{$duplicateCount} contacts passed to deduplicate");
$progressBar->setFormat('debug');
$progressBar->start();
$stopwatch->start('deduplicate');
$contacts = $this->contactDeduper->getContactsByIds($contactIds);
$this->contactDeduper->deduplicateContactBatch($contacts, $newerIntoOlder, fn () => $progressBar->advance());
$progressBar->finish();
$event = $stopwatch->stop('deduplicate');
$output->writeln("Duration: {$event->getDuration()} ms, Memory: {$event->getMemory()} bytes");
return Command::SUCCESS;
}
protected static $defaultDescription = 'Merge contacts based on same unique identifiers';
}
|