X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FCoreBundle%2FController%2FEntryController.php;h=9b2954e7d5d0525711ac4a61dec9cbae3f6eeda1;hb=8a8a78a64c116caf81aaa4339906298bdc0e32e0;hp=5c8ecb402f661c31bcabcaaf4dd57070f06dc1da;hpb=3527c300215e6e6010efb8bb840b8b6f5c63a1cc;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index 5c8ecb40..9b2954e7 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php @@ -21,8 +21,49 @@ use Wallabag\CoreBundle\Form\Type\SearchEntryType; class EntryController extends Controller { /** - * @param Request $request - * @param int $page + * @Route("/mass", name="mass_action") + * + * @return \Symfony\Component\HttpFoundation\Response + */ + public function massAction(Request $request) + { + $em = $this->getDoctrine()->getManager(); + $values = $request->request->all(); + + $action = 'toggle-read'; + if (isset($values['toggle-star'])) { + $action = 'toggle-star'; + } elseif (isset($values['delete'])) { + $action = 'delete'; + } + + if (isset($values['entry-checkbox'])) { + foreach ($values['entry-checkbox'] as $id) { + /** @var Entry * */ + $entry = $this->get('wallabag_core.entry_repository')->findById((int) $id)[0]; + + $this->checkUserAction($entry); + + if ('toggle-read' === $action) { + $entry->toggleArchive(); + } elseif ('toggle-star' === $action) { + $entry->toggleStar(); + } elseif ('delete' === $action) { + $this->get('event_dispatcher')->dispatch(EntryDeletedEvent::NAME, new EntryDeletedEvent($entry)); + $em->remove($entry); + } + } + + $em->flush(); + } + + $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer')); + + return $this->redirect($redirectUrl); + } + + /** + * @param int $page * * @Route("/search/{page}", name="search", defaults={"page" = 1}) * @@ -53,8 +94,6 @@ class EntryController extends Controller } /** - * @param Request $request - * * @Route("/new-entry", name="new_entry") * * @return \Symfony\Component\HttpFoundation\Response @@ -97,8 +136,6 @@ class EntryController extends Controller } /** - * @param Request $request - * * @Route("/bookmarklet", name="bookmarklet") * * @return \Symfony\Component\HttpFoundation\Response @@ -135,9 +172,6 @@ class EntryController extends Controller /** * Edit an entry content. * - * @param Request $request - * @param Entry $entry - * * @Route("/edit/{id}", requirements={"id" = "\d+"}, name="edit") * * @return \Symfony\Component\HttpFoundation\Response @@ -171,8 +205,7 @@ class EntryController extends Controller /** * Shows all entries for current user. * - * @param Request $request - * @param int $page + * @param int $page * * @Route("/all/list/{page}", name="all", defaults={"page" = "1"}) * @@ -186,8 +219,7 @@ class EntryController extends Controller /** * Shows unread entries for current user. * - * @param Request $request - * @param int $page + * @param int $page * * @Route("/unread/list/{page}", name="unread", defaults={"page" = "1"}) * @@ -206,8 +238,7 @@ class EntryController extends Controller /** * Shows read entries for current user. * - * @param Request $request - * @param int $page + * @param int $page * * @Route("/archive/list/{page}", name="archive", defaults={"page" = "1"}) * @@ -221,8 +252,7 @@ class EntryController extends Controller /** * Shows starred entries for current user. * - * @param Request $request - * @param int $page + * @param int $page * * @Route("/starred/list/{page}", name="starred", defaults={"page" = "1"}) * @@ -236,8 +266,7 @@ class EntryController extends Controller /** * Shows untagged articles for current user. * - * @param Request $request - * @param int $page + * @param int $page * * @Route("/untagged/list/{page}", name="untagged", defaults={"page" = "1"}) * @@ -276,8 +305,6 @@ class EntryController extends Controller /** * Shows entry content. * - * @param Entry $entry - * * @Route("/view/{id}", requirements={"id" = "\d+"}, name="view") * * @return \Symfony\Component\HttpFoundation\Response @@ -296,8 +323,6 @@ 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 @@ -330,9 +355,6 @@ class EntryController extends Controller /** * Changes read status for an entry. * - * @param Request $request - * @param Entry $entry - * * @Route("/archive/{id}", requirements={"id" = "\d+"}, name="archive_entry") * * @return \Symfony\Component\HttpFoundation\RedirectResponse @@ -362,9 +384,6 @@ class EntryController extends Controller /** * Changes starred status for an entry. * - * @param Request $request - * @param Entry $entry - * * @Route("/star/{id}", requirements={"id" = "\d+"}, name="star_entry") * * @return \Symfony\Component\HttpFoundation\RedirectResponse @@ -395,8 +414,6 @@ class EntryController extends Controller /** * Deletes entry and redirect to the homepage or the last viewed page. * - * @param Entry $entry - * * @Route("/delete/{id}", requirements={"id" = "\d+"}, name="delete_entry") * * @return \Symfony\Component\HttpFoundation\RedirectResponse @@ -437,8 +454,6 @@ class EntryController extends Controller /** * Get public URL for entry (and generate it if necessary). * - * @param Entry $entry - * * @Route("/share/{id}", requirements={"id" = "\d+"}, name="share") * * @return \Symfony\Component\HttpFoundation\Response @@ -463,8 +478,6 @@ class EntryController extends Controller /** * Disable public sharing for an entry. * - * @param Entry $entry - * * @Route("/share/delete/{id}", requirements={"id" = "\d+"}, name="delete_share") * * @return \Symfony\Component\HttpFoundation\Response @@ -487,8 +500,6 @@ class EntryController extends Controller /** * Ability to view a content publicly. * - * @param Entry $entry - * * @Route("/share/{uid}", requirements={"uid" = ".+"}, name="share_entry") * @Cache(maxage="25200", smaxage="25200", public=true) * @@ -510,9 +521,8 @@ class EntryController extends Controller * Global method to retrieve entries depending on the given type * It returns the response to be send. * - * @param string $type Entries type: unread, starred or archive - * @param Request $request - * @param int $page + * @param string $type Entries type: unread, starred or archive + * @param int $page * * @return \Symfony\Component\HttpFoundation\Response */ @@ -567,6 +577,9 @@ class EntryController extends Controller } } + $nbEntriesUntagged = $this->get('wallabag_core.entry_repository') + ->countUntaggedEntriesByUser($this->getUser()->getId()); + return $this->render( 'WallabagCoreBundle:Entry:entries.html.twig', [ 'form' => $form->createView(), @@ -574,6 +587,7 @@ class EntryController extends Controller 'currentPage' => $page, 'searchTerm' => $searchTerm, 'isFiltered' => $form->isSubmitted(), + 'nbEntriesUntagged' => $nbEntriesUntagged, ] ); } @@ -582,7 +596,6 @@ class EntryController extends Controller * Fetch content and update entry. * In case it fails, $entry->getContent will return an error message. * - * @param Entry $entry * @param string $prefixMessage Should be the translation key: entry_saved or entry_reloaded */ private function updateEntry(Entry $entry, $prefixMessage = 'entry_saved') @@ -613,8 +626,6 @@ class EntryController extends Controller /** * Check if the logged user can manage the given entry. - * - * @param Entry $entry */ private function checkUserAction(Entry $entry) { @@ -626,8 +637,6 @@ class EntryController extends Controller /** * Check for existing entry, if it exists, redirect to it with a message. * - * @param Entry $entry - * * @return Entry|bool */ private function checkIfEntryAlreadyExists(Entry $entry)