setName('wallabag:export') ->setDescription('Export all entries for an user') ->setHelp('This command helps you to export all entries for an user') ->addArgument( 'username', InputArgument::REQUIRED, 'User from which to export entries' ) ->addArgument( 'filename', InputArgument::OPTIONAL, 'Path of the exported file' ) ; } protected function execute(InputInterface $input, OutputInterface $output) { try { $user = $this->getUser($input->getArgument('username')); } catch (NoResultException $e) { $output->writeln(sprintf('User "%s" not found.', $input->getArgument('username'))); return 1; } $entries = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') ->getBuilderForAllByUser($user->getId()) ->getQuery() ->getResult(); $output->write(sprintf('Exporting %d entrie(s) for user « %s »... ', count($entries), $user->getUserName())); $filePath = $input->getArgument('filename'); if (!$filePath) { $filePath = $this->getContainer()->getParameter('kernel.root_dir') . '/../' . sprintf('%s-export', $user->getUsername()); } try { $data = $this->getContainer()->get('wallabag_core.helper.entries_export') ->setEntries($entries) ->updateTitle('All') ->exportJsonData(); file_put_contents($filePath, $data); } catch (\InvalidArgumentException $e) { $output->writeln(sprintf('Error: "%s"', $e->getMessage())); } $output->writeln('Done.'); } /** * Fetches a user from its username. * * @param string $username * * @return \Wallabag\UserBundle\Entity\User */ private function getUser($username) { return $this->getDoctrine()->getRepository('WallabagUserBundle:User')->findOneByUserName($username); } private function getDoctrine() { return $this->getContainer()->get('doctrine'); } }