visitService = $visitService; $this->ipLocationResolver = $ipLocationResolver; $this->translator = $translator; parent::__construct(); } protected function configure(): void { $this->setName(self::NAME) ->setDescription( $this->translator->translate('Processes visits where location is not set yet') ); } protected function execute(InputInterface $input, OutputInterface $output): void { $io = new SymfonyStyle($input, $output); $visits = $this->visitService->getUnlocatedVisits(); foreach ($visits as $visit) { if (! $visit->hasRemoteAddr()) { $io->writeln( sprintf('%s', $this->translator->translate('Ignored visit with no IP address')), OutputInterface::VERBOSITY_VERBOSE ); continue; } $ipAddr = $visit->getRemoteAddr(); $io->write(sprintf('%s %s', $this->translator->translate('Processing IP'), $ipAddr)); if ($ipAddr === IpAddress::LOCALHOST) { $io->writeln( sprintf(' [%s]', $this->translator->translate('Ignored localhost address')) ); continue; } try { $result = $this->ipLocationResolver->resolveIpLocation($ipAddr); $location = new VisitLocation($result); $visit->setVisitLocation($location); $this->visitService->saveVisit($visit); $io->writeln(sprintf( ' [' . $this->translator->translate('Address located at "%s"') . ']', $location->getCountryName() )); } catch (WrongIpException $e) { $io->writeln( sprintf( ' [%s]', $this->translator->translate('An error occurred while locating IP. Skipped') ) ); if ($io->isVerbose()) { $this->getApplication()->renderException($e, $output); } } } $io->success($this->translator->translate('Finished processing all IPs')); } }