diff -r 45378793512a -r 2dcfef6e75c3 Command/SyncDocumentsCommand.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Command/SyncDocumentsCommand.php Wed Oct 19 14:33:40 2011 +0200 @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace IRI\Bundle\WikiTagBundle\Command; + +use Doctrine\ORM\Query; + +use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class SyncDocumentsCommand extends ContainerAwareCommand +{ + protected function configure() + { + parent::configure(); + + $this + ->setName('wikitag:sync-doc') + ->setDescription('Synchronize and index document class') + ->addArgument('class', InputArgument::REQUIRED, 'The document class') + ->addOption('clear', 'c', InputOption::VALUE_NONE, "clear all docs"); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $class = $input->getArgument('class'); + $clear = $input->getOption('clear'); + + + $doctrine = $this->getContainer()->get('doctrine'); + + $docrep = $doctrine->getRepository('WikiTagBundle:Document'); + $rep = $doctrine->getRepository($class); + + if(is_null($rep)) { + //TODO : translate + $output->writeln("$class does not have a repository : exiting."); + return ; + } + + //TODO : check class to implement DocumentInterface + //TODO : write progress + $doclist = $rep->findAll(); + foreach ($doclist as $doc) { + $output->writeln("TITLE : ".$doc->getTitle()); + $docrep->writeDocument($doc); + } + $doctrine->getEntityManager()->flush(); + + if($clear) { + + $req_ids = $doctrine->getEntityManager()->createQuery("SELECT partial doc.{id} FROM $class doc"); + $doc_ids = array(); + foreach($req_ids->getResult(Query::HYDRATE_SCALAR) as $doc_id) { + $doc_ids[] = strval($doc_id['doc_id']); + } + + $req = $doctrine->getEntityManager()->createQuery("SELECT wtdoc FROM WikiTagBundle:Document wtdoc WHERE wtdoc.externalId NOT IN (:doc_ids)"); + $req->setParameter('doc_ids', $doc_ids); + foreach ($req->getResult() as $wtdoc) { + $output->writeln("DELETE : ".$wtdoc->getId()); + $doctrine->getEntityManager()->remove($wtdoc); + } + $doctrine->getEntityManager()->flush(); + } + + $output->writeln(strval(count($doclist)) ." documents imported."); + } +} \ No newline at end of file