getComment()->getObjectType() !== 'files' || $event->getEvent() !== CommentsEvent::EVENT_ADD || !$this->appManager->isEnabledForAnyone('activity')) { // Comment not for file, not adding a comment or no activity-app enabled (save the energy) return; } // Get all mount point owners $cache = $this->mountCollection->getMountCache(); $mounts = $cache->getMountsForFileId((int)$event->getComment()->getObjectId()); if (empty($mounts)) { return; } $users = []; foreach ($mounts as $mount) { $owner = $mount->getUser()->getUID(); $ownerFolder = $this->rootFolder->getUserFolder($owner); $nodes = $ownerFolder->getById((int)$event->getComment()->getObjectId()); if (!empty($nodes)) { /** @var Node $node */ $node = array_shift($nodes); $al = $this->shareHelper->getPathsForAccessList($node); $users += $al['users']; } } $actor = $this->session->getUser(); if ($actor instanceof IUser) { $actor = $actor->getUID(); } else { $actor = ''; } $activity = $this->activityManager->generateEvent(); $activity->setApp('comments') ->setType('comments') ->setAuthor($actor) ->setObject($event->getComment()->getObjectType(), (int)$event->getComment()->getObjectId()) ->setMessage('add_comment_message', [ 'commentId' => $event->getComment()->getId(), ]); foreach ($users as $user => $path) { // numerical user ids end up as integers from array keys, but string // is required $activity->setAffectedUser((string)$user); $activity->setSubject('add_comment_subject', [ 'actor' => $actor, 'fileId' => (int)$event->getComment()->getObjectId(), 'filePath' => trim($path, '/'), ]); $this->activityManager->publish($activity); } } }