setName('module:update') ->setDescription('Update module') ->addArgument('accountId', InputArgument::OPTIONAL, 'Choose account, or make it for all'); } public function __construct(ModuleManagerInterface $moduleManager, AccountManager $accountManager) { $this->moduleManager = $moduleManager; $this->accountManager = $accountManager; parent::__construct(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { if (!$this->lock()) { $output->writeln('The command is already running in another process.'); return 0; } $accountId = $input->getArgument('accountId') ? $input->getArgument('accountId') : null; $paginator = []; if (null !== $accountId) { $paginator = [$this->accountManager->find($accountId)]; } else { $accountQuery = $this->accountManager->getRepository() ->createQueryBuilder('account') ->where('account.active = true') ->andWhere('account.freeze != true') ->addOrderBy('account.id') ->getQuery() ->setFirstResult(0) ->setMaxResults(100); $paginator = new Paginator($accountQuery); } $count = 0; foreach ($paginator as $account) { try { $this->moduleManager ->setAccount($account) ->updateModuleConfiguration() ; ++$count; } catch (\Exception $e) { $output->writeln( "Failed to update configuration for account {$account->getCrmUrl()}[{$account->getId()}]" ); $output->writeln("Error: {$e->getMessage()}"); } } $output->writeln("{$count} modules updated."); $this->release(); return 0; } }