/**
  * @NoAdminRequired
  * @NoCSRFRequired
  *
  * @return JSONResponse
  */
 public function get()
 {
     // When there are no apps registered that use the notifications
     // We stop polling for them.
     if (!$this->manager->hasNotifiers()) {
         $response = new Response();
         $response->setStatus(Http::STATUS_NO_CONTENT);
         return $response;
     }
     $filter = $this->manager->createNotification();
     $filter->setUser($this->user);
     $language = $this->config->getUserValue($this->user, 'core', 'lang', null);
     $notifications = $this->handler->get($filter);
     $data = [];
     $notificationIds = [];
     foreach ($notifications as $notificationId => $notification) {
         try {
             $notification = $this->manager->prepare($notification, $language);
         } catch (\InvalidArgumentException $e) {
             // The app was disabled, skip the notification
             continue;
         }
         $notificationIds[] = $notificationId;
         $data[] = $this->notificationToArray($notificationId, $notification);
     }
     $response = new JSONResponse($data);
     $response->setETag($this->generateEtag($notificationIds));
     return $response;
 }
 /**
  * @NoAdminRequired
  * @NoCSRFRequired
  *
  * @return \OC_OCS_Result
  */
 public function listNotifications()
 {
     // When there are no apps registered that use the notifications
     // We stop polling for them.
     if (!$this->manager->hasNotifiers()) {
         return new \OC_OCS_Result(null, Http::STATUS_NO_CONTENT);
     }
     $filter = $this->manager->createNotification();
     $filter->setUser($this->getCurrentUser());
     $language = $this->config->getUserValue($this->getCurrentUser(), 'core', 'lang', null);
     $notifications = $this->handler->get($filter);
     $data = [];
     $notificationIds = [];
     foreach ($notifications as $notificationId => $notification) {
         /** @var INotification $notification */
         try {
             $notification = $this->manager->prepare($notification, $language);
         } catch (\InvalidArgumentException $e) {
             // The app was disabled, skip the notification
             continue;
         }
         $notificationIds[] = $notificationId;
         $data[] = $this->notificationToArray($notificationId, $notification);
     }
     return new \OC_OCS_Result($data, 100, null, ['ETag' => $this->generateEtag($notificationIds)]);
 }
 public function testDeleteById()
 {
     $notification = $this->getNotification(['getApp' => 'testing_notifications', 'getUser' => 'test_user1', 'getTimestamp' => time(), 'getObjectType' => 'notification', 'getObjectId' => 1337, 'getSubject' => 'subject', 'getSubjectParameters' => [], 'getMessage' => 'message', 'getMessageParameters' => [], 'getLink' => 'link', 'getIcon' => 'icon', 'getActions' => [['getLabel' => 'action_label', 'getIcon' => 'action_icon', 'getLink' => 'action_link', 'getRequestType' => 'GET']]]);
     $limitedNotification = $this->getNotification(['getApp' => 'testing_notifications', 'getUser' => 'test_user1']);
     // Make sure there is no notification
     $this->assertSame(0, $this->handler->count($limitedNotification));
     $notifications = $this->handler->get($limitedNotification);
     $this->assertCount(0, $notifications);
     // Add and count
     $this->handler->add($notification);
     $this->assertSame(1, $this->handler->count($limitedNotification));
     // Get and count
     $notifications = $this->handler->get($limitedNotification);
     $this->assertCount(1, $notifications);
     reset($notifications);
     $notificationId = key($notifications);
     // Delete with wrong user
     $this->handler->deleteById($notificationId, 'test_user2');
     $this->assertSame(1, $this->handler->count($limitedNotification), 'Wrong notification count for user1 after trying to delete for user2');
     // Delete and count
     $this->handler->deleteById($notificationId, 'test_user1');
     $this->assertSame(0, $this->handler->count($limitedNotification), 'Wrong notification count for user1 after deleting');
 }