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>');
}
}