diff options
author | Jérémy Benoist <j0k3r@users.noreply.github.com> | 2017-10-23 11:09:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-23 11:09:17 +0200 |
commit | 1953a872932a63792293b4aec087880265ba89f7 (patch) | |
tree | fd16599e737fcdaf193c933ef3ec4a4ee248b117 /src/Wallabag/ImportBundle | |
parent | d83d25dadec2c38460a32d96f5d2903426fec9d3 (diff) | |
parent | 702f2d67d60ca963492b90dad74cb5f8dcc84e51 (diff) | |
download | wallabag-1953a872932a63792293b4aec087880265ba89f7.tar.gz wallabag-1953a872932a63792293b4aec087880265ba89f7.tar.zst wallabag-1953a872932a63792293b4aec087880265ba89f7.zip |
Merge pull request #3011 from wallabag/2.3
wallabag 2.3.0
Diffstat (limited to 'src/Wallabag/ImportBundle')
31 files changed, 363 insertions, 300 deletions
diff --git a/src/Wallabag/ImportBundle/Command/ImportCommand.php b/src/Wallabag/ImportBundle/Command/ImportCommand.php index 28d01715..99056c2c 100644 --- a/src/Wallabag/ImportBundle/Command/ImportCommand.php +++ b/src/Wallabag/ImportBundle/Command/ImportCommand.php | |||
@@ -6,6 +6,7 @@ use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; | |||
6 | use Symfony\Component\Config\Definition\Exception\Exception; | 6 | use Symfony\Component\Config\Definition\Exception\Exception; |
7 | use Symfony\Component\Console\Input\InputArgument; | 7 | use Symfony\Component\Console\Input\InputArgument; |
8 | use Symfony\Component\Console\Input\InputInterface; | 8 | use Symfony\Component\Console\Input\InputInterface; |
9 | use Symfony\Component\Console\Input\InputOption; | ||
9 | use Symfony\Component\Console\Output\OutputInterface; | 10 | use Symfony\Component\Console\Output\OutputInterface; |
10 | 11 | ||
11 | class ImportCommand extends ContainerAwareCommand | 12 | class ImportCommand extends ContainerAwareCommand |
@@ -15,16 +16,18 @@ class ImportCommand extends ContainerAwareCommand | |||
15 | $this | 16 | $this |
16 | ->setName('wallabag:import') | 17 | ->setName('wallabag:import') |
17 | ->setDescription('Import entries from a JSON export') | 18 | ->setDescription('Import entries from a JSON export') |
18 | ->addArgument('userId', InputArgument::REQUIRED, 'User ID to populate') | 19 | ->addArgument('username', InputArgument::REQUIRED, 'User to populate') |
19 | ->addArgument('filepath', InputArgument::REQUIRED, 'Path to the JSON file') | 20 | ->addArgument('filepath', InputArgument::REQUIRED, 'Path to the JSON file') |
20 | ->addOption('importer', null, InputArgument::OPTIONAL, 'The importer to use: v1, v2, instapaper, pinboard, readability, firefox or chrome', 'v1') | 21 | ->addOption('importer', null, InputOption::VALUE_OPTIONAL, 'The importer to use: v1, v2, instapaper, pinboard, readability, firefox or chrome', 'v1') |
21 | ->addOption('markAsRead', null, InputArgument::OPTIONAL, 'Mark all entries as read', false) | 22 | ->addOption('markAsRead', null, InputOption::VALUE_OPTIONAL, 'Mark all entries as read', false) |
23 | ->addOption('useUserId', null, InputOption::VALUE_NONE, 'Use user id instead of username to find account') | ||
24 | ->addOption('disableContentUpdate', null, InputOption::VALUE_NONE, 'Disable fetching updated content from URL') | ||
22 | ; | 25 | ; |
23 | } | 26 | } |
24 | 27 | ||
25 | protected function execute(InputInterface $input, OutputInterface $output) | 28 | protected function execute(InputInterface $input, OutputInterface $output) |
26 | { | 29 | { |
27 | $output->writeln('Start : '.(new \DateTime())->format('d-m-Y G:i:s').' ---'); | 30 | $output->writeln('Start : ' . (new \DateTime())->format('d-m-Y G:i:s') . ' ---'); |
28 | 31 | ||
29 | if (!file_exists($input->getArgument('filepath'))) { | 32 | if (!file_exists($input->getArgument('filepath'))) { |
30 | throw new Exception(sprintf('File "%s" not found', $input->getArgument('filepath'))); | 33 | throw new Exception(sprintf('File "%s" not found', $input->getArgument('filepath'))); |
@@ -34,10 +37,14 @@ class ImportCommand extends ContainerAwareCommand | |||
34 | // Turning off doctrine default logs queries for saving memory | 37 | // Turning off doctrine default logs queries for saving memory |
35 | $em->getConnection()->getConfiguration()->setSQLLogger(null); | 38 | $em->getConnection()->getConfiguration()->setSQLLogger(null); |
36 | 39 | ||
37 | $user = $em->getRepository('WallabagUserBundle:User')->findOneById($input->getArgument('userId')); | 40 | if ($input->getOption('useUserId')) { |
41 | $user = $em->getRepository('WallabagUserBundle:User')->findOneById($input->getArgument('username')); | ||
42 | } else { | ||
43 | $user = $em->getRepository('WallabagUserBundle:User')->findOneByUsername($input->getArgument('username')); | ||
44 | } | ||
38 | 45 | ||
39 | if (!is_object($user)) { | 46 | if (!is_object($user)) { |
40 | throw new Exception(sprintf('User with id "%s" not found', $input->getArgument('userId'))); | 47 | throw new Exception(sprintf('User "%s" not found', $input->getArgument('username'))); |
41 | } | 48 | } |
42 | 49 | ||
43 | switch ($input->getOption('importer')) { | 50 | switch ($input->getOption('importer')) { |
@@ -64,6 +71,7 @@ class ImportCommand extends ContainerAwareCommand | |||
64 | } | 71 | } |
65 | 72 | ||
66 | $import->setMarkAsRead($input->getOption('markAsRead')); | 73 | $import->setMarkAsRead($input->getOption('markAsRead')); |
74 | $import->setDisableContentUpdate($input->getOption('disableContentUpdate')); | ||
67 | $import->setUser($user); | 75 | $import->setUser($user); |
68 | 76 | ||
69 | $res = $import | 77 | $res = $import |
@@ -72,12 +80,12 @@ class ImportCommand extends ContainerAwareCommand | |||
72 | 80 | ||
73 | if (true === $res) { | 81 | if (true === $res) { |
74 | $summary = $import->getSummary(); | 82 | $summary = $import->getSummary(); |
75 | $output->writeln('<info>'.$summary['imported'].' imported</info>'); | 83 | $output->writeln('<info>' . $summary['imported'] . ' imported</info>'); |
76 | $output->writeln('<comment>'.$summary['skipped'].' already saved</comment>'); | 84 | $output->writeln('<comment>' . $summary['skipped'] . ' already saved</comment>'); |
77 | } | 85 | } |
78 | 86 | ||
79 | $em->clear(); | 87 | $em->clear(); |
80 | 88 | ||
81 | $output->writeln('End : '.(new \DateTime())->format('d-m-Y G:i:s').' ---'); | 89 | $output->writeln('End : ' . (new \DateTime())->format('d-m-Y G:i:s') . ' ---'); |
82 | } | 90 | } |
83 | } | 91 | } |
diff --git a/src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php b/src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php index 2d06af44..d94900ad 100644 --- a/src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php +++ b/src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php | |||
@@ -2,13 +2,13 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Command; | 3 | namespace Wallabag\ImportBundle\Command; |
4 | 4 | ||
5 | use Simpleue\Worker\QueueWorker; | ||
5 | use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; | 6 | use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; |
6 | use Symfony\Component\Config\Definition\Exception\Exception; | 7 | use Symfony\Component\Config\Definition\Exception\Exception; |
7 | use Symfony\Component\Console\Input\InputArgument; | 8 | use Symfony\Component\Console\Input\InputArgument; |
8 | use Symfony\Component\Console\Input\InputOption; | ||
9 | use Symfony\Component\Console\Input\InputInterface; | 9 | use Symfony\Component\Console\Input\InputInterface; |
10 | use Symfony\Component\Console\Input\InputOption; | ||
10 | use Symfony\Component\Console\Output\OutputInterface; | 11 | use Symfony\Component\Console\Output\OutputInterface; |
11 | use Simpleue\Worker\QueueWorker; | ||
12 | 12 | ||
13 | class RedisWorkerCommand extends ContainerAwareCommand | 13 | class RedisWorkerCommand extends ContainerAwareCommand |
14 | { | 14 | { |
@@ -24,18 +24,18 @@ class RedisWorkerCommand extends ContainerAwareCommand | |||
24 | 24 | ||
25 | protected function execute(InputInterface $input, OutputInterface $output) | 25 | protected function execute(InputInterface $input, OutputInterface $output) |
26 | { | 26 | { |
27 | $output->writeln('Worker started at: '.(new \DateTime())->format('d-m-Y G:i:s')); | 27 | $output->writeln('Worker started at: ' . (new \DateTime())->format('d-m-Y G:i:s')); |
28 | $output->writeln('Waiting for message ...'); | 28 | $output->writeln('Waiting for message ...'); |
29 | 29 | ||
30 | $serviceName = $input->getArgument('serviceName'); | 30 | $serviceName = $input->getArgument('serviceName'); |
31 | 31 | ||
32 | if (!$this->getContainer()->has('wallabag_import.queue.redis.'.$serviceName) || !$this->getContainer()->has('wallabag_import.consumer.redis.'.$serviceName)) { | 32 | if (!$this->getContainer()->has('wallabag_import.queue.redis.' . $serviceName) || !$this->getContainer()->has('wallabag_import.consumer.redis.' . $serviceName)) { |
33 | throw new Exception(sprintf('No queue or consumer found for service name: "%s"', $input->getArgument('serviceName'))); | 33 | throw new Exception(sprintf('No queue or consumer found for service name: "%s"', $input->getArgument('serviceName'))); |
34 | } | 34 | } |
35 | 35 | ||
36 | $worker = new QueueWorker( | 36 | $worker = new QueueWorker( |
37 | $this->getContainer()->get('wallabag_import.queue.redis.'.$serviceName), | 37 | $this->getContainer()->get('wallabag_import.queue.redis.' . $serviceName), |
38 | $this->getContainer()->get('wallabag_import.consumer.redis.'.$serviceName), | 38 | $this->getContainer()->get('wallabag_import.consumer.redis.' . $serviceName), |
39 | (int) $input->getOption('maxIterations') | 39 | (int) $input->getOption('maxIterations') |
40 | ); | 40 | ); |
41 | 41 | ||
diff --git a/src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php b/src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php index 992ce1ad..b035f5cc 100644 --- a/src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php +++ b/src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php | |||
@@ -3,14 +3,14 @@ | |||
3 | namespace Wallabag\ImportBundle\Consumer; | 3 | namespace Wallabag\ImportBundle\Consumer; |
4 | 4 | ||
5 | use Doctrine\ORM\EntityManager; | 5 | use Doctrine\ORM\EntityManager; |
6 | use Wallabag\ImportBundle\Import\AbstractImport; | ||
7 | use Wallabag\UserBundle\Repository\UserRepository; | ||
8 | use Wallabag\CoreBundle\Entity\Entry; | ||
9 | use Wallabag\CoreBundle\Entity\Tag; | ||
10 | use Psr\Log\LoggerInterface; | 6 | use Psr\Log\LoggerInterface; |
11 | use Psr\Log\NullLogger; | 7 | use Psr\Log\NullLogger; |
12 | use Symfony\Component\EventDispatcher\EventDispatcherInterface; | 8 | use Symfony\Component\EventDispatcher\EventDispatcherInterface; |
9 | use Wallabag\CoreBundle\Entity\Entry; | ||
10 | use Wallabag\CoreBundle\Entity\Tag; | ||
13 | use Wallabag\CoreBundle\Event\EntrySavedEvent; | 11 | use Wallabag\CoreBundle\Event\EntrySavedEvent; |
12 | use Wallabag\ImportBundle\Import\AbstractImport; | ||
13 | use Wallabag\UserBundle\Repository\UserRepository; | ||
14 | 14 | ||
15 | abstract class AbstractConsumer | 15 | abstract class AbstractConsumer |
16 | { | 16 | { |
@@ -76,7 +76,7 @@ abstract class AbstractConsumer | |||
76 | return false; | 76 | return false; |
77 | } | 77 | } |
78 | 78 | ||
79 | $this->logger->info('Content with url imported! ('.$entry->getUrl().')'); | 79 | $this->logger->info('Content with url imported! (' . $entry->getUrl() . ')'); |
80 | 80 | ||
81 | return true; | 81 | return true; |
82 | } | 82 | } |
diff --git a/src/Wallabag/ImportBundle/Controller/BrowserController.php b/src/Wallabag/ImportBundle/Controller/BrowserController.php index e119098f..77a7a904 100644 --- a/src/Wallabag/ImportBundle/Controller/BrowserController.php +++ b/src/Wallabag/ImportBundle/Controller/BrowserController.php | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Controller; | 3 | namespace Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
6 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
7 | use Symfony\Component\HttpFoundation\Request; | 7 | use Symfony\Component\HttpFoundation\Request; |
8 | use Symfony\Component\HttpFoundation\Response; | 8 | use Symfony\Component\HttpFoundation\Response; |
9 | use Wallabag\ImportBundle\Form\Type\UploadImportType; | 9 | use Wallabag\ImportBundle\Form\Type\UploadImportType; |
@@ -11,20 +11,6 @@ use Wallabag\ImportBundle\Form\Type\UploadImportType; | |||
11 | abstract class BrowserController extends Controller | 11 | abstract class BrowserController extends Controller |
12 | { | 12 | { |
13 | /** | 13 | /** |
14 | * Return the service to handle the import. | ||
15 | * | ||
16 | * @return \Wallabag\ImportBundle\Import\ImportInterface | ||
17 | */ | ||
18 | abstract protected function getImportService(); | ||
19 | |||
20 | /** | ||
21 | * Return the template used for the form. | ||
22 | * | ||
23 | * @return string | ||
24 | */ | ||
25 | abstract protected function getImportTemplate(); | ||
26 | |||
27 | /** | ||
28 | * @Route("/browser", name="import_browser") | 14 | * @Route("/browser", name="import_browser") |
29 | * | 15 | * |
30 | * @param Request $request | 16 | * @param Request $request |
@@ -42,11 +28,11 @@ abstract class BrowserController extends Controller | |||
42 | if ($form->isSubmitted() && $form->isValid()) { | 28 | if ($form->isSubmitted() && $form->isValid()) { |
43 | $file = $form->get('file')->getData(); | 29 | $file = $form->get('file')->getData(); |
44 | $markAsRead = $form->get('mark_as_read')->getData(); | 30 | $markAsRead = $form->get('mark_as_read')->getData(); |
45 | $name = $this->getUser()->getId().'.json'; | 31 | $name = $this->getUser()->getId() . '.json'; |
46 | 32 | ||
47 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | 33 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { |
48 | $res = $wallabag | 34 | $res = $wallabag |
49 | ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name) | 35 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) |
50 | ->setMarkAsRead($markAsRead) | 36 | ->setMarkAsRead($markAsRead) |
51 | ->import(); | 37 | ->import(); |
52 | 38 | ||
@@ -65,7 +51,7 @@ abstract class BrowserController extends Controller | |||
65 | ]); | 51 | ]); |
66 | } | 52 | } |
67 | 53 | ||
68 | unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name); | 54 | unlink($this->getParameter('wallabag_import.resource_dir') . '/' . $name); |
69 | } | 55 | } |
70 | 56 | ||
71 | $this->get('session')->getFlashBag()->add( | 57 | $this->get('session')->getFlashBag()->add( |
@@ -74,12 +60,11 @@ abstract class BrowserController extends Controller | |||
74 | ); | 60 | ); |
75 | 61 | ||
76 | return $this->redirect($this->generateUrl('homepage')); | 62 | return $this->redirect($this->generateUrl('homepage')); |
77 | } else { | 63 | } |
78 | $this->get('session')->getFlashBag()->add( | 64 | $this->get('session')->getFlashBag()->add( |
79 | 'notice', | 65 | 'notice', |
80 | 'flashes.import.notice.failed_on_file' | 66 | 'flashes.import.notice.failed_on_file' |
81 | ); | 67 | ); |
82 | } | ||
83 | } | 68 | } |
84 | 69 | ||
85 | return $this->render($this->getImportTemplate(), [ | 70 | return $this->render($this->getImportTemplate(), [ |
@@ -87,4 +72,18 @@ abstract class BrowserController extends Controller | |||
87 | 'import' => $wallabag, | 72 | 'import' => $wallabag, |
88 | ]); | 73 | ]); |
89 | } | 74 | } |
75 | |||
76 | /** | ||
77 | * Return the service to handle the import. | ||
78 | * | ||
79 | * @return \Wallabag\ImportBundle\Import\ImportInterface | ||
80 | */ | ||
81 | abstract protected function getImportService(); | ||
82 | |||
83 | /** | ||
84 | * Return the template used for the form. | ||
85 | * | ||
86 | * @return string | ||
87 | */ | ||
88 | abstract protected function getImportTemplate(); | ||
90 | } | 89 | } |
diff --git a/src/Wallabag/ImportBundle/Controller/ChromeController.php b/src/Wallabag/ImportBundle/Controller/ChromeController.php index 454f3347..0cb418a1 100644 --- a/src/Wallabag/ImportBundle/Controller/ChromeController.php +++ b/src/Wallabag/ImportBundle/Controller/ChromeController.php | |||
@@ -8,6 +8,14 @@ use Symfony\Component\HttpFoundation\Request; | |||
8 | class ChromeController extends BrowserController | 8 | class ChromeController extends BrowserController |
9 | { | 9 | { |
10 | /** | 10 | /** |
11 | * @Route("/chrome", name="import_chrome") | ||
12 | */ | ||
13 | public function indexAction(Request $request) | ||
14 | { | ||
15 | return parent::indexAction($request); | ||
16 | } | ||
17 | |||
18 | /** | ||
11 | * {@inheritdoc} | 19 | * {@inheritdoc} |
12 | */ | 20 | */ |
13 | protected function getImportService() | 21 | protected function getImportService() |
@@ -30,12 +38,4 @@ class ChromeController extends BrowserController | |||
30 | { | 38 | { |
31 | return 'WallabagImportBundle:Chrome:index.html.twig'; | 39 | return 'WallabagImportBundle:Chrome:index.html.twig'; |
32 | } | 40 | } |
33 | |||
34 | /** | ||
35 | * @Route("/chrome", name="import_chrome") | ||
36 | */ | ||
37 | public function indexAction(Request $request) | ||
38 | { | ||
39 | return parent::indexAction($request); | ||
40 | } | ||
41 | } | 41 | } |
diff --git a/src/Wallabag/ImportBundle/Controller/FirefoxController.php b/src/Wallabag/ImportBundle/Controller/FirefoxController.php index c329b9c4..88697f9d 100644 --- a/src/Wallabag/ImportBundle/Controller/FirefoxController.php +++ b/src/Wallabag/ImportBundle/Controller/FirefoxController.php | |||
@@ -8,6 +8,14 @@ use Symfony\Component\HttpFoundation\Request; | |||
8 | class FirefoxController extends BrowserController | 8 | class FirefoxController extends BrowserController |
9 | { | 9 | { |
10 | /** | 10 | /** |
11 | * @Route("/firefox", name="import_firefox") | ||
12 | */ | ||
13 | public function indexAction(Request $request) | ||
14 | { | ||
15 | return parent::indexAction($request); | ||
16 | } | ||
17 | |||
18 | /** | ||
11 | * {@inheritdoc} | 19 | * {@inheritdoc} |
12 | */ | 20 | */ |
13 | protected function getImportService() | 21 | protected function getImportService() |
@@ -30,12 +38,4 @@ class FirefoxController extends BrowserController | |||
30 | { | 38 | { |
31 | return 'WallabagImportBundle:Firefox:index.html.twig'; | 39 | return 'WallabagImportBundle:Firefox:index.html.twig'; |
32 | } | 40 | } |
33 | |||
34 | /** | ||
35 | * @Route("/firefox", name="import_firefox") | ||
36 | */ | ||
37 | public function indexAction(Request $request) | ||
38 | { | ||
39 | return parent::indexAction($request); | ||
40 | } | ||
41 | } | 41 | } |
diff --git a/src/Wallabag/ImportBundle/Controller/ImportController.php b/src/Wallabag/ImportBundle/Controller/ImportController.php index 237c748e..7e4fd174 100644 --- a/src/Wallabag/ImportBundle/Controller/ImportController.php +++ b/src/Wallabag/ImportBundle/Controller/ImportController.php | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Controller; | 3 | namespace Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
6 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
7 | 7 | ||
8 | class ImportController extends Controller | 8 | class ImportController extends Controller |
9 | { | 9 | { |
@@ -86,9 +86,9 @@ class ImportController extends Controller | |||
86 | private function getTotalMessageInRabbitQueue($importService) | 86 | private function getTotalMessageInRabbitQueue($importService) |
87 | { | 87 | { |
88 | $message = $this | 88 | $message = $this |
89 | ->get('old_sound_rabbit_mq.import_'.$importService.'_consumer') | 89 | ->get('old_sound_rabbit_mq.import_' . $importService . '_consumer') |
90 | ->getChannel() | 90 | ->getChannel() |
91 | ->basic_get('wallabag.import.'.$importService); | 91 | ->basic_get('wallabag.import.' . $importService); |
92 | 92 | ||
93 | if (null === $message) { | 93 | if (null === $message) { |
94 | return 0; | 94 | return 0; |
diff --git a/src/Wallabag/ImportBundle/Controller/InstapaperController.php b/src/Wallabag/ImportBundle/Controller/InstapaperController.php index 0251acb9..550679c3 100644 --- a/src/Wallabag/ImportBundle/Controller/InstapaperController.php +++ b/src/Wallabag/ImportBundle/Controller/InstapaperController.php | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Controller; | 3 | namespace Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
6 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
7 | use Symfony\Component\HttpFoundation\Request; | 7 | use Symfony\Component\HttpFoundation\Request; |
8 | use Wallabag\ImportBundle\Form\Type\UploadImportType; | 8 | use Wallabag\ImportBundle\Form\Type\UploadImportType; |
9 | 9 | ||
@@ -29,11 +29,11 @@ class InstapaperController extends Controller | |||
29 | if ($form->isSubmitted() && $form->isValid()) { | 29 | if ($form->isSubmitted() && $form->isValid()) { |
30 | $file = $form->get('file')->getData(); | 30 | $file = $form->get('file')->getData(); |
31 | $markAsRead = $form->get('mark_as_read')->getData(); | 31 | $markAsRead = $form->get('mark_as_read')->getData(); |
32 | $name = 'instapaper_'.$this->getUser()->getId().'.csv'; | 32 | $name = 'instapaper_' . $this->getUser()->getId() . '.csv'; |
33 | 33 | ||
34 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | 34 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { |
35 | $res = $instapaper | 35 | $res = $instapaper |
36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name) | 36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) |
37 | ->setMarkAsRead($markAsRead) | 37 | ->setMarkAsRead($markAsRead) |
38 | ->import(); | 38 | ->import(); |
39 | 39 | ||
@@ -52,7 +52,7 @@ class InstapaperController extends Controller | |||
52 | ]); | 52 | ]); |
53 | } | 53 | } |
54 | 54 | ||
55 | unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name); | 55 | unlink($this->getParameter('wallabag_import.resource_dir') . '/' . $name); |
56 | } | 56 | } |
57 | 57 | ||
58 | $this->get('session')->getFlashBag()->add( | 58 | $this->get('session')->getFlashBag()->add( |
@@ -61,12 +61,12 @@ class InstapaperController extends Controller | |||
61 | ); | 61 | ); |
62 | 62 | ||
63 | return $this->redirect($this->generateUrl('homepage')); | 63 | return $this->redirect($this->generateUrl('homepage')); |
64 | } else { | ||
65 | $this->get('session')->getFlashBag()->add( | ||
66 | 'notice', | ||
67 | 'flashes.import.notice.failed_on_file' | ||
68 | ); | ||
69 | } | 64 | } |
65 | |||
66 | $this->get('session')->getFlashBag()->add( | ||
67 | 'notice', | ||
68 | 'flashes.import.notice.failed_on_file' | ||
69 | ); | ||
70 | } | 70 | } |
71 | 71 | ||
72 | return $this->render('WallabagImportBundle:Instapaper:index.html.twig', [ | 72 | return $this->render('WallabagImportBundle:Instapaper:index.html.twig', [ |
diff --git a/src/Wallabag/ImportBundle/Controller/PinboardController.php b/src/Wallabag/ImportBundle/Controller/PinboardController.php index d0ad8aa8..0e57fd41 100644 --- a/src/Wallabag/ImportBundle/Controller/PinboardController.php +++ b/src/Wallabag/ImportBundle/Controller/PinboardController.php | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Controller; | 3 | namespace Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
6 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
7 | use Symfony\Component\HttpFoundation\Request; | 7 | use Symfony\Component\HttpFoundation\Request; |
8 | use Wallabag\ImportBundle\Form\Type\UploadImportType; | 8 | use Wallabag\ImportBundle\Form\Type\UploadImportType; |
9 | 9 | ||
@@ -29,11 +29,11 @@ class PinboardController extends Controller | |||
29 | if ($form->isSubmitted() && $form->isValid()) { | 29 | if ($form->isSubmitted() && $form->isValid()) { |
30 | $file = $form->get('file')->getData(); | 30 | $file = $form->get('file')->getData(); |
31 | $markAsRead = $form->get('mark_as_read')->getData(); | 31 | $markAsRead = $form->get('mark_as_read')->getData(); |
32 | $name = 'pinboard_'.$this->getUser()->getId().'.json'; | 32 | $name = 'pinboard_' . $this->getUser()->getId() . '.json'; |
33 | 33 | ||
34 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | 34 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { |
35 | $res = $pinboard | 35 | $res = $pinboard |
36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name) | 36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) |
37 | ->setMarkAsRead($markAsRead) | 37 | ->setMarkAsRead($markAsRead) |
38 | ->import(); | 38 | ->import(); |
39 | 39 | ||
@@ -52,7 +52,7 @@ class PinboardController extends Controller | |||
52 | ]); | 52 | ]); |
53 | } | 53 | } |
54 | 54 | ||
55 | unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name); | 55 | unlink($this->getParameter('wallabag_import.resource_dir') . '/' . $name); |
56 | } | 56 | } |
57 | 57 | ||
58 | $this->get('session')->getFlashBag()->add( | 58 | $this->get('session')->getFlashBag()->add( |
@@ -61,12 +61,12 @@ class PinboardController extends Controller | |||
61 | ); | 61 | ); |
62 | 62 | ||
63 | return $this->redirect($this->generateUrl('homepage')); | 63 | return $this->redirect($this->generateUrl('homepage')); |
64 | } else { | ||
65 | $this->get('session')->getFlashBag()->add( | ||
66 | 'notice', | ||
67 | 'flashes.import.notice.failed_on_file' | ||
68 | ); | ||
69 | } | 64 | } |
65 | |||
66 | $this->get('session')->getFlashBag()->add( | ||
67 | 'notice', | ||
68 | 'flashes.import.notice.failed_on_file' | ||
69 | ); | ||
70 | } | 70 | } |
71 | 71 | ||
72 | return $this->render('WallabagImportBundle:Pinboard:index.html.twig', [ | 72 | return $this->render('WallabagImportBundle:Pinboard:index.html.twig', [ |
diff --git a/src/Wallabag/ImportBundle/Controller/PocketController.php b/src/Wallabag/ImportBundle/Controller/PocketController.php index 56be5cbf..9f28819a 100644 --- a/src/Wallabag/ImportBundle/Controller/PocketController.php +++ b/src/Wallabag/ImportBundle/Controller/PocketController.php | |||
@@ -2,34 +2,15 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Controller; | 3 | namespace Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
6 | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | ||
7 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
8 | use Symfony\Component\HttpFoundation\Request; | 6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; |
9 | use Symfony\Component\Form\Extension\Core\Type\CheckboxType; | 7 | use Symfony\Component\Form\Extension\Core\Type\CheckboxType; |
8 | use Symfony\Component\HttpFoundation\Request; | ||
9 | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | ||
10 | 10 | ||
11 | class PocketController extends Controller | 11 | class PocketController extends Controller |
12 | { | 12 | { |
13 | /** | 13 | /** |
14 | * Return Pocket Import Service with or without RabbitMQ enabled. | ||
15 | * | ||
16 | * @return \Wallabag\ImportBundle\Import\PocketImport | ||
17 | */ | ||
18 | private function getPocketImportService() | ||
19 | { | ||
20 | $pocket = $this->get('wallabag_import.pocket.import'); | ||
21 | $pocket->setUser($this->getUser()); | ||
22 | |||
23 | if ($this->get('craue_config')->get('import_with_rabbitmq')) { | ||
24 | $pocket->setProducer($this->get('old_sound_rabbit_mq.import_pocket_producer')); | ||
25 | } elseif ($this->get('craue_config')->get('import_with_redis')) { | ||
26 | $pocket->setProducer($this->get('wallabag_import.producer.redis.pocket')); | ||
27 | } | ||
28 | |||
29 | return $pocket; | ||
30 | } | ||
31 | |||
32 | /** | ||
33 | * @Route("/pocket", name="import_pocket") | 14 | * @Route("/pocket", name="import_pocket") |
34 | */ | 15 | */ |
35 | public function indexAction() | 16 | public function indexAction() |
@@ -70,7 +51,7 @@ class PocketController extends Controller | |||
70 | $this->get('session')->set('mark_as_read', $request->request->get('form')['mark_as_read']); | 51 | $this->get('session')->set('mark_as_read', $request->request->get('form')['mark_as_read']); |
71 | 52 | ||
72 | return $this->redirect( | 53 | return $this->redirect( |
73 | 'https://getpocket.com/auth/authorize?request_token='.$requestToken.'&redirect_uri='.$this->generateUrl('import_pocket_callback', [], UrlGeneratorInterface::ABSOLUTE_URL), | 54 | 'https://getpocket.com/auth/authorize?request_token=' . $requestToken . '&redirect_uri=' . $this->generateUrl('import_pocket_callback', [], UrlGeneratorInterface::ABSOLUTE_URL), |
74 | 301 | 55 | 301 |
75 | ); | 56 | ); |
76 | } | 57 | } |
@@ -117,4 +98,23 @@ class PocketController extends Controller | |||
117 | 98 | ||
118 | return $this->redirect($this->generateUrl('homepage')); | 99 | return $this->redirect($this->generateUrl('homepage')); |
119 | } | 100 | } |
101 | |||
102 | /** | ||
103 | * Return Pocket Import Service with or without RabbitMQ enabled. | ||
104 | * | ||
105 | * @return \Wallabag\ImportBundle\Import\PocketImport | ||
106 | */ | ||
107 | private function getPocketImportService() | ||
108 | { | ||
109 | $pocket = $this->get('wallabag_import.pocket.import'); | ||
110 | $pocket->setUser($this->getUser()); | ||
111 | |||
112 | if ($this->get('craue_config')->get('import_with_rabbitmq')) { | ||
113 | $pocket->setProducer($this->get('old_sound_rabbit_mq.import_pocket_producer')); | ||
114 | } elseif ($this->get('craue_config')->get('import_with_redis')) { | ||
115 | $pocket->setProducer($this->get('wallabag_import.producer.redis.pocket')); | ||
116 | } | ||
117 | |||
118 | return $pocket; | ||
119 | } | ||
120 | } | 120 | } |
diff --git a/src/Wallabag/ImportBundle/Controller/ReadabilityController.php b/src/Wallabag/ImportBundle/Controller/ReadabilityController.php index aa732ddd..59de24cb 100644 --- a/src/Wallabag/ImportBundle/Controller/ReadabilityController.php +++ b/src/Wallabag/ImportBundle/Controller/ReadabilityController.php | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Controller; | 3 | namespace Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
6 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
7 | use Symfony\Component\HttpFoundation\Request; | 7 | use Symfony\Component\HttpFoundation\Request; |
8 | use Wallabag\ImportBundle\Form\Type\UploadImportType; | 8 | use Wallabag\ImportBundle\Form\Type\UploadImportType; |
9 | 9 | ||
@@ -29,11 +29,11 @@ class ReadabilityController extends Controller | |||
29 | if ($form->isSubmitted() && $form->isValid()) { | 29 | if ($form->isSubmitted() && $form->isValid()) { |
30 | $file = $form->get('file')->getData(); | 30 | $file = $form->get('file')->getData(); |
31 | $markAsRead = $form->get('mark_as_read')->getData(); | 31 | $markAsRead = $form->get('mark_as_read')->getData(); |
32 | $name = 'readability_'.$this->getUser()->getId().'.json'; | 32 | $name = 'readability_' . $this->getUser()->getId() . '.json'; |
33 | 33 | ||
34 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | 34 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { |
35 | $res = $readability | 35 | $res = $readability |
36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name) | 36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) |
37 | ->setMarkAsRead($markAsRead) | 37 | ->setMarkAsRead($markAsRead) |
38 | ->import(); | 38 | ->import(); |
39 | 39 | ||
@@ -52,7 +52,7 @@ class ReadabilityController extends Controller | |||
52 | ]); | 52 | ]); |
53 | } | 53 | } |
54 | 54 | ||
55 | unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name); | 55 | unlink($this->getParameter('wallabag_import.resource_dir') . '/' . $name); |
56 | } | 56 | } |
57 | 57 | ||
58 | $this->get('session')->getFlashBag()->add( | 58 | $this->get('session')->getFlashBag()->add( |
@@ -61,12 +61,12 @@ class ReadabilityController extends Controller | |||
61 | ); | 61 | ); |
62 | 62 | ||
63 | return $this->redirect($this->generateUrl('homepage')); | 63 | return $this->redirect($this->generateUrl('homepage')); |
64 | } else { | ||
65 | $this->get('session')->getFlashBag()->add( | ||
66 | 'notice', | ||
67 | 'flashes.import.notice.failed_on_file' | ||
68 | ); | ||
69 | } | 64 | } |
65 | |||
66 | $this->get('session')->getFlashBag()->add( | ||
67 | 'notice', | ||
68 | 'flashes.import.notice.failed_on_file' | ||
69 | ); | ||
70 | } | 70 | } |
71 | 71 | ||
72 | return $this->render('WallabagImportBundle:Readability:index.html.twig', [ | 72 | return $this->render('WallabagImportBundle:Readability:index.html.twig', [ |
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagController.php b/src/Wallabag/ImportBundle/Controller/WallabagController.php index e81c1ca9..6e6524b4 100644 --- a/src/Wallabag/ImportBundle/Controller/WallabagController.php +++ b/src/Wallabag/ImportBundle/Controller/WallabagController.php | |||
@@ -3,7 +3,9 @@ | |||
3 | namespace Wallabag\ImportBundle\Controller; | 3 | namespace Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | 5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; |
6 | use Symfony\Component\HttpFoundation\RedirectResponse; | ||
6 | use Symfony\Component\HttpFoundation\Request; | 7 | use Symfony\Component\HttpFoundation\Request; |
8 | use Symfony\Component\HttpFoundation\Response; | ||
7 | use Wallabag\ImportBundle\Form\Type\UploadImportType; | 9 | use Wallabag\ImportBundle\Form\Type\UploadImportType; |
8 | 10 | ||
9 | /** | 11 | /** |
@@ -12,20 +14,6 @@ use Wallabag\ImportBundle\Form\Type\UploadImportType; | |||
12 | abstract class WallabagController extends Controller | 14 | abstract class WallabagController extends Controller |
13 | { | 15 | { |
14 | /** | 16 | /** |
15 | * Return the service to handle the import. | ||
16 | * | ||
17 | * @return \Wallabag\ImportBundle\Import\ImportInterface | ||
18 | */ | ||
19 | abstract protected function getImportService(); | ||
20 | |||
21 | /** | ||
22 | * Return the template used for the form. | ||
23 | * | ||
24 | * @return string | ||
25 | */ | ||
26 | abstract protected function getImportTemplate(); | ||
27 | |||
28 | /** | ||
29 | * Handle import request. | 17 | * Handle import request. |
30 | * | 18 | * |
31 | * @param Request $request | 19 | * @param Request $request |
@@ -43,11 +31,11 @@ abstract class WallabagController extends Controller | |||
43 | if ($form->isSubmitted() && $form->isValid()) { | 31 | if ($form->isSubmitted() && $form->isValid()) { |
44 | $file = $form->get('file')->getData(); | 32 | $file = $form->get('file')->getData(); |
45 | $markAsRead = $form->get('mark_as_read')->getData(); | 33 | $markAsRead = $form->get('mark_as_read')->getData(); |
46 | $name = $this->getUser()->getId().'.json'; | 34 | $name = $this->getUser()->getId() . '.json'; |
47 | 35 | ||
48 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | 36 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { |
49 | $res = $wallabag | 37 | $res = $wallabag |
50 | ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name) | 38 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) |
51 | ->setMarkAsRead($markAsRead) | 39 | ->setMarkAsRead($markAsRead) |
52 | ->import(); | 40 | ->import(); |
53 | 41 | ||
@@ -66,7 +54,7 @@ abstract class WallabagController extends Controller | |||
66 | ]); | 54 | ]); |
67 | } | 55 | } |
68 | 56 | ||
69 | unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name); | 57 | unlink($this->getParameter('wallabag_import.resource_dir') . '/' . $name); |
70 | } | 58 | } |
71 | 59 | ||
72 | $this->get('session')->getFlashBag()->add( | 60 | $this->get('session')->getFlashBag()->add( |
@@ -75,12 +63,12 @@ abstract class WallabagController extends Controller | |||
75 | ); | 63 | ); |
76 | 64 | ||
77 | return $this->redirect($this->generateUrl('homepage')); | 65 | return $this->redirect($this->generateUrl('homepage')); |
78 | } else { | ||
79 | $this->get('session')->getFlashBag()->add( | ||
80 | 'notice', | ||
81 | 'flashes.import.notice.failed_on_file' | ||
82 | ); | ||
83 | } | 66 | } |
67 | |||
68 | $this->get('session')->getFlashBag()->add( | ||
69 | 'notice', | ||
70 | 'flashes.import.notice.failed_on_file' | ||
71 | ); | ||
84 | } | 72 | } |
85 | 73 | ||
86 | return $this->render($this->getImportTemplate(), [ | 74 | return $this->render($this->getImportTemplate(), [ |
@@ -88,4 +76,18 @@ abstract class WallabagController extends Controller | |||
88 | 'import' => $wallabag, | 76 | 'import' => $wallabag, |
89 | ]); | 77 | ]); |
90 | } | 78 | } |
79 | |||
80 | /** | ||
81 | * Return the service to handle the import. | ||
82 | * | ||
83 | * @return \Wallabag\ImportBundle\Import\ImportInterface | ||
84 | */ | ||
85 | abstract protected function getImportService(); | ||
86 | |||
87 | /** | ||
88 | * Return the template used for the form. | ||
89 | * | ||
90 | * @return string | ||
91 | */ | ||
92 | abstract protected function getImportTemplate(); | ||
91 | } | 93 | } |
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php b/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php index 312c7a35..d700d8a8 100644 --- a/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php +++ b/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php | |||
@@ -8,6 +8,14 @@ use Symfony\Component\HttpFoundation\Request; | |||
8 | class WallabagV1Controller extends WallabagController | 8 | class WallabagV1Controller extends WallabagController |
9 | { | 9 | { |
10 | /** | 10 | /** |
11 | * @Route("/wallabag-v1", name="import_wallabag_v1") | ||
12 | */ | ||
13 | public function indexAction(Request $request) | ||
14 | { | ||
15 | return parent::indexAction($request); | ||
16 | } | ||
17 | |||
18 | /** | ||
11 | * {@inheritdoc} | 19 | * {@inheritdoc} |
12 | */ | 20 | */ |
13 | protected function getImportService() | 21 | protected function getImportService() |
@@ -30,12 +38,4 @@ class WallabagV1Controller extends WallabagController | |||
30 | { | 38 | { |
31 | return 'WallabagImportBundle:WallabagV1:index.html.twig'; | 39 | return 'WallabagImportBundle:WallabagV1:index.html.twig'; |
32 | } | 40 | } |
33 | |||
34 | /** | ||
35 | * @Route("/wallabag-v1", name="import_wallabag_v1") | ||
36 | */ | ||
37 | public function indexAction(Request $request) | ||
38 | { | ||
39 | return parent::indexAction($request); | ||
40 | } | ||
41 | } | 41 | } |
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php b/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php index 45211fe6..ab26400c 100644 --- a/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php +++ b/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php | |||
@@ -8,6 +8,14 @@ use Symfony\Component\HttpFoundation\Request; | |||
8 | class WallabagV2Controller extends WallabagController | 8 | class WallabagV2Controller extends WallabagController |
9 | { | 9 | { |
10 | /** | 10 | /** |
11 | * @Route("/wallabag-v2", name="import_wallabag_v2") | ||
12 | */ | ||
13 | public function indexAction(Request $request) | ||
14 | { | ||
15 | return parent::indexAction($request); | ||
16 | } | ||
17 | |||
18 | /** | ||
11 | * {@inheritdoc} | 19 | * {@inheritdoc} |
12 | */ | 20 | */ |
13 | protected function getImportService() | 21 | protected function getImportService() |
@@ -30,12 +38,4 @@ class WallabagV2Controller extends WallabagController | |||
30 | { | 38 | { |
31 | return 'WallabagImportBundle:WallabagV2:index.html.twig'; | 39 | return 'WallabagImportBundle:WallabagV2:index.html.twig'; |
32 | } | 40 | } |
33 | |||
34 | /** | ||
35 | * @Route("/wallabag-v2", name="import_wallabag_v2") | ||
36 | */ | ||
37 | public function indexAction(Request $request) | ||
38 | { | ||
39 | return parent::indexAction($request); | ||
40 | } | ||
41 | } | 41 | } |
diff --git a/src/Wallabag/ImportBundle/DependencyInjection/WallabagImportExtension.php b/src/Wallabag/ImportBundle/DependencyInjection/WallabagImportExtension.php index 3f23c36b..cab70297 100644 --- a/src/Wallabag/ImportBundle/DependencyInjection/WallabagImportExtension.php +++ b/src/Wallabag/ImportBundle/DependencyInjection/WallabagImportExtension.php | |||
@@ -2,10 +2,10 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\DependencyInjection; | 3 | namespace Wallabag\ImportBundle\DependencyInjection; |
4 | 4 | ||
5 | use Symfony\Component\DependencyInjection\ContainerBuilder; | ||
6 | use Symfony\Component\Config\FileLocator; | 5 | use Symfony\Component\Config\FileLocator; |
7 | use Symfony\Component\HttpKernel\DependencyInjection\Extension; | 6 | use Symfony\Component\DependencyInjection\ContainerBuilder; |
8 | use Symfony\Component\DependencyInjection\Loader; | 7 | use Symfony\Component\DependencyInjection\Loader; |
8 | use Symfony\Component\HttpKernel\DependencyInjection\Extension; | ||
9 | 9 | ||
10 | class WallabagImportExtension extends Extension | 10 | class WallabagImportExtension extends Extension |
11 | { | 11 | { |
@@ -16,7 +16,7 @@ class WallabagImportExtension extends Extension | |||
16 | $container->setParameter('wallabag_import.allow_mimetypes', $config['allow_mimetypes']); | 16 | $container->setParameter('wallabag_import.allow_mimetypes', $config['allow_mimetypes']); |
17 | $container->setParameter('wallabag_import.resource_dir', $config['resource_dir']); | 17 | $container->setParameter('wallabag_import.resource_dir', $config['resource_dir']); |
18 | 18 | ||
19 | $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); | 19 | $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); |
20 | $loader->load('services.yml'); | 20 | $loader->load('services.yml'); |
21 | } | 21 | } |
22 | 22 | ||
diff --git a/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php b/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php index f50424c1..c50ef8c9 100644 --- a/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php +++ b/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php | |||
@@ -3,10 +3,10 @@ | |||
3 | namespace Wallabag\ImportBundle\Form\Type; | 3 | namespace Wallabag\ImportBundle\Form\Type; |
4 | 4 | ||
5 | use Symfony\Component\Form\AbstractType; | 5 | use Symfony\Component\Form\AbstractType; |
6 | use Symfony\Component\Form\FormBuilderInterface; | ||
7 | use Symfony\Component\Form\Extension\Core\Type\SubmitType; | ||
8 | use Symfony\Component\Form\Extension\Core\Type\FileType; | ||
9 | use Symfony\Component\Form\Extension\Core\Type\CheckboxType; | 6 | use Symfony\Component\Form\Extension\Core\Type\CheckboxType; |
7 | use Symfony\Component\Form\Extension\Core\Type\FileType; | ||
8 | use Symfony\Component\Form\Extension\Core\Type\SubmitType; | ||
9 | use Symfony\Component\Form\FormBuilderInterface; | ||
10 | 10 | ||
11 | class UploadImportType extends AbstractType | 11 | class UploadImportType extends AbstractType |
12 | { | 12 | { |
diff --git a/src/Wallabag/ImportBundle/Import/AbstractImport.php b/src/Wallabag/ImportBundle/Import/AbstractImport.php index 1d4a6e27..58a234f4 100644 --- a/src/Wallabag/ImportBundle/Import/AbstractImport.php +++ b/src/Wallabag/ImportBundle/Import/AbstractImport.php | |||
@@ -2,35 +2,39 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Import; | 3 | namespace Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Doctrine\ORM\EntityManager; | ||
6 | use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface; | ||
5 | use Psr\Log\LoggerInterface; | 7 | use Psr\Log\LoggerInterface; |
6 | use Psr\Log\NullLogger; | 8 | use Psr\Log\NullLogger; |
7 | use Doctrine\ORM\EntityManager; | 9 | use Symfony\Component\EventDispatcher\EventDispatcherInterface; |
8 | use Wallabag\CoreBundle\Helper\ContentProxy; | ||
9 | use Wallabag\CoreBundle\Entity\Entry; | 10 | use Wallabag\CoreBundle\Entity\Entry; |
10 | use Wallabag\CoreBundle\Entity\Tag; | 11 | use Wallabag\CoreBundle\Entity\Tag; |
11 | use Wallabag\UserBundle\Entity\User; | ||
12 | use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface; | ||
13 | use Symfony\Component\EventDispatcher\EventDispatcherInterface; | ||
14 | use Wallabag\CoreBundle\Event\EntrySavedEvent; | 12 | use Wallabag\CoreBundle\Event\EntrySavedEvent; |
13 | use Wallabag\CoreBundle\Helper\ContentProxy; | ||
14 | use Wallabag\CoreBundle\Helper\TagsAssigner; | ||
15 | use Wallabag\UserBundle\Entity\User; | ||
15 | 16 | ||
16 | abstract class AbstractImport implements ImportInterface | 17 | abstract class AbstractImport implements ImportInterface |
17 | { | 18 | { |
18 | protected $em; | 19 | protected $em; |
19 | protected $logger; | 20 | protected $logger; |
20 | protected $contentProxy; | 21 | protected $contentProxy; |
22 | protected $tagsAssigner; | ||
21 | protected $eventDispatcher; | 23 | protected $eventDispatcher; |
22 | protected $producer; | 24 | protected $producer; |
23 | protected $user; | 25 | protected $user; |
24 | protected $markAsRead; | 26 | protected $markAsRead; |
27 | protected $disableContentUpdate = false; | ||
25 | protected $skippedEntries = 0; | 28 | protected $skippedEntries = 0; |
26 | protected $importedEntries = 0; | 29 | protected $importedEntries = 0; |
27 | protected $queuedEntries = 0; | 30 | protected $queuedEntries = 0; |
28 | 31 | ||
29 | public function __construct(EntityManager $em, ContentProxy $contentProxy, EventDispatcherInterface $eventDispatcher) | 32 | public function __construct(EntityManager $em, ContentProxy $contentProxy, TagsAssigner $tagsAssigner, EventDispatcherInterface $eventDispatcher) |
30 | { | 33 | { |
31 | $this->em = $em; | 34 | $this->em = $em; |
32 | $this->logger = new NullLogger(); | 35 | $this->logger = new NullLogger(); |
33 | $this->contentProxy = $contentProxy; | 36 | $this->contentProxy = $contentProxy; |
37 | $this->tagsAssigner = $tagsAssigner; | ||
34 | $this->eventDispatcher = $eventDispatcher; | 38 | $this->eventDispatcher = $eventDispatcher; |
35 | } | 39 | } |
36 | 40 | ||
@@ -82,21 +86,55 @@ abstract class AbstractImport implements ImportInterface | |||
82 | } | 86 | } |
83 | 87 | ||
84 | /** | 88 | /** |
89 | * Set whether articles should be fetched for updated content. | ||
90 | * | ||
91 | * @param bool $disableContentUpdate | ||
92 | */ | ||
93 | public function setDisableContentUpdate($disableContentUpdate) | ||
94 | { | ||
95 | $this->disableContentUpdate = $disableContentUpdate; | ||
96 | |||
97 | return $this; | ||
98 | } | ||
99 | |||
100 | /** | ||
101 | * {@inheritdoc} | ||
102 | */ | ||
103 | public function getSummary() | ||
104 | { | ||
105 | return [ | ||
106 | 'skipped' => $this->skippedEntries, | ||
107 | 'imported' => $this->importedEntries, | ||
108 | 'queued' => $this->queuedEntries, | ||
109 | ]; | ||
110 | } | ||
111 | |||
112 | /** | ||
113 | * Parse one entry. | ||
114 | * | ||
115 | * @param array $importedEntry | ||
116 | * | ||
117 | * @return Entry | ||
118 | */ | ||
119 | abstract public function parseEntry(array $importedEntry); | ||
120 | |||
121 | /** | ||
85 | * Fetch content from the ContentProxy (using graby). | 122 | * Fetch content from the ContentProxy (using graby). |
86 | * If it fails return the given entry to be saved in all case (to avoid user to loose the content). | 123 | * If it fails return the given entry to be saved in all case (to avoid user to loose the content). |
87 | * | 124 | * |
88 | * @param Entry $entry Entry to update | 125 | * @param Entry $entry Entry to update |
89 | * @param string $url Url to grab content for | 126 | * @param string $url Url to grab content for |
90 | * @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url | 127 | * @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url |
91 | * | ||
92 | * @return Entry | ||
93 | */ | 128 | */ |
94 | protected function fetchContent(Entry $entry, $url, array $content = []) | 129 | protected function fetchContent(Entry $entry, $url, array $content = []) |
95 | { | 130 | { |
96 | try { | 131 | try { |
97 | return $this->contentProxy->updateEntry($entry, $url, $content); | 132 | $this->contentProxy->updateEntry($entry, $url, $content, $this->disableContentUpdate); |
98 | } catch (\Exception $e) { | 133 | } catch (\Exception $e) { |
99 | return $entry; | 134 | $this->logger->error('Error trying to import an entry.', [ |
135 | 'entry_url' => $url, | ||
136 | 'error_msg' => $e->getMessage(), | ||
137 | ]); | ||
100 | } | 138 | } |
101 | } | 139 | } |
102 | 140 | ||
@@ -127,7 +165,7 @@ abstract class AbstractImport implements ImportInterface | |||
127 | $entryToBeFlushed[] = $entry; | 165 | $entryToBeFlushed[] = $entry; |
128 | 166 | ||
129 | // flush every 20 entries | 167 | // flush every 20 entries |
130 | if (($i % 20) === 0) { | 168 | if (0 === ($i % 20)) { |
131 | $this->em->flush(); | 169 | $this->em->flush(); |
132 | 170 | ||
133 | foreach ($entryToBeFlushed as $entry) { | 171 | foreach ($entryToBeFlushed as $entry) { |
@@ -179,27 +217,6 @@ abstract class AbstractImport implements ImportInterface | |||
179 | } | 217 | } |
180 | 218 | ||
181 | /** | 219 | /** |
182 | * {@inheritdoc} | ||
183 | */ | ||
184 | public function getSummary() | ||
185 | { | ||
186 | return [ | ||
187 | 'skipped' => $this->skippedEntries, | ||
188 | 'imported' => $this->importedEntries, | ||
189 | 'queued' => $this->queuedEntries, | ||
190 | ]; | ||
191 | } | ||
192 | |||
193 | /** | ||
194 | * Parse one entry. | ||
195 | * | ||
196 | * @param array $importedEntry | ||
197 | * | ||
198 | * @return Entry | ||
199 | */ | ||
200 | abstract public function parseEntry(array $importedEntry); | ||
201 | |||
202 | /** | ||
203 | * Set current imported entry to archived / read. | 220 | * Set current imported entry to archived / read. |
204 | * Implementation is different accross all imports. | 221 | * Implementation is different accross all imports. |
205 | * | 222 | * |
diff --git a/src/Wallabag/ImportBundle/Import/BrowserImport.php b/src/Wallabag/ImportBundle/Import/BrowserImport.php index 8bf7d92e..b5593180 100644 --- a/src/Wallabag/ImportBundle/Import/BrowserImport.php +++ b/src/Wallabag/ImportBundle/Import/BrowserImport.php | |||
@@ -3,8 +3,6 @@ | |||
3 | namespace Wallabag\ImportBundle\Import; | 3 | namespace Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Entity\Entry; | 5 | use Wallabag\CoreBundle\Entity\Entry; |
6 | use Wallabag\UserBundle\Entity\User; | ||
7 | use Wallabag\CoreBundle\Helper\ContentProxy; | ||
8 | use Wallabag\CoreBundle\Event\EntrySavedEvent; | 6 | use Wallabag\CoreBundle\Event\EntrySavedEvent; |
9 | 7 | ||
10 | abstract class BrowserImport extends AbstractImport | 8 | abstract class BrowserImport extends AbstractImport |
@@ -75,6 +73,80 @@ abstract class BrowserImport extends AbstractImport | |||
75 | } | 73 | } |
76 | 74 | ||
77 | /** | 75 | /** |
76 | * {@inheritdoc} | ||
77 | */ | ||
78 | public function parseEntry(array $importedEntry) | ||
79 | { | ||
80 | if ((!array_key_exists('guid', $importedEntry) || (!array_key_exists('id', $importedEntry))) && is_array(reset($importedEntry))) { | ||
81 | if ($this->producer) { | ||
82 | $this->parseEntriesForProducer($importedEntry); | ||
83 | |||
84 | return; | ||
85 | } | ||
86 | |||
87 | $this->parseEntries($importedEntry); | ||
88 | |||
89 | return; | ||
90 | } | ||
91 | |||
92 | if (array_key_exists('children', $importedEntry)) { | ||
93 | if ($this->producer) { | ||
94 | $this->parseEntriesForProducer($importedEntry['children']); | ||
95 | |||
96 | return; | ||
97 | } | ||
98 | |||
99 | $this->parseEntries($importedEntry['children']); | ||
100 | |||
101 | return; | ||
102 | } | ||
103 | |||
104 | if (!array_key_exists('uri', $importedEntry) && !array_key_exists('url', $importedEntry)) { | ||
105 | return; | ||
106 | } | ||
107 | |||
108 | $url = array_key_exists('uri', $importedEntry) ? $importedEntry['uri'] : $importedEntry['url']; | ||
109 | |||
110 | $existingEntry = $this->em | ||
111 | ->getRepository('WallabagCoreBundle:Entry') | ||
112 | ->findByUrlAndUserId($url, $this->user->getId()); | ||
113 | |||
114 | if (false !== $existingEntry) { | ||
115 | ++$this->skippedEntries; | ||
116 | |||
117 | return; | ||
118 | } | ||
119 | |||
120 | $data = $this->prepareEntry($importedEntry); | ||
121 | |||
122 | $entry = new Entry($this->user); | ||
123 | $entry->setUrl($data['url']); | ||
124 | $entry->setTitle($data['title']); | ||
125 | |||
126 | // update entry with content (in case fetching failed, the given entry will be return) | ||
127 | $this->fetchContent($entry, $data['url'], $data); | ||
128 | |||
129 | if (array_key_exists('tags', $data)) { | ||
130 | $this->tagsAssigner->assignTagsToEntry( | ||
131 | $entry, | ||
132 | $data['tags'] | ||
133 | ); | ||
134 | } | ||
135 | |||
136 | $entry->setArchived($data['is_archived']); | ||
137 | |||
138 | if (!empty($data['created_at'])) { | ||
139 | $dt = new \DateTime(); | ||
140 | $entry->setCreatedAt($dt->setTimestamp($data['created_at'])); | ||
141 | } | ||
142 | |||
143 | $this->em->persist($entry); | ||
144 | ++$this->importedEntries; | ||
145 | |||
146 | return $entry; | ||
147 | } | ||
148 | |||
149 | /** | ||
78 | * Parse and insert all given entries. | 150 | * Parse and insert all given entries. |
79 | * | 151 | * |
80 | * @param $entries | 152 | * @param $entries |
@@ -99,7 +171,7 @@ abstract class BrowserImport extends AbstractImport | |||
99 | $entryToBeFlushed[] = $entry; | 171 | $entryToBeFlushed[] = $entry; |
100 | 172 | ||
101 | // flush every 20 entries | 173 | // flush every 20 entries |
102 | if (($i % 20) === 0) { | 174 | if (0 === ($i % 20)) { |
103 | $this->em->flush(); | 175 | $this->em->flush(); |
104 | 176 | ||
105 | foreach ($entryToBeFlushed as $entry) { | 177 | foreach ($entryToBeFlushed as $entry) { |
@@ -153,84 +225,12 @@ abstract class BrowserImport extends AbstractImport | |||
153 | /** | 225 | /** |
154 | * {@inheritdoc} | 226 | * {@inheritdoc} |
155 | */ | 227 | */ |
156 | public function parseEntry(array $importedEntry) | ||
157 | { | ||
158 | if ((!array_key_exists('guid', $importedEntry) || (!array_key_exists('id', $importedEntry))) && is_array(reset($importedEntry))) { | ||
159 | if ($this->producer) { | ||
160 | $this->parseEntriesForProducer($importedEntry); | ||
161 | |||
162 | return; | ||
163 | } | ||
164 | |||
165 | $this->parseEntries($importedEntry); | ||
166 | |||
167 | return; | ||
168 | } | ||
169 | |||
170 | if (array_key_exists('children', $importedEntry)) { | ||
171 | if ($this->producer) { | ||
172 | $this->parseEntriesForProducer($importedEntry['children']); | ||
173 | |||
174 | return; | ||
175 | } | ||
176 | |||
177 | $this->parseEntries($importedEntry['children']); | ||
178 | |||
179 | return; | ||
180 | } | ||
181 | |||
182 | if (!array_key_exists('uri', $importedEntry) && !array_key_exists('url', $importedEntry)) { | ||
183 | return; | ||
184 | } | ||
185 | |||
186 | $url = array_key_exists('uri', $importedEntry) ? $importedEntry['uri'] : $importedEntry['url']; | ||
187 | |||
188 | $existingEntry = $this->em | ||
189 | ->getRepository('WallabagCoreBundle:Entry') | ||
190 | ->findByUrlAndUserId($url, $this->user->getId()); | ||
191 | |||
192 | if (false !== $existingEntry) { | ||
193 | ++$this->skippedEntries; | ||
194 | |||
195 | return; | ||
196 | } | ||
197 | |||
198 | $data = $this->prepareEntry($importedEntry); | ||
199 | |||
200 | $entry = new Entry($this->user); | ||
201 | $entry->setUrl($data['url']); | ||
202 | $entry->setTitle($data['title']); | ||
203 | |||
204 | // update entry with content (in case fetching failed, the given entry will be return) | ||
205 | $entry = $this->fetchContent($entry, $data['url'], $data); | ||
206 | |||
207 | if (array_key_exists('tags', $data)) { | ||
208 | $this->contentProxy->assignTagsToEntry( | ||
209 | $entry, | ||
210 | $data['tags'] | ||
211 | ); | ||
212 | } | ||
213 | |||
214 | $entry->setArchived($data['is_archived']); | ||
215 | |||
216 | if (!empty($data['created_at'])) { | ||
217 | $dt = new \DateTime(); | ||
218 | $entry->setCreatedAt($dt->setTimestamp($data['created_at'])); | ||
219 | } | ||
220 | |||
221 | $this->em->persist($entry); | ||
222 | ++$this->importedEntries; | ||
223 | |||
224 | return $entry; | ||
225 | } | ||
226 | |||
227 | /** | ||
228 | * {@inheritdoc} | ||
229 | */ | ||
230 | protected function setEntryAsRead(array $importedEntry) | 228 | protected function setEntryAsRead(array $importedEntry) |
231 | { | 229 | { |
232 | $importedEntry['is_archived'] = 1; | 230 | $importedEntry['is_archived'] = 1; |
233 | 231 | ||
234 | return $importedEntry; | 232 | return $importedEntry; |
235 | } | 233 | } |
234 | |||
235 | abstract protected function prepareEntry(array $entry = []); | ||
236 | } | 236 | } |
diff --git a/src/Wallabag/ImportBundle/Import/ChromeImport.php b/src/Wallabag/ImportBundle/Import/ChromeImport.php index 2667890f..09183abe 100644 --- a/src/Wallabag/ImportBundle/Import/ChromeImport.php +++ b/src/Wallabag/ImportBundle/Import/ChromeImport.php | |||
@@ -45,7 +45,7 @@ class ChromeImport extends BrowserImport | |||
45 | 'created_at' => substr($entry['date_added'], 0, 10), | 45 | 'created_at' => substr($entry['date_added'], 0, 10), |
46 | ]; | 46 | ]; |
47 | 47 | ||
48 | if (array_key_exists('tags', $entry) && $entry['tags'] != '') { | 48 | if (array_key_exists('tags', $entry) && '' !== $entry['tags']) { |
49 | $data['tags'] = $entry['tags']; | 49 | $data['tags'] = $entry['tags']; |
50 | } | 50 | } |
51 | 51 | ||
diff --git a/src/Wallabag/ImportBundle/Import/FirefoxImport.php b/src/Wallabag/ImportBundle/Import/FirefoxImport.php index c50c69b3..73269fe1 100644 --- a/src/Wallabag/ImportBundle/Import/FirefoxImport.php +++ b/src/Wallabag/ImportBundle/Import/FirefoxImport.php | |||
@@ -45,7 +45,7 @@ class FirefoxImport extends BrowserImport | |||
45 | 'created_at' => substr($entry['dateAdded'], 0, 10), | 45 | 'created_at' => substr($entry['dateAdded'], 0, 10), |
46 | ]; | 46 | ]; |
47 | 47 | ||
48 | if (array_key_exists('tags', $entry) && $entry['tags'] != '') { | 48 | if (array_key_exists('tags', $entry) && '' !== $entry['tags']) { |
49 | $data['tags'] = $entry['tags']; | 49 | $data['tags'] = $entry['tags']; |
50 | } | 50 | } |
51 | 51 | ||
diff --git a/src/Wallabag/ImportBundle/Import/ImportCompilerPass.php b/src/Wallabag/ImportBundle/Import/ImportCompilerPass.php index a363a566..d7df0a83 100644 --- a/src/Wallabag/ImportBundle/Import/ImportCompilerPass.php +++ b/src/Wallabag/ImportBundle/Import/ImportCompilerPass.php | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Import; | 3 | namespace Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Symfony\Component\DependencyInjection\ContainerBuilder; | ||
6 | use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; | 5 | use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; |
6 | use Symfony\Component\DependencyInjection\ContainerBuilder; | ||
7 | use Symfony\Component\DependencyInjection\Reference; | 7 | use Symfony\Component\DependencyInjection\Reference; |
8 | 8 | ||
9 | class ImportCompilerPass implements CompilerPassInterface | 9 | class ImportCompilerPass implements CompilerPassInterface |
diff --git a/src/Wallabag/ImportBundle/Import/InstapaperImport.php b/src/Wallabag/ImportBundle/Import/InstapaperImport.php index 70a53f1a..7ab69e7a 100644 --- a/src/Wallabag/ImportBundle/Import/InstapaperImport.php +++ b/src/Wallabag/ImportBundle/Import/InstapaperImport.php | |||
@@ -63,18 +63,27 @@ class InstapaperImport extends AbstractImport | |||
63 | 63 | ||
64 | $entries = []; | 64 | $entries = []; |
65 | $handle = fopen($this->filepath, 'r'); | 65 | $handle = fopen($this->filepath, 'r'); |
66 | while (($data = fgetcsv($handle, 10240)) !== false) { | 66 | while (false !== ($data = fgetcsv($handle, 10240))) { |
67 | if ('URL' === $data[0]) { | 67 | if ('URL' === $data[0]) { |
68 | continue; | 68 | continue; |
69 | } | 69 | } |
70 | 70 | ||
71 | // last element in the csv is the folder where the content belong | ||
72 | // BUT it can also be the status (since status = folder in Instapaper) | ||
73 | // and we don't want archive, unread & starred to become a tag | ||
74 | $tags = null; | ||
75 | if (false === in_array($data[3], ['Archive', 'Unread', 'Starred'], true)) { | ||
76 | $tags = [$data[3]]; | ||
77 | } | ||
78 | |||
71 | $entries[] = [ | 79 | $entries[] = [ |
72 | 'url' => $data[0], | 80 | 'url' => $data[0], |
73 | 'title' => $data[1], | 81 | 'title' => $data[1], |
74 | 'status' => $data[3], | 82 | 'status' => $data[3], |
75 | 'is_archived' => $data[3] === 'Archive' || $data[3] === 'Starred', | 83 | 'is_archived' => 'Archive' === $data[3] || 'Starred' === $data[3], |
76 | 'is_starred' => $data[3] === 'Starred', | 84 | 'is_starred' => 'Starred' === $data[3], |
77 | 'html' => false, | 85 | 'html' => false, |
86 | 'tags' => $tags, | ||
78 | ]; | 87 | ]; |
79 | } | 88 | } |
80 | fclose($handle); | 89 | fclose($handle); |
@@ -116,7 +125,15 @@ class InstapaperImport extends AbstractImport | |||
116 | $entry->setTitle($importedEntry['title']); | 125 | $entry->setTitle($importedEntry['title']); |
117 | 126 | ||
118 | // update entry with content (in case fetching failed, the given entry will be return) | 127 | // update entry with content (in case fetching failed, the given entry will be return) |
119 | $entry = $this->fetchContent($entry, $importedEntry['url'], $importedEntry); | 128 | $this->fetchContent($entry, $importedEntry['url'], $importedEntry); |
129 | |||
130 | if (!empty($importedEntry['tags'])) { | ||
131 | $this->tagsAssigner->assignTagsToEntry( | ||
132 | $entry, | ||
133 | $importedEntry['tags'], | ||
134 | $this->em->getUnitOfWork()->getScheduledEntityInsertions() | ||
135 | ); | ||
136 | } | ||
120 | 137 | ||
121 | $entry->setArchived($importedEntry['is_archived']); | 138 | $entry->setArchived($importedEntry['is_archived']); |
122 | $entry->setStarred($importedEntry['is_starred']); | 139 | $entry->setStarred($importedEntry['is_starred']); |
diff --git a/src/Wallabag/ImportBundle/Import/PinboardImport.php b/src/Wallabag/ImportBundle/Import/PinboardImport.php index d9865534..110b0464 100644 --- a/src/Wallabag/ImportBundle/Import/PinboardImport.php +++ b/src/Wallabag/ImportBundle/Import/PinboardImport.php | |||
@@ -109,10 +109,10 @@ class PinboardImport extends AbstractImport | |||
109 | $entry->setTitle($data['title']); | 109 | $entry->setTitle($data['title']); |
110 | 110 | ||
111 | // update entry with content (in case fetching failed, the given entry will be return) | 111 | // update entry with content (in case fetching failed, the given entry will be return) |
112 | $entry = $this->fetchContent($entry, $data['url'], $data); | 112 | $this->fetchContent($entry, $data['url'], $data); |
113 | 113 | ||
114 | if (!empty($data['tags'])) { | 114 | if (!empty($data['tags'])) { |
115 | $this->contentProxy->assignTagsToEntry( | 115 | $this->tagsAssigner->assignTagsToEntry( |
116 | $entry, | 116 | $entry, |
117 | $data['tags'], | 117 | $data['tags'], |
118 | $this->em->getUnitOfWork()->getScheduledEntityInsertions() | 118 | $this->em->getUnitOfWork()->getScheduledEntityInsertions() |
diff --git a/src/Wallabag/ImportBundle/Import/PocketImport.php b/src/Wallabag/ImportBundle/Import/PocketImport.php index 33093480..dddb87f4 100644 --- a/src/Wallabag/ImportBundle/Import/PocketImport.php +++ b/src/Wallabag/ImportBundle/Import/PocketImport.php | |||
@@ -5,15 +5,13 @@ namespace Wallabag\ImportBundle\Import; | |||
5 | use GuzzleHttp\Client; | 5 | use GuzzleHttp\Client; |
6 | use GuzzleHttp\Exception\RequestException; | 6 | use GuzzleHttp\Exception\RequestException; |
7 | use Wallabag\CoreBundle\Entity\Entry; | 7 | use Wallabag\CoreBundle\Entity\Entry; |
8 | use Wallabag\CoreBundle\Helper\ContentProxy; | ||
9 | 8 | ||
10 | class PocketImport extends AbstractImport | 9 | class PocketImport extends AbstractImport |
11 | { | 10 | { |
11 | const NB_ELEMENTS = 5000; | ||
12 | private $client; | 12 | private $client; |
13 | private $accessToken; | 13 | private $accessToken; |
14 | 14 | ||
15 | const NB_ELEMENTS = 5000; | ||
16 | |||
17 | /** | 15 | /** |
18 | * Only used for test purpose. | 16 | * Only used for test purpose. |
19 | * | 17 | * |
@@ -151,7 +149,7 @@ class PocketImport extends AbstractImport | |||
151 | // - first call get 5k offset 0 | 149 | // - first call get 5k offset 0 |
152 | // - second call get 5k offset 5k | 150 | // - second call get 5k offset 5k |
153 | // - and so on | 151 | // - and so on |
154 | if (count($entries['list']) === self::NB_ELEMENTS) { | 152 | if (self::NB_ELEMENTS === count($entries['list'])) { |
155 | ++$run; | 153 | ++$run; |
156 | 154 | ||
157 | return $this->import(self::NB_ELEMENTS * $run); | 155 | return $this->import(self::NB_ELEMENTS * $run); |
@@ -177,7 +175,7 @@ class PocketImport extends AbstractImport | |||
177 | */ | 175 | */ |
178 | public function parseEntry(array $importedEntry) | 176 | public function parseEntry(array $importedEntry) |
179 | { | 177 | { |
180 | $url = isset($importedEntry['resolved_url']) && $importedEntry['resolved_url'] != '' ? $importedEntry['resolved_url'] : $importedEntry['given_url']; | 178 | $url = isset($importedEntry['resolved_url']) && '' !== $importedEntry['resolved_url'] ? $importedEntry['resolved_url'] : $importedEntry['given_url']; |
181 | 179 | ||
182 | $existingEntry = $this->em | 180 | $existingEntry = $this->em |
183 | ->getRepository('WallabagCoreBundle:Entry') | 181 | ->getRepository('WallabagCoreBundle:Entry') |
@@ -193,18 +191,18 @@ class PocketImport extends AbstractImport | |||
193 | $entry->setUrl($url); | 191 | $entry->setUrl($url); |
194 | 192 | ||
195 | // update entry with content (in case fetching failed, the given entry will be return) | 193 | // update entry with content (in case fetching failed, the given entry will be return) |
196 | $entry = $this->fetchContent($entry, $url); | 194 | $this->fetchContent($entry, $url); |
197 | 195 | ||
198 | // 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted | 196 | // 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted |
199 | $entry->setArchived($importedEntry['status'] == 1 || $this->markAsRead); | 197 | $entry->setArchived(1 === $importedEntry['status'] || $this->markAsRead); |
200 | 198 | ||
201 | // 0 or 1 - 1 If the item is starred | 199 | // 0 or 1 - 1 If the item is starred |
202 | $entry->setStarred($importedEntry['favorite'] == 1); | 200 | $entry->setStarred(1 === $importedEntry['favorite']); |
203 | 201 | ||
204 | $title = 'Untitled'; | 202 | $title = 'Untitled'; |
205 | if (isset($importedEntry['resolved_title']) && $importedEntry['resolved_title'] != '') { | 203 | if (isset($importedEntry['resolved_title']) && '' !== $importedEntry['resolved_title']) { |
206 | $title = $importedEntry['resolved_title']; | 204 | $title = $importedEntry['resolved_title']; |
207 | } elseif (isset($importedEntry['given_title']) && $importedEntry['given_title'] != '') { | 205 | } elseif (isset($importedEntry['given_title']) && '' !== $importedEntry['given_title']) { |
208 | $title = $importedEntry['given_title']; | 206 | $title = $importedEntry['given_title']; |
209 | } | 207 | } |
210 | 208 | ||
@@ -216,7 +214,7 @@ class PocketImport extends AbstractImport | |||
216 | } | 214 | } |
217 | 215 | ||
218 | if (isset($importedEntry['tags']) && !empty($importedEntry['tags'])) { | 216 | if (isset($importedEntry['tags']) && !empty($importedEntry['tags'])) { |
219 | $this->contentProxy->assignTagsToEntry( | 217 | $this->tagsAssigner->assignTagsToEntry( |
220 | $entry, | 218 | $entry, |
221 | array_keys($importedEntry['tags']), | 219 | array_keys($importedEntry['tags']), |
222 | $this->em->getUnitOfWork()->getScheduledEntityInsertions() | 220 | $this->em->getUnitOfWork()->getScheduledEntityInsertions() |
diff --git a/src/Wallabag/ImportBundle/Import/ReadabilityImport.php b/src/Wallabag/ImportBundle/Import/ReadabilityImport.php index de320d23..002b27f4 100644 --- a/src/Wallabag/ImportBundle/Import/ReadabilityImport.php +++ b/src/Wallabag/ImportBundle/Import/ReadabilityImport.php | |||
@@ -109,7 +109,7 @@ class ReadabilityImport extends AbstractImport | |||
109 | $entry->setTitle($data['title']); | 109 | $entry->setTitle($data['title']); |
110 | 110 | ||
111 | // update entry with content (in case fetching failed, the given entry will be return) | 111 | // update entry with content (in case fetching failed, the given entry will be return) |
112 | $entry = $this->fetchContent($entry, $data['url'], $data); | 112 | $this->fetchContent($entry, $data['url'], $data); |
113 | 113 | ||
114 | $entry->setArchived($data['is_archived']); | 114 | $entry->setArchived($data['is_archived']); |
115 | $entry->setStarred($data['is_starred']); | 115 | $entry->setStarred($data['is_starred']); |
diff --git a/src/Wallabag/ImportBundle/Import/WallabagImport.php b/src/Wallabag/ImportBundle/Import/WallabagImport.php index 702da057..c64ccd64 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagImport.php +++ b/src/Wallabag/ImportBundle/Import/WallabagImport.php | |||
@@ -108,10 +108,10 @@ abstract class WallabagImport extends AbstractImport | |||
108 | $entry->setTitle($data['title']); | 108 | $entry->setTitle($data['title']); |
109 | 109 | ||
110 | // update entry with content (in case fetching failed, the given entry will be return) | 110 | // update entry with content (in case fetching failed, the given entry will be return) |
111 | $entry = $this->fetchContent($entry, $data['url'], $data); | 111 | $this->fetchContent($entry, $data['url'], $data); |
112 | 112 | ||
113 | if (array_key_exists('tags', $data)) { | 113 | if (array_key_exists('tags', $data)) { |
114 | $this->contentProxy->assignTagsToEntry( | 114 | $this->tagsAssigner->assignTagsToEntry( |
115 | $entry, | 115 | $entry, |
116 | $data['tags'], | 116 | $data['tags'], |
117 | $this->em->getUnitOfWork()->getScheduledEntityInsertions() | 117 | $this->em->getUnitOfWork()->getScheduledEntityInsertions() |
diff --git a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php index 59e3ce02..a35c411e 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php +++ b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php | |||
@@ -4,6 +4,17 @@ namespace Wallabag\ImportBundle\Import; | |||
4 | 4 | ||
5 | class WallabagV1Import extends WallabagImport | 5 | class WallabagV1Import extends WallabagImport |
6 | { | 6 | { |
7 | protected $fetchingErrorMessage; | ||
8 | protected $fetchingErrorMessageTitle; | ||
9 | |||
10 | public function __construct($em, $contentProxy, $tagsAssigner, $eventDispatcher, $fetchingErrorMessageTitle, $fetchingErrorMessage) | ||
11 | { | ||
12 | $this->fetchingErrorMessageTitle = $fetchingErrorMessageTitle; | ||
13 | $this->fetchingErrorMessage = $fetchingErrorMessage; | ||
14 | |||
15 | parent::__construct($em, $contentProxy, $tagsAssigner, $eventDispatcher); | ||
16 | } | ||
17 | |||
7 | /** | 18 | /** |
8 | * {@inheritdoc} | 19 | * {@inheritdoc} |
9 | */ | 20 | */ |
@@ -43,13 +54,14 @@ class WallabagV1Import extends WallabagImport | |||
43 | 'created_at' => '', | 54 | 'created_at' => '', |
44 | ]; | 55 | ]; |
45 | 56 | ||
46 | // force content to be refreshed in case on bad fetch in the v1 installation | 57 | // In case of a bad fetch in v1, replace title and content with v2 error strings |
47 | if (in_array($entry['title'], $this->untitled)) { | 58 | // If fetching fails again, they will get this instead of the v1 strings |
48 | $data['title'] = ''; | 59 | if (in_array($entry['title'], $this->untitled, true)) { |
49 | $data['html'] = ''; | 60 | $data['title'] = $this->fetchingErrorMessageTitle; |
61 | $data['html'] = $this->fetchingErrorMessage; | ||
50 | } | 62 | } |
51 | 63 | ||
52 | if (array_key_exists('tags', $entry) && $entry['tags'] != '') { | 64 | if (array_key_exists('tags', $entry) && '' !== $entry['tags']) { |
53 | $data['tags'] = $entry['tags']; | 65 | $data['tags'] = $entry['tags']; |
54 | } | 66 | } |
55 | 67 | ||
diff --git a/src/Wallabag/ImportBundle/Import/WallabagV2Import.php b/src/Wallabag/ImportBundle/Import/WallabagV2Import.php index d2a89d79..3e085ecf 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagV2Import.php +++ b/src/Wallabag/ImportBundle/Import/WallabagV2Import.php | |||
@@ -36,8 +36,8 @@ class WallabagV2Import extends WallabagImport | |||
36 | return [ | 36 | return [ |
37 | 'html' => $entry['content'], | 37 | 'html' => $entry['content'], |
38 | 'content_type' => $entry['mimetype'], | 38 | 'content_type' => $entry['mimetype'], |
39 | 'is_archived' => (int) ($entry['is_archived'] || $this->markAsRead), | 39 | 'is_archived' => (bool) ($entry['is_archived'] || $this->markAsRead), |
40 | 'is_starred' => false, | 40 | 'is_starred' => (bool) $entry['is_starred'], |
41 | ] + $entry; | 41 | ] + $entry; |
42 | } | 42 | } |
43 | 43 | ||
diff --git a/src/Wallabag/ImportBundle/Redis/Producer.php b/src/Wallabag/ImportBundle/Redis/Producer.php index fedc3e57..c77b5174 100644 --- a/src/Wallabag/ImportBundle/Redis/Producer.php +++ b/src/Wallabag/ImportBundle/Redis/Producer.php | |||
@@ -29,7 +29,7 @@ class Producer implements ProducerInterface | |||
29 | * @param string $routingKey NOT USED | 29 | * @param string $routingKey NOT USED |
30 | * @param array $additionalProperties NOT USED | 30 | * @param array $additionalProperties NOT USED |
31 | */ | 31 | */ |
32 | public function publish($msgBody, $routingKey = '', $additionalProperties = array()) | 32 | public function publish($msgBody, $routingKey = '', $additionalProperties = []) |
33 | { | 33 | { |
34 | $this->queue->sendJob($msgBody); | 34 | $this->queue->sendJob($msgBody); |
35 | } | 35 | } |
diff --git a/src/Wallabag/ImportBundle/Resources/config/services.yml b/src/Wallabag/ImportBundle/Resources/config/services.yml index c4fe3f92..b224a6a2 100644 --- a/src/Wallabag/ImportBundle/Resources/config/services.yml +++ b/src/Wallabag/ImportBundle/Resources/config/services.yml | |||
@@ -20,6 +20,7 @@ services: | |||
20 | arguments: | 20 | arguments: |
21 | - "@doctrine.orm.entity_manager" | 21 | - "@doctrine.orm.entity_manager" |
22 | - "@wallabag_core.content_proxy" | 22 | - "@wallabag_core.content_proxy" |
23 | - "@wallabag_core.tags_assigner" | ||
23 | - "@event_dispatcher" | 24 | - "@event_dispatcher" |
24 | calls: | 25 | calls: |
25 | - [ setClient, [ "@wallabag_import.pocket.client" ] ] | 26 | - [ setClient, [ "@wallabag_import.pocket.client" ] ] |
@@ -32,7 +33,10 @@ services: | |||
32 | arguments: | 33 | arguments: |
33 | - "@doctrine.orm.entity_manager" | 34 | - "@doctrine.orm.entity_manager" |
34 | - "@wallabag_core.content_proxy" | 35 | - "@wallabag_core.content_proxy" |
36 | - "@wallabag_core.tags_assigner" | ||
35 | - "@event_dispatcher" | 37 | - "@event_dispatcher" |
38 | - "%wallabag_core.fetching_error_message_title%" | ||
39 | - "%wallabag_core.fetching_error_message%" | ||
36 | calls: | 40 | calls: |
37 | - [ setLogger, [ "@logger" ]] | 41 | - [ setLogger, [ "@logger" ]] |
38 | tags: | 42 | tags: |
@@ -43,6 +47,7 @@ services: | |||
43 | arguments: | 47 | arguments: |
44 | - "@doctrine.orm.entity_manager" | 48 | - "@doctrine.orm.entity_manager" |
45 | - "@wallabag_core.content_proxy" | 49 | - "@wallabag_core.content_proxy" |
50 | - "@wallabag_core.tags_assigner" | ||
46 | - "@event_dispatcher" | 51 | - "@event_dispatcher" |
47 | calls: | 52 | calls: |
48 | - [ setLogger, [ "@logger" ]] | 53 | - [ setLogger, [ "@logger" ]] |
@@ -54,6 +59,7 @@ services: | |||
54 | arguments: | 59 | arguments: |
55 | - "@doctrine.orm.entity_manager" | 60 | - "@doctrine.orm.entity_manager" |
56 | - "@wallabag_core.content_proxy" | 61 | - "@wallabag_core.content_proxy" |
62 | - "@wallabag_core.tags_assigner" | ||
57 | - "@event_dispatcher" | 63 | - "@event_dispatcher" |
58 | calls: | 64 | calls: |
59 | - [ setLogger, [ "@logger" ]] | 65 | - [ setLogger, [ "@logger" ]] |
@@ -65,6 +71,7 @@ services: | |||
65 | arguments: | 71 | arguments: |
66 | - "@doctrine.orm.entity_manager" | 72 | - "@doctrine.orm.entity_manager" |
67 | - "@wallabag_core.content_proxy" | 73 | - "@wallabag_core.content_proxy" |
74 | - "@wallabag_core.tags_assigner" | ||
68 | - "@event_dispatcher" | 75 | - "@event_dispatcher" |
69 | calls: | 76 | calls: |
70 | - [ setLogger, [ "@logger" ]] | 77 | - [ setLogger, [ "@logger" ]] |
@@ -76,6 +83,7 @@ services: | |||
76 | arguments: | 83 | arguments: |
77 | - "@doctrine.orm.entity_manager" | 84 | - "@doctrine.orm.entity_manager" |
78 | - "@wallabag_core.content_proxy" | 85 | - "@wallabag_core.content_proxy" |
86 | - "@wallabag_core.tags_assigner" | ||
79 | - "@event_dispatcher" | 87 | - "@event_dispatcher" |
80 | calls: | 88 | calls: |
81 | - [ setLogger, [ "@logger" ]] | 89 | - [ setLogger, [ "@logger" ]] |
@@ -87,6 +95,7 @@ services: | |||
87 | arguments: | 95 | arguments: |
88 | - "@doctrine.orm.entity_manager" | 96 | - "@doctrine.orm.entity_manager" |
89 | - "@wallabag_core.content_proxy" | 97 | - "@wallabag_core.content_proxy" |
98 | - "@wallabag_core.tags_assigner" | ||
90 | - "@event_dispatcher" | 99 | - "@event_dispatcher" |
91 | calls: | 100 | calls: |
92 | - [ setLogger, [ "@logger" ]] | 101 | - [ setLogger, [ "@logger" ]] |
@@ -97,6 +106,7 @@ services: | |||
97 | arguments: | 106 | arguments: |
98 | - "@doctrine.orm.entity_manager" | 107 | - "@doctrine.orm.entity_manager" |
99 | - "@wallabag_core.content_proxy" | 108 | - "@wallabag_core.content_proxy" |
109 | - "@wallabag_core.tags_assigner" | ||
100 | - "@event_dispatcher" | 110 | - "@event_dispatcher" |
101 | calls: | 111 | calls: |
102 | - [ setLogger, [ "@logger" ]] | 112 | - [ setLogger, [ "@logger" ]] |
diff --git a/src/Wallabag/ImportBundle/WallabagImportBundle.php b/src/Wallabag/ImportBundle/WallabagImportBundle.php index a5ddc1b4..98c2f97b 100644 --- a/src/Wallabag/ImportBundle/WallabagImportBundle.php +++ b/src/Wallabag/ImportBundle/WallabagImportBundle.php | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle; | 3 | namespace Wallabag\ImportBundle; |
4 | 4 | ||
5 | use Symfony\Component\HttpKernel\Bundle\Bundle; | ||
6 | use Symfony\Component\DependencyInjection\ContainerBuilder; | 5 | use Symfony\Component\DependencyInjection\ContainerBuilder; |
6 | use Symfony\Component\HttpKernel\Bundle\Bundle; | ||
7 | use Wallabag\ImportBundle\Import\ImportCompilerPass; | 7 | use Wallabag\ImportBundle\Import\ImportCompilerPass; |
8 | 8 | ||
9 | class WallabagImportBundle extends Bundle | 9 | class WallabagImportBundle extends Bundle |