Newscoop\Tools\Console\Command\GenerateWebcodeCommand::execute PHP Method

execute() protected method

See also: Console\Command\Command
protected execute ( Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output )
$input Symfony\Component\Console\Input\InputInterface
$output Symfony\Component\Console\Output\OutputInterface
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $em = $this->getApplication()->getKernel()->getContainer()->getService('em');
        $webcodeService = $this->getApplication()->getKernel()->getContainer()->getService('webcode');
        $number = (int) $input->getArgument('number');
        try {
            ini_set('memory_limit', '-1');
            if ($input->getOption('clear')) {
                $output->writeln('<info>Clearing webcodes.</info>');
                $qb = $em->createQueryBuilder();
                $result = $qb->update('Newscoop\\Entity\\Article', 'a')->set('a.webcode', 'null')->getQuery()->execute();
                $output->writeln('<info>Articles clear from webcode: ' . $result . '.</info>');
                $result = $qb->update('Newscoop\\Entity\\Webcode', 'w')->delete()->getQuery()->execute();
                $output->writeln('<info>Webcodes cleared: ' . $result . '.</info>');
            }
            $output->writeln('<info>Generating webcodes. Please wait! It can take up to few minutes, depends on database size.</info>');
            $articlesCount = (int) $em->getRepository('Newscoop\\Entity\\Article')->createQueryBuilder('a')->select('COUNT(a.number)')->where('a.webcode IS NULL')->getQuery()->getSingleScalarResult();
            $output->writeln('<info>Articles to generate webcode for: ' . $articlesCount . '.</info>');
            $batch = 100;
            $steps = $articlesCount > $batch ? ceil($articlesCount / $batch) : 1;
            for ($i = 0; $i < $steps; $i++) {
                $offset = $i * $batch;
                $articles = $em->getRepository('Newscoop\\Entity\\Article')->createQueryBuilder('a')->where('a.webcode IS NULL')->setFirstResult($offset)->setMaxResults($batch)->getQuery()->getResult();
                foreach ($articles as $key => $article) {
                    if ($article->getNumber() > $number && $number) {
                        $this->clearWebcode($em, $article->getNumber(), $article->getLanguage());
                        $webcodeService->setArticleWebcode($article);
                    }
                }
            }
            $output->writeln('<info>Webcodes generated successfully!</info>');
        } catch (\Exception $e) {
            $output->writeln('<error>' . $e->getMessage() . '</error>');
        }
    }