protected function execute(InputInterface $input, OutputInterface $output)
 {
     parent::execute($input, $output);
     $um = $this->getContainer()->get('fos_user.user_manager');
     $locale = $this->getContainer()->getParameter('locale');
     $tokenGenrator = $this->getContainer()->get('fos_user.util.token_generator');
     $ui = new UserImporter($this->connection, $this->em, $this->logger, $output, $um, $tokenGenrator, $locale);
     $ii = new IssueImporter($this->connection, $this->em, $this->logger, $output);
     $ai = new ArticleImporter($this->connection, $this->em, $this->logger, $output, $ui);
     $oldIssueId = $input->getArgument('id');
     $journalId = $input->getArgument('journal');
     if (is_numeric($journalId)) {
         $journal = $this->em->find('OjsJournalBundle:Journal', $journalId);
     } else {
         $journal = $this->em->getRepository(Journal::class)->findOneBy(['slug' => $journalId]);
     }
     if (!$journal) {
         $output->writeln('<error>Journal does not exist.</error>');
         return;
     }
     $sectionRepo = $this->em->getRepository(Section::class);
     $currentSectionIds = array_column($sectionRepo->getIdsByJournal($journal), 'id');
     $ii->importIssues([['issue_id' => $oldIssueId]], $journal->getId(), $currentSectionIds);
     $mapRepo = $this->em->getRepository(ImportMap::class);
     if (!$input->getOption('without-articles')) {
         $sql = "SELECT article_id FROM published_articles WHERE issue_id = ?";
         $articleIds = $this->connection->executeQuery($sql, [$oldIssueId])->fetchAll();
         $oldSectionIds = $mapRepo->getSectionIds($journal);
         if (empty($oldSectionIds) && !empty($currentSectionIds)) {
             $oldSectionIds = $currentSectionIds[0];
         }
         $ai->importArticles($articleIds, $journal->getId(), $oldSectionIds, $mapRepo->getIssueIds($journal));
     }
 }
 /**
  * @param OutputInterface $output
  * @return array
  * @throws \Doctrine\DBAL\DBALException
  * @throws \Doctrine\ORM\ORMException
  */
 protected function syncIssues(OutputInterface $output)
 {
     $ii = new IssueImporter($this->connection, $this->em, $this->logger, $output, $this->ui);
     $importRepo = $this->em->getRepository(ImportMap::class);
     $journalMaps = $importRepo->findBy(['type' => Journal::class]);
     $createdIssueIds = [];
     /** @var ImportMap $journalMap */
     foreach ($journalMaps as $journalMap) {
         $output->writeln('Synchronizing #' . $journalMap->getNewId());
         $journalRef = $this->em->getReference(Journal::class, $journalMap->getNewId());
         $importedIssueIds = null;
         $importedIssues = array_values($this->em->createQueryBuilder()->select('map.oldId')->from(ImportMap::class, 'map')->join(Issue::class, 'issue', 'WITH', 'map.newId = issue.id')->where('map.type = :type')->andWhere('issue.journal = :journal')->setParameter('type', Issue::class)->setParameter('journal', $journalRef)->getQuery()->getScalarResult());
         foreach ($importedIssues as $key => $importedIssue) {
             $importedIssueIds[] = $importedIssue['oldId'];
         }
         $issuesSql = 'SELECT issue_id FROM issues WHERE issue_id NOT IN (?) AND journal_id = ?';
         $issuesStatement = $this->connection->executeQuery($issuesSql, [$importedIssueIds, [$journalMap->getOldId()]], [Connection::PARAM_INT_ARRAY, Connection::PARAM_INT_ARRAY]);
         $nonImportedIssues = $issuesStatement->fetchAll();
         $importedSectionIds = $this->getSectionIds($journalRef);
         $createdIssueIds = $ii->importIssues($nonImportedIssues, $journalMap->getNewId(), $importedSectionIds);
     }
     return $createdIssueIds;
 }