]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/CoreBundle/Controller/NotificationsController.php
Notifications
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Controller / NotificationsController.php
diff --git a/src/Wallabag/CoreBundle/Controller/NotificationsController.php b/src/Wallabag/CoreBundle/Controller/NotificationsController.php
new file mode 100644 (file)
index 0000000..17e576c
--- /dev/null
@@ -0,0 +1,96 @@
+<?php
+
+namespace Wallabag\CoreBundle\Controller;
+
+use Pagerfanta\Adapter\DoctrineORMAdapter;
+use Pagerfanta\Exception\OutOfRangeCurrentPageException;
+use Pagerfanta\Pagerfanta;
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
+use Symfony\Bundle\FrameworkBundle\Controller\Controller;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Wallabag\CoreBundle\Entity\Notification;
+
+class NotificationsController extends Controller
+{
+    /**
+     * @Route("/notifications/{page}", name="notifications-all", defaults={"page" = "1"})
+     *
+     * @param int $page
+     *
+     * @return Response
+     */
+    public function getAllNotificationsAction($page = 1)
+    {
+        $qb = $this->getDoctrine()->getRepository('WallabagCoreBundle:Notification')->getBuilderForNotificationsByUser($this->getUser()->getId());
+        $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false);
+
+        $notifications = new Pagerfanta($pagerAdapter);
+        $notifications->setMaxPerPage($this->getParameter('wallabag_core.notifications_nb'));
+
+        try {
+            $notifications->setCurrentPage($page);
+        } catch (OutOfRangeCurrentPageException $e) {
+            if ($page > 1) {
+                return $this->redirect($this->generateUrl('notifications-all', ['page' => $notifications->getNbPages()]), 302);
+            }
+        }
+
+        return $this->render('WallabagCoreBundle:Notification:notifications.html.twig', [
+            'notifications' => $notifications,
+            'currentPage' => $page,
+        ]);
+    }
+
+    /**
+     * @Route("/notifications/readall", name="notification-archive-all")
+     *
+     * @param Request $request
+     *
+     * @return Response
+     */
+    public function markAllNotificationsAsReadAction(Request $request)
+    {
+        $this->getDoctrine()->getRepository('WallabagCoreBundle:Notification')->markAllAsReadForUser($this->getUser()->getId());
+
+        return $this->redirectToRoute('notifications-all');
+    }
+
+    /**
+     * @Route("/notifications/read/{notification}", name="notification-archive")
+     *
+     * @param Notification $notification
+     *
+     * @return Response
+     */
+    public function markNotificationsAsReadAction(Notification $notification)
+    {
+        $em = $this->getDoctrine()->getManager();
+
+        $notification->setRead(true);
+
+        $em->persist($notification);
+        $em->flush();
+
+        return $this->redirectToRoute('notifications-all');
+    }
+
+    /**
+     * @Route("/notifications/read/{notification}/redirect", name="notification-archive-redirect", requirements={"notification" = "\d+"})
+     *
+     * @param Request      $request
+     * @param Notification $notification
+     */
+    public function markNotificationAsReadAndRedirectAction(Request $request, Notification $notification)
+    {
+        $em = $this->getDoctrine()->getManager();
+
+        $notification->setRead(true);
+
+        $em->persist($notification);
+        $em->flush();
+
+        $redirection = $request->get('redirection');
+        $this->redirect($redirection);
+    }
+}