forked from wallabag/wallabag
When exporting an entry, use the domain name as author name for epub, mobi and pdf formats, instead of 'wallabag'. Change the author from array to string, because for now, there is always only one author.
78 lines
2.5 KiB
PHP
78 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace Wallabag\CoreBundle\Command;
|
|
|
|
use Doctrine\ORM\NoResultException;
|
|
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
|
|
use Symfony\Component\Console\Input\InputArgument;
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
|
|
class ExportCommand extends ContainerAwareCommand
|
|
{
|
|
protected function configure()
|
|
{
|
|
$this
|
|
->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(
|
|
'filepath',
|
|
InputArgument::OPTIONAL,
|
|
'Path of the exported file'
|
|
)
|
|
;
|
|
}
|
|
|
|
protected function execute(InputInterface $input, OutputInterface $output)
|
|
{
|
|
try {
|
|
$user = $this->getContainer()->get('wallabag_user.user_repository')->findOneByUserName($input->getArgument('username'));
|
|
} catch (NoResultException $e) {
|
|
$output->writeln(sprintf('<error>User "%s" not found.</error>', $input->getArgument('username')));
|
|
|
|
return 1;
|
|
}
|
|
|
|
$entries = $this->getContainer()->get('wallabag_core.entry_repository')
|
|
->getBuilderForAllByUser($user->getId())
|
|
->getQuery()
|
|
->getResult();
|
|
|
|
$output->write(sprintf('Exporting %d entrie(s) for user « <comment>%s</comment> »... ', count($entries), $user->getUserName()));
|
|
|
|
$filePath = $input->getArgument('filepath');
|
|
|
|
if (!$filePath) {
|
|
$filePath = $this->getContainer()->getParameter('kernel.root_dir') . '/../' . sprintf('%s-export.json', $user->getUsername());
|
|
}
|
|
|
|
try {
|
|
$data = $this->getContainer()->get('wallabag_core.helper.entries_export')
|
|
->setEntries($entries)
|
|
->updateTitle('All')
|
|
->updateAuthor('All')
|
|
->exportJsonData();
|
|
file_put_contents($filePath, $data);
|
|
} catch (\InvalidArgumentException $e) {
|
|
$output->writeln(sprintf('<error>Error: "%s"</error>', $e->getMessage()));
|
|
|
|
return 1;
|
|
}
|
|
|
|
$output->writeln('<info>Done.</info>');
|
|
|
|
return 0;
|
|
}
|
|
|
|
private function getDoctrine()
|
|
{
|
|
return $this->getContainer()->get('doctrine');
|
|
}
|
|
}
|