diff options
author | Nicolas Lœuillet <nicolas@loeuillet.org> | 2015-12-28 13:51:48 +0100 |
---|---|---|
committer | Nicolas Lœuillet <nicolas@loeuillet.org> | 2015-12-28 13:51:48 +0100 |
commit | c997cfcc9c161241a6398b0942a1a869688d807a (patch) | |
tree | 42c40d24baab371f5dd41eda12d3cbdbe6445a51 | |
parent | d25b8288216a09fa5cf7f40e614c133a6edd8a67 (diff) | |
parent | 2863bf2ab58a4903128f60751aa416130db93e52 (diff) | |
download | wallabag-c997cfcc9c161241a6398b0942a1a869688d807a.tar.gz wallabag-c997cfcc9c161241a6398b0942a1a869688d807a.tar.zst wallabag-c997cfcc9c161241a6398b0942a1a869688d807a.zip |
Merge pull request #1540 from wallabag/v2-fix-delete
v2 – Don't redirect to the content page after deletion
3 files changed, 64 insertions, 8 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index 6769799b..2f3fd6a9 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php | |||
@@ -5,6 +5,7 @@ namespace Wallabag\CoreBundle\Controller; | |||
5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | 6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; |
7 | use Symfony\Component\HttpFoundation\Request; | 7 | use Symfony\Component\HttpFoundation\Request; |
8 | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | ||
8 | use Wallabag\CoreBundle\Entity\Entry; | 9 | use Wallabag\CoreBundle\Entity\Entry; |
9 | use Wallabag\CoreBundle\Form\Type\NewEntryType; | 10 | use Wallabag\CoreBundle\Form\Type\NewEntryType; |
10 | use Wallabag\CoreBundle\Form\Type\EditEntryType; | 11 | use Wallabag\CoreBundle\Form\Type\EditEntryType; |
@@ -316,7 +317,7 @@ class EntryController extends Controller | |||
316 | } | 317 | } |
317 | 318 | ||
318 | /** | 319 | /** |
319 | * Deletes entry and redirect to the homepage. | 320 | * Deletes entry and redirect to the homepage or the last viewed page. |
320 | * | 321 | * |
321 | * @param Entry $entry | 322 | * @param Entry $entry |
322 | * | 323 | * |
@@ -328,6 +329,14 @@ class EntryController extends Controller | |||
328 | { | 329 | { |
329 | $this->checkUserAction($entry); | 330 | $this->checkUserAction($entry); |
330 | 331 | ||
332 | // generates the view url for this entry to check for redirection later | ||
333 | // to avoid redirecting to the deleted entry. Ugh. | ||
334 | $url = $this->generateUrl( | ||
335 | 'view', | ||
336 | array('id' => $entry->getId()), | ||
337 | UrlGeneratorInterface::ABSOLUTE_URL | ||
338 | ); | ||
339 | |||
331 | $em = $this->getDoctrine()->getManager(); | 340 | $em = $this->getDoctrine()->getManager(); |
332 | $em->remove($entry); | 341 | $em->remove($entry); |
333 | $em->flush(); | 342 | $em->flush(); |
@@ -337,7 +346,8 @@ class EntryController extends Controller | |||
337 | 'Entry deleted' | 346 | 'Entry deleted' |
338 | ); | 347 | ); |
339 | 348 | ||
340 | return $this->redirect($request->headers->get('referer')); | 349 | // don't redirect user to the deleted entry |
350 | return $this->redirect($url !== $request->headers->get('referer') ?: $this->generateUrl('homepage')); | ||
341 | } | 351 | } |
342 | 352 | ||
343 | /** | 353 | /** |
diff --git a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php index 176c529e..0513cdb8 100644 --- a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php +++ b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php | |||
@@ -16,7 +16,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface | |||
16 | public function load(ObjectManager $manager) | 16 | public function load(ObjectManager $manager) |
17 | { | 17 | { |
18 | $entry1 = new Entry($this->getReference('admin-user')); | 18 | $entry1 = new Entry($this->getReference('admin-user')); |
19 | $entry1->setUrl('http://0.0.0.0'); | 19 | $entry1->setUrl('http://0.0.0.0/entry1'); |
20 | $entry1->setReadingTime(11); | 20 | $entry1->setReadingTime(11); |
21 | $entry1->setDomainName('domain.io'); | 21 | $entry1->setDomainName('domain.io'); |
22 | $entry1->setMimetype('text/html'); | 22 | $entry1->setMimetype('text/html'); |
@@ -29,7 +29,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface | |||
29 | $this->addReference('entry1', $entry1); | 29 | $this->addReference('entry1', $entry1); |
30 | 30 | ||
31 | $entry2 = new Entry($this->getReference('admin-user')); | 31 | $entry2 = new Entry($this->getReference('admin-user')); |
32 | $entry2->setUrl('http://0.0.0.0'); | 32 | $entry2->setUrl('http://0.0.0.0/entry2'); |
33 | $entry2->setReadingTime(1); | 33 | $entry2->setReadingTime(1); |
34 | $entry2->setDomainName('domain.io'); | 34 | $entry2->setDomainName('domain.io'); |
35 | $entry2->setMimetype('text/html'); | 35 | $entry2->setMimetype('text/html'); |
@@ -42,7 +42,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface | |||
42 | $this->addReference('entry2', $entry2); | 42 | $this->addReference('entry2', $entry2); |
43 | 43 | ||
44 | $entry3 = new Entry($this->getReference('bob-user')); | 44 | $entry3 = new Entry($this->getReference('bob-user')); |
45 | $entry3->setUrl('http://0.0.0.0'); | 45 | $entry3->setUrl('http://0.0.0.0/entry3'); |
46 | $entry3->setReadingTime(1); | 46 | $entry3->setReadingTime(1); |
47 | $entry3->setDomainName('domain.io'); | 47 | $entry3->setDomainName('domain.io'); |
48 | $entry3->setMimetype('text/html'); | 48 | $entry3->setMimetype('text/html'); |
@@ -63,7 +63,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface | |||
63 | $this->addReference('entry3', $entry3); | 63 | $this->addReference('entry3', $entry3); |
64 | 64 | ||
65 | $entry4 = new Entry($this->getReference('admin-user')); | 65 | $entry4 = new Entry($this->getReference('admin-user')); |
66 | $entry4->setUrl('http://0.0.0.0'); | 66 | $entry4->setUrl('http://0.0.0.0/entry4'); |
67 | $entry4->setReadingTime(12); | 67 | $entry4->setReadingTime(12); |
68 | $entry4->setDomainName('domain.io'); | 68 | $entry4->setDomainName('domain.io'); |
69 | $entry4->setMimetype('text/html'); | 69 | $entry4->setMimetype('text/html'); |
@@ -84,7 +84,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface | |||
84 | $this->addReference('entry4', $entry4); | 84 | $this->addReference('entry4', $entry4); |
85 | 85 | ||
86 | $entry5 = new Entry($this->getReference('admin-user')); | 86 | $entry5 = new Entry($this->getReference('admin-user')); |
87 | $entry5->setUrl('http://0.0.0.0'); | 87 | $entry5->setUrl('http://0.0.0.0/entry5'); |
88 | $entry5->setReadingTime(12); | 88 | $entry5->setReadingTime(12); |
89 | $entry5->setDomainName('domain.io'); | 89 | $entry5->setDomainName('domain.io'); |
90 | $entry5->setMimetype('text/html'); | 90 | $entry5->setMimetype('text/html'); |
@@ -99,7 +99,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface | |||
99 | $this->addReference('entry5', $entry5); | 99 | $this->addReference('entry5', $entry5); |
100 | 100 | ||
101 | $entry6 = new Entry($this->getReference('admin-user')); | 101 | $entry6 = new Entry($this->getReference('admin-user')); |
102 | $entry6->setUrl('http://0.0.0.0'); | 102 | $entry6->setUrl('http://0.0.0.0/entry6'); |
103 | $entry6->setReadingTime(12); | 103 | $entry6->setReadingTime(12); |
104 | $entry6->setDomainName('domain.io'); | 104 | $entry6->setDomainName('domain.io'); |
105 | $entry6->setMimetype('text/html'); | 105 | $entry6->setMimetype('text/html'); |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php index af62aee8..9f585d85 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php | |||
@@ -3,6 +3,7 @@ | |||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | 3 | namespace Wallabag\CoreBundle\Tests\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; |
6 | use Wallabag\CoreBundle\Entity\Entry; | ||
6 | 7 | ||
7 | class EntryControllerTest extends WallabagCoreTestCase | 8 | class EntryControllerTest extends WallabagCoreTestCase |
8 | { | 9 | { |
@@ -290,6 +291,51 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
290 | $this->assertEquals(404, $client->getResponse()->getStatusCode()); | 291 | $this->assertEquals(404, $client->getResponse()->getStatusCode()); |
291 | } | 292 | } |
292 | 293 | ||
294 | /** | ||
295 | * It will create a new entry. | ||
296 | * Browse to it. | ||
297 | * Then remove it. | ||
298 | * | ||
299 | * And it'll check that user won't be redirected to the view page of the content when it had been removed | ||
300 | */ | ||
301 | public function testViewAndDelete() | ||
302 | { | ||
303 | $this->logInAs('admin'); | ||
304 | $client = $this->getClient(); | ||
305 | |||
306 | // add a new content to be removed later | ||
307 | $user = $client->getContainer() | ||
308 | ->get('doctrine.orm.entity_manager') | ||
309 | ->getRepository('WallabagUserBundle:User') | ||
310 | ->findOneByUserName('admin'); | ||
311 | |||
312 | $content = new Entry($user); | ||
313 | $content->setUrl('http://1.1.1.1/entry'); | ||
314 | $content->setReadingTime(12); | ||
315 | $content->setDomainName('domain.io'); | ||
316 | $content->setMimetype('text/html'); | ||
317 | $content->setTitle('test title entry'); | ||
318 | $content->setContent('This is my content /o/'); | ||
319 | $content->setArchived(true); | ||
320 | $content->setLanguage('fr'); | ||
321 | |||
322 | $client->getContainer() | ||
323 | ->get('doctrine.orm.entity_manager') | ||
324 | ->persist($content); | ||
325 | $client->getContainer() | ||
326 | ->get('doctrine.orm.entity_manager') | ||
327 | ->flush(); | ||
328 | |||
329 | $client->request('GET', '/view/'.$content->getId()); | ||
330 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
331 | |||
332 | $client->request('GET', '/delete/'.$content->getId()); | ||
333 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
334 | |||
335 | $client->followRedirect(); | ||
336 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
337 | } | ||
338 | |||
293 | public function testViewOtherUserEntry() | 339 | public function testViewOtherUserEntry() |
294 | { | 340 | { |
295 | $this->logInAs('admin'); | 341 | $this->logInAs('admin'); |