Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\LeadBundle\Command; | |
| use Mautic\CoreBundle\Twig\Helper\FormatterHelper; | |
| use Mautic\LeadBundle\Event\ContactExportSchedulerEvent; | |
| use Mautic\LeadBundle\LeadEvents; | |
| use Mautic\LeadBundle\Model\ContactExportSchedulerModel; | |
| 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\EventDispatcher\EventDispatcherInterface; | |
| class ContactScheduledExportCommand extends Command | |
| { | |
| private const PICK_SCHEDULED_EXPORTS_LIMIT = 10; | |
| public const COMMAND_NAME = 'mautic:contacts:scheduled_export'; | |
| public function __construct( | |
| private ContactExportSchedulerModel $contactExportSchedulerModel, | |
| private EventDispatcherInterface $eventDispatcher, | |
| private FormatterHelper $formatterHelper | |
| ) { | |
| parent::__construct(); | |
| } | |
| protected function configure(): void | |
| { | |
| $this | |
| ->setName(self::COMMAND_NAME) | |
| ->addOption( | |
| '--ids', | |
| null, | |
| InputOption::VALUE_REQUIRED, | |
| 'Comma separated contact_export_scheduler ids.' | |
| ); | |
| parent::configure(); | |
| } | |
| protected function execute(InputInterface $input, OutputInterface $output): int | |
| { | |
| $ids = $this->formatterHelper->simpleCsvToArray($input->getOption('ids'), 'int'); | |
| if ($ids) { | |
| $contactExportSchedulers = $this->contactExportSchedulerModel->getRepository()->findBy(['id' => $ids]); | |
| } else { | |
| $contactExportSchedulers = $this->contactExportSchedulerModel->getRepository() | |
| ->findBy([], [], self::PICK_SCHEDULED_EXPORTS_LIMIT); | |
| } | |
| $count = 0; | |
| foreach ($contactExportSchedulers as $contactExportScheduler) { | |
| $contactExportSchedulerEvent = new ContactExportSchedulerEvent($contactExportScheduler); | |
| $this->eventDispatcher->dispatch($contactExportSchedulerEvent, LeadEvents::CONTACT_EXPORT_PREPARE_FILE); | |
| $this->eventDispatcher->dispatch($contactExportSchedulerEvent, LeadEvents::CONTACT_EXPORT_SEND_EMAIL); | |
| $this->eventDispatcher->dispatch($contactExportSchedulerEvent, LeadEvents::POST_CONTACT_EXPORT_SEND_EMAIL); | |
| ++$count; | |
| } | |
| $output->writeln('Contact export email(s) sent: '.$count); | |
| return Command::SUCCESS; | |
| } | |
| protected static $defaultDescription = 'Export contacts which are scheduled in `contact_export_scheduler` table.'; | |
| } | |