From fe8b37c137adbe036f58616c15dbcffd07dd2cd4 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 12 Feb 2016 15:59:13 +0100 Subject: [PATCH 1/4] Mark all imported articles as read --- .../Controller/WallabagV1Controller.php | 2 ++ .../Controller/WallabagV2Controller.php | 2 ++ .../ImportBundle/Form/Type/UploadImportType.php | 5 +++++ .../ImportBundle/Import/WallabagV1Import.php | 15 ++++++++++++++- .../ImportBundle/Import/WallabagV2Import.php | 2 +- .../Resources/views/WallabagV1/index.html.twig | 5 +++++ 6 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php b/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php index 35fe620f8..8b27144be 100644 --- a/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php +++ b/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php @@ -21,12 +21,14 @@ class WallabagV1Controller extends Controller if ($form->isValid()) { $file = $form->get('file')->getData(); + $markAsRead = $form->get('mark_as_read')->getData(); $name = $this->getUser()->getId().'.json'; if (in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { $res = $wallabag ->setUser($this->getUser()) ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name) + ->setMarkAsRead($markAsRead) ->import(); $message = 'Import failed, please try again.'; diff --git a/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php b/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php index 2e6225f29..6dcd204a7 100644 --- a/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php +++ b/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php @@ -21,12 +21,14 @@ class WallabagV2Controller extends Controller if ($form->isValid()) { $file = $form->get('file')->getData(); + $markAsRead = $form->get('mark_as_read')->getData(); $name = $this->getUser()->getId().'.json'; if (in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { $res = $wallabag ->setUser($this->getUser()) ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name) + ->setMarkAsRead($markAsRead) ->import(); $message = 'Import failed, please try again.'; diff --git a/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php b/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php index 2e6b59cb4..bbc3661a1 100644 --- a/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php +++ b/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php @@ -6,6 +6,7 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\FileType; +use Symfony\Component\Form\Extension\Core\Type\CheckboxType; class UploadImportType extends AbstractType { @@ -13,6 +14,10 @@ class UploadImportType extends AbstractType { $builder ->add('file', FileType::class) + ->add('mark_as_read', CheckboxType::class, array( + 'label' => 'Mark all as read', + 'required' => false, + )) ->add('save', SubmitType::class) ; } diff --git a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php index 05bdb4014..1d773d3bb 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php +++ b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php @@ -19,6 +19,7 @@ class WallabagV1Import implements ImportInterface protected $skippedEntries = 0; protected $importedEntries = 0; protected $filepath; + protected $markAsRead; public function __construct(EntityManager $em, ContentProxy $contentProxy) { @@ -120,6 +121,18 @@ class WallabagV1Import implements ImportInterface return $this; } + /** + * Set whether articles must be all marked as read. + * + * @param bool $markAsRead + */ + public function setMarkAsRead($markAsRead) + { + $this->markAsRead = $markAsRead; + + return $this; + } + /** * @param $entries */ @@ -160,7 +173,7 @@ class WallabagV1Import implements ImportInterface ); } - $entry->setArchived($importedEntry['is_read']); + $entry->setArchived($importedEntry['is_read'] || $this->markAsRead); $entry->setStarred($importedEntry['is_fav']); $this->em->persist($entry); diff --git a/src/Wallabag/ImportBundle/Import/WallabagV2Import.php b/src/Wallabag/ImportBundle/Import/WallabagV2Import.php index 7125eabc1..c4bac5615 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagV2Import.php +++ b/src/Wallabag/ImportBundle/Import/WallabagV2Import.php @@ -51,7 +51,7 @@ class WallabagV2Import extends WallabagV1Import implements ImportInterface $entry = new Entry($this->user); $entry->setUrl($importedEntry['url']); $entry->setTitle($importedEntry['title']); - $entry->setArchived($importedEntry['is_archived']); + $entry->setArchived($importedEntry['is_archived'] || $this->markAsRead); $entry->setStarred($importedEntry['is_starred']); $entry->setContent($importedEntry['content']); $entry->setReadingTime($importedEntry['reading_time']); diff --git a/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig index 1359f2e40..a418ed1c5 100644 --- a/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig +++ b/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig @@ -22,6 +22,11 @@ +
+
{% trans %}Mark all as read ?{% endtrans %}
+ {{ form_widget(form.mark_as_read) }} + +
From c32ae320fec4135f5b32d57ef88349317a3b1f3f Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sat, 13 Feb 2016 16:20:00 +0100 Subject: [PATCH 3/4] cs & tests for wllbg v1 import --- .../Controller/PocketController.php | 3 -- .../ImportBundle/Import/PocketImport.php | 1 - .../ImportBundle/Import/WallabagV1Import.php | 1 - .../Controller/WallabagV1ControllerTest.php | 45 +++++++++++++++++++ .../Tests/Import/WallabagV2ImportTest.php | 30 +++++++++++++ .../Tests/fixtures/wallabag-v1-read.json | 22 +++++++++ .../Tests/fixtures/wallabag-v2-read.json | 25 +++++++++++ 7 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v1-read.json create mode 100644 src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2-read.json diff --git a/src/Wallabag/ImportBundle/Controller/PocketController.php b/src/Wallabag/ImportBundle/Controller/PocketController.php index bfd9fc5b1..ef0407e69 100644 --- a/src/Wallabag/ImportBundle/Controller/PocketController.php +++ b/src/Wallabag/ImportBundle/Controller/PocketController.php @@ -5,11 +5,9 @@ namespace Wallabag\ImportBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; -use Wallabag\ImportBundle\Import\PocketImport; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; - class PocketController extends Controller { /** @@ -24,7 +22,6 @@ class PocketController extends Controller 'required' => false, )) ->getForm(); - ; return $this->render('WallabagImportBundle:Pocket:index.html.twig', [ 'import' => $this->get('wallabag_import.pocket.import'), diff --git a/src/Wallabag/ImportBundle/Import/PocketImport.php b/src/Wallabag/ImportBundle/Import/PocketImport.php index 1cc03d5ba..1ec82a412 100644 --- a/src/Wallabag/ImportBundle/Import/PocketImport.php +++ b/src/Wallabag/ImportBundle/Import/PocketImport.php @@ -124,7 +124,6 @@ class PocketImport implements ImportInterface return true; } - /** * Set whether articles must be all marked as read. * diff --git a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php index 9ea698f96..1d773d3bb 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php +++ b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php @@ -128,7 +128,6 @@ class WallabagV1Import implements ImportInterface */ public function setMarkAsRead($markAsRead) { - var_dump($markAsRead); $this->markAsRead = $markAsRead; return $this; diff --git a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php b/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php index 819bb0e60..c10d0d18f 100644 --- a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php +++ b/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php @@ -58,6 +58,51 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase $this->assertContains('Import summary', $alert[0]); } + public function testImportWallabagWithFileAndMarkAllAsRead() + { + $this->logInAs('admin'); + $client = $this->getClient(); + + $crawler = $client->request('GET', '/import/wallabag-v1'); + $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form(); + + $file = new UploadedFile(__DIR__.'/../fixtures/wallabag-v1-read.json', 'wallabag-v1-read.json'); + + $data = array( + 'upload_import_file[file]' => $file, + 'upload_import_file[mark_as_read]' => 1, + ); + + $client->submit($form, $data); + + $this->assertEquals(302, $client->getResponse()->getStatusCode()); + + $crawler = $client->followRedirect(); + + $content1 = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->findByUrlAndUserId( + 'http://gilbert.pellegrom.me/recreating-the-square-slider', + $this->getLoggedInUserId() + ); + + $this->assertTrue($content1->isArchived()); + + $content2 = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->findByUrlAndUserId( + 'https://www.wallabag.org/features/', + $this->getLoggedInUserId() + ); + + $this->assertTrue($content2->isArchived()); + + $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); + $this->assertContains('Import summary', $alert[0]); + } + public function testImportWallabagWithEmptyFile() { $this->logInAs('admin'); diff --git a/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php b/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php index 3268cd3e8..8728364bc 100644 --- a/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php +++ b/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php @@ -72,6 +72,36 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase $this->assertEquals(['skipped' => 1, 'imported' => 2], $wallabagV2Import->getSummary()); } + public function testImportAndMarkAllAsRead() + { + $wallabagV2Import = $this->getWallabagV2Import(); + $wallabagV2Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2-read.json'); + + $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') + ->disableOriginalConstructor() + ->getMock(); + + $entryRepo->expects($this->exactly(2)) + ->method('findByUrlAndUserId') + ->will($this->onConsecutiveCalls(false, false)); + + $this->em + ->expects($this->any()) + ->method('getRepository') + ->willReturn($entryRepo); + + $res = $wallabagV2Import->setMarkAsRead(true)->import(); + + $this->assertTrue($res); + + $this->em + ->expects($this->any()) + ->method('getBuilderForArchiveByUser') + ->willReturn($entryRepo); + + $this->assertEquals(['skipped' => 0, 'imported' => 2], $wallabagV2Import->getSummary()); + } + public function testImportBadFile() { $wallabagV1Import = $this->getWallabagV2Import(); diff --git a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v1-read.json b/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v1-read.json new file mode 100644 index 000000000..73c6bebb1 --- /dev/null +++ b/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v1-read.json @@ -0,0 +1,22 @@ +[ + { + "id":"3","0":"3", + "title":"Features - wallabag","1":"Features - wallabag", + "url":"https:\/\/www.wallabag.org\/features\/","2":"https:\/\/www.wallabag.org\/features\/", + "is_read":"1","3":"1", + "is_fav":"1","4":"1", + "content":"\n\t\t

Here are some features. If one is missing, you can open a new issue<\/a>.<\/p>\n