addOption( 'dry-run', null, InputOption::VALUE_NONE, 'Affiche les changements sans écrire en base', ); } protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); $isDryRun = (bool) $input->getOption('dry-run'); $messages = $this->messageRepository->findAll(); $io->text(sprintf('%d message(s) à examiner...', count($messages))); $changed = 0; foreach ($messages as $message) { $newSubject = MimeHeaderDecoder::decode($message->getSubject()); $newFromName = MimeHeaderDecoder::decode($message->getFromName()); $hasChange = $newSubject !== $message->getSubject() || $newFromName !== $message->getFromName(); if (!$hasChange) { continue; } if ($io->isVerbose()) { $io->text(sprintf(' - #%d : "%s" → "%s"', $message->getId(), (string) $message->getSubject(), (string) $newSubject)); } if (!$isDryRun) { $message->setSubject($newSubject); $message->setFromName($newFromName); } ++$changed; } if (!$isDryRun) { $this->entityManager->flush(); } $io->success(sprintf( '%s%d en-tête(s) re-décodé(s).', $isDryRun ? '[dry-run] ' : '', $changed, )); return Command::SUCCESS; } }