diff options
author | Arthur Schiwon <blizzz@owncloud.com> | 2016-05-09 10:02:07 +0200 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2016-10-07 17:11:19 +0200 |
commit | e1073cf442613ac92878c8ded30a33db35b30e14 (patch) | |
tree | 43bf514650829b6a4684cb564c62b3785f60b188 /apps/comments/lib/Controller/Notifications.php | |
parent | 9e7824f3edcb498447915a396e93678ddb6f5768 (diff) | |
download | nextcloud-server-e1073cf442613ac92878c8ded30a33db35b30e14.tar.gz nextcloud-server-e1073cf442613ac92878c8ded30a33db35b30e14.zip |
Notificacations for simple @-mentioning in comments
(WIP) notify user when mentioned in comments
Fix doc, and create absolute URL for as notification link.
PSR-4 compatibility changes
also move notification creation to comments app
Do not notify yourself
unit test for controller and application
smaller fixes
- translatable app name
- remove doubles in mention array
- micro perf optimization
- display name: special label for deleted users, keep user id for users that could not be fetched from userManager
Comment Notification-Listener Unit Test
fix email adresses
remove notification when triggering comment was deleted
add and adjust tests
add missing @license tags
simplify NotificationsController registration
appinfo simplification, php docs
make string easier to translate
adjust test
replace dispatcher-based listeners with a registration method and interface
safer to not pass optional data parameter to setSubject for marking as processed. ID and mention suffices
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
update comment
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'apps/comments/lib/Controller/Notifications.php')
-rw-r--r-- | apps/comments/lib/Controller/Notifications.php | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/apps/comments/lib/Controller/Notifications.php b/apps/comments/lib/Controller/Notifications.php new file mode 100644 index 00000000000..f76f1605345 --- /dev/null +++ b/apps/comments/lib/Controller/Notifications.php @@ -0,0 +1,138 @@ +<?php + +/** + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Comments\Controller; + +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\NotFoundResponse; +use OCP\AppFramework\Http\RedirectResponse; +use OCP\AppFramework\Http\Response; +use OCP\Comments\IComment; +use OCP\Comments\ICommentsManager; +use OCP\Files\Folder; +use OCP\IRequest; +use OCP\IURLGenerator; +use OCP\IUserSession; +use OCP\Notification\IManager; + +/** + * Class Notifications + * + * @package OCA\Comments\Controller + */ +class Notifications extends Controller { + /** @var Folder */ + protected $folder; + + /** @var ICommentsManager */ + protected $commentsManager; + + /** @var IURLGenerator */ + protected $urlGenerator; + + /** @var IManager */ + protected $notificationManager; + + /** @var IUserSession */ + protected $userSession; + + /** + * Notifications constructor. + * + * @param string $appName + * @param IRequest $request + * @param ICommentsManager $commentsManager + * @param Folder $folder + * @param IURLGenerator $urlGenerator + * @param IManager $notificationManager + * @param IUserSession $userSession + */ + public function __construct( + $appName, + IRequest $request, + ICommentsManager $commentsManager, + Folder $folder, + IURLGenerator $urlGenerator, + IManager $notificationManager, + IUserSession $userSession + ) { + parent::__construct($appName, $request); + $this->commentsManager = $commentsManager; + $this->folder = $folder; + $this->urlGenerator = $urlGenerator; + $this->notificationManager = $notificationManager; + $this->userSession = $userSession; + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * + * @param string $id the comment ID + * @return Response + */ + public function view($id) { + try { + $comment = $this->commentsManager->get($id); + if($comment->getObjectType() !== 'files') { + return new NotFoundResponse(); + } + $files = $this->folder->getById($comment->getObjectId()); + if(count($files) === 0) { + $this->markProcessed($comment); + return new NotFoundResponse(); + } + + $dir = $this->folder->getRelativePath($files[0]->getParent()->getPath()); + $url = $this->urlGenerator->linkToRouteAbsolute( + 'files.view.index', + [ + 'dir' => $dir, + 'scrollto' => $files[0]->getName() + ] + ); + + $this->markProcessed($comment); + + return new RedirectResponse($url); + } catch (\Exception $e) { + return new NotFoundResponse(); + } + } + + /** + * Marks the notification about a comment as processed + * @param IComment $comment + */ + protected function markProcessed(IComment $comment) { + $user = $this->userSession->getUser(); + if(is_null($user)) { + return; + } + $notification = $this->notificationManager->createNotification(); + $notification->setApp('comments') + ->setObject('comment', $comment->getId()) + ->setSubject('mention') + ->setUser($user->getUID()); + $this->notificationManager->markProcessed($notification); + } +} |