}
/**
- * Shows random unread entry.
+ * Shows random entry depending on the given type.
*
- * @param Entry $entry
- *
- * @Route("/unread/random", name="unread_random")
- *
- * @return \Symfony\Component\HttpFoundation\Response
- */
- public function showRandomUnreadEntryAction()
- {
- return $this->showRandomEntries('unread');
- }
-
- /**
- * Shows random favorite entry.
- *
- * @param Entry $entry
- *
- * @Route("/starred/random", name="starred_random")
- *
- * @return \Symfony\Component\HttpFoundation\Response
- */
- public function showRandomStarredEntryAction()
- {
- return $this->showRandomEntries('starred');
- }
-
- /**
- * Shows random archived entry.
+ * @param string $type
*
- * @param Entry $entry
+ * @Route("/{type}/random", name="random_entry", requirements={"type": "unread|starred|archive|untagged|all"})
*
- * @Route("/archive/random", name="archive_random")
- *
- * @return \Symfony\Component\HttpFoundation\Response
+ * @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
- public function showRandomArchiveEntryAction()
+ public function redirectRandomEntryAction($type = 'all')
{
- return $this->showRandomEntries('archive');
- }
+ try {
+ $entry = $this->get('wallabag_core.entry_repository')
+ ->getRandomEntry($this->getUser()->getId(), $type);
+ } catch (NoResultException $e) {
+ $bag = $this->get('session')->getFlashBag();
+ $bag->clear();
+ $bag->add('notice', 'flashes.entry.notice.no_random_entry');
- /**
- * Shows random all entry.
- *
- * @param Entry $entry
- *
- * @Route("/untagged/random", name="untagged_random")
- *
- * @return \Symfony\Component\HttpFoundation\Response
- */
- public function showRandomUntaggedEntryAction()
- {
- return $this->showRandomEntries('untagged');
- }
+ return $this->redirect($this->generateUrl($type));
+ }
- /**
- * Shows random all entry.
- *
- * @param Entry $entry
- *
- * @Route("/all/random", name="all_random")
- *
- * @return \Symfony\Component\HttpFoundation\Response
- */
- public function showRandomAllEntryAction()
- {
- return $this->showRandomEntries();
+ return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
}
/**
);
}
- /**
- * Global method to retrieve random entries depending on the given type.
- *
- * @param string $type Entries type: unread, starred, archive or untagged
- *
- * @return \Symfony\Component\HttpFoundation\RedirectResponse
- */
- private function showRandomEntries($type)
- {
- $repository = $this->get('wallabag_core.entry_repository');
-
- try {
- $entry = $repository->getRandomEntry($this->getUser()->getId(), $type);
- } catch (NoResultException $e) {
- $bag = $this->get('session')->getFlashBag();
- $bag->clear();
- $bag->add('notice', 'flashes.entry.notice.no_random_entry');
-
- return $this->redirect($this->generateUrl('homepage'));
- }
-
- return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
- }
-
/**
* Fetch content and update entry.
* In case it fails, $entry->getContent will return an error message.