From 93c5b47e8891282693cc8bb1fedfb4af06d699b0 Mon Sep 17 00:00:00 2001 From: Kevin Decherf Date: Tue, 4 Feb 2020 22:19:45 +0100 Subject: ExportController: fix entries export from search view Fixes #4240 Signed-off-by: Kevin Decherf --- .../CoreBundle/Controller/ExportController.php | 12 +++++ .../views/themes/baggy/Entry/entries.html.twig | 19 ++++--- .../views/themes/material/Entry/entries.html.twig | 19 ++++--- .../CoreBundle/Controller/ExportControllerTest.php | 63 ++++++++++++++++++++++ 4 files changed, 99 insertions(+), 14 deletions(-) diff --git a/src/Wallabag/CoreBundle/Controller/ExportController.php b/src/Wallabag/CoreBundle/Controller/ExportController.php index 282fd733..cec8d499 100644 --- a/src/Wallabag/CoreBundle/Controller/ExportController.php +++ b/src/Wallabag/CoreBundle/Controller/ExportController.php @@ -68,6 +68,18 @@ class ExportController extends Controller ); $title = 'Tag ' . $tag->getLabel(); + } elseif ('search' === $category) { + $searchTerm = (isset($request->get('search_entry')['term']) ? $request->get('search_entry')['term'] : ''); + $currentRoute = (null !== $request->query->get('currentRoute') ? $request->query->get('currentRoute') : ''); + + $entries = $repository->getBuilderForSearchByUser( + $this->getUser()->getId(), + $searchTerm, + $currentRoute + )->getQuery() + ->getResult(); + + $title = 'Search ' . $searchTerm; } else { $entries = $repository ->$methodBuilder($this->getUser()->getId()) diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig index b747ed84..4182628f 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig @@ -96,16 +96,21 @@ {% if tag is defined %} {% set currentTag = tag %} {% endif %} + {% set exportSearchTerm = null %} + {% if searchTerm is defined %} + {% set exportSearchTerm = searchTerm %} + {% endif %} + {% set previousRoute = app.request.attributes.get('currentRoute') %}

{{ 'entry.list.export_title'|trans }}

× diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig index 3906e1e0..0c21dc5d 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig @@ -63,15 +63,20 @@ {% if tag is defined %} {% set currentTag = tag.slug %} {% endif %} + {% set exportSearchTerm = null %} + {% if searchTerm is defined %} + {% set exportSearchTerm = searchTerm %} + {% endif %} + {% set previousRoute = app.request.attributes.get('currentRoute') %}

{{ 'entry.list.export_title'|trans }}

diff --git a/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php index d7ce7c45..36822ab3 100644 --- a/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php @@ -3,9 +3,13 @@ namespace Tests\Wallabag\CoreBundle\Controller; use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; +use Wallabag\CoreBundle\Entity\Entry; class ExportControllerTest extends WallabagCoreTestCase { + private $adminEntry; + private $bobEntry; + public function testLogin() { $client = $this->getClient(); @@ -243,6 +247,30 @@ class ExportControllerTest extends WallabagCoreTestCase $this->assertContains('foo', $content[0]['tags']); } + public function testJsonExportFromSearch() + { + $this->setUpForJsonExportFromSearch(); + + $this->logInAs('admin'); + $client = $this->getClient(); + + ob_start(); + $crawler = $client->request('GET', '/export/search.json?search_entry[term]=entry+search¤tRoute=homepage'); + ob_end_clean(); + + $this->assertSame(200, $client->getResponse()->getStatusCode()); + + $headers = $client->getResponse()->headers; + $this->assertSame('application/json', $headers->get('content-type')); + $this->assertSame('attachment; filename="Search entry search articles.json"', $headers->get('content-disposition')); + $this->assertSame('UTF-8', $headers->get('content-transfer-encoding')); + + $content = json_decode($client->getResponse()->getContent(), true); + $this->assertCount(1, $content); + + $this->tearDownForJsonExportFromSearch(); + } + public function testXmlExport() { $this->logInAs('admin'); @@ -282,6 +310,41 @@ class ExportControllerTest extends WallabagCoreTestCase $this->assertNotEmpty('updated_at', (string) $content->entry[0]->updated_at); } + private function setUpForJsonExportFromSearch() + { + $client = $this->getClient(); + $em = $this->getEntityManager(); + + $userRepository = $client->getContainer() + ->get('wallabag_user.user_repository.test'); + + $user = $userRepository->findOneByUserName('admin'); + $this->adminEntry = new Entry($user); + $this->adminEntry->setUrl('http://0.0.0.0/entry-search-admin'); + $this->adminEntry->setTitle('test title entry search admin'); + $this->adminEntry->setContent('this is my content /o/'); + $em->persist($this->adminEntry); + + $user = $userRepository->findOneByUserName('bob'); + $this->bobEntry = new Entry($user); + $this->bobEntry->setUrl('http://0.0.0.0/entry-search-bob'); + $this->bobEntry->setTitle('test title entry search bob'); + $this->bobEntry->setContent('this is my content /o/'); + $em->persist($this->bobEntry); + + $em->flush(); + } + + private function tearDownForJsonExportFromSearch() + { + $em = $this->getEntityManager(); + + $em->remove($this->adminEntry); + $em->remove($this->bobEntry); + + $em->flush(); + } + private function getSanitizedFilename($title) { return preg_replace('/[^A-Za-z0-9\- \']/', '', iconv('utf-8', 'us-ascii//TRANSLIT', $title)); -- cgit v1.2.3