X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FCoreBundle%2FController%2FEntryController.php;h=9097810c22ff4dd3a88f3e8edba3f95d67fda4bf;hb=303768dfe9b85f87d043eb225c5c8c3a88d8c051;hp=f7b52eaf71b4de811dedc7173d78eae51935d181;hpb=880a0e1c0ba7d0ab3320678b076402379a08c8a2;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index f7b52eaf..9097810c 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php @@ -5,6 +5,7 @@ namespace Wallabag\CoreBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Wallabag\CoreBundle\Entity\Entry; use Wallabag\CoreBundle\Form\Type\NewEntryType; use Wallabag\CoreBundle\Form\Type\EditEntryType; @@ -40,6 +41,7 @@ class EntryController extends Controller */ public function addEntryFormAction(Request $request) { + $em = $this->getDoctrine()->getManager(); $entry = new Entry($this->getUser()); $form = $this->createForm(new NewEntryType(), $entry); @@ -47,6 +49,19 @@ class EntryController extends Controller $form->handleRequest($request); if ($form->isValid()) { + $existingEntry = $em + ->getRepository('WallabagCoreBundle:Entry') + ->findOneByUrlAndUserId($entry->getUrl(), $this->getUser()->getId()); + + if (count($existingEntry) > 0) { + $this->get('session')->getFlashBag()->add( + 'notice', + 'Entry already saved on '.$existingEntry[0]->getCreatedAt()->format('d-m-Y') + ); + + return $this->redirect($this->generateUrl('view', array('id' => $existingEntry[0]->getId()))); + } + $this->updateEntry($entry); $this->get('session')->getFlashBag()->add( 'notice', @@ -265,6 +280,33 @@ class EntryController extends Controller ); } + /** + * Reload an entry. + * Refetch content from the website and make it readable again. + * + * @param Entry $entry + * + * @Route("/reload/{id}", requirements={"id" = "\d+"}, name="reload_entry") + * + * @return \Symfony\Component\HttpFoundation\RedirectResponse + */ + public function reloadAction(Entry $entry) + { + $this->checkUserAction($entry); + + $message = 'Entry reloaded'; + if (false === $this->updateEntry($entry)) { + $message = 'Failed to reload entry'; + } + + $this->get('session')->getFlashBag()->add( + 'notice', + $message + ); + + return $this->redirect($this->generateUrl('view', array('id' => $entry->getId()))); + } + /** * Changes read status for an entry. * @@ -316,7 +358,7 @@ class EntryController extends Controller } /** - * Deletes entry and redirect to the homepage. + * Deletes entry and redirect to the homepage or the last viewed page. * * @param Entry $entry * @@ -324,10 +366,18 @@ class EntryController extends Controller * * @return \Symfony\Component\HttpFoundation\RedirectResponse */ - public function deleteEntryAction(Entry $entry) + public function deleteEntryAction(Request $request, Entry $entry) { $this->checkUserAction($entry); + // generates the view url for this entry to check for redirection later + // to avoid redirecting to the deleted entry. Ugh. + $url = $this->generateUrl( + 'view', + array('id' => $entry->getId()), + UrlGeneratorInterface::ABSOLUTE_URL + ); + $em = $this->getDoctrine()->getManager(); $em->remove($entry); $em->flush(); @@ -337,7 +387,8 @@ class EntryController extends Controller 'Entry deleted' ); - return $this->redirect($this->generateUrl('homepage')); + // don't redirect user to the deleted entry + return $this->redirect($url !== $request->headers->get('referer') ? $request->headers->get('referer') : $this->generateUrl('homepage')); } /**