diff --git a/apps/files_sharing/lib/Activity/Providers/Downloads.php b/apps/files_sharing/lib/Activity/Providers/Downloads.php index ac9522ef93b91..ee726a4e5da1a 100644 --- a/apps/files_sharing/lib/Activity/Providers/Downloads.php +++ b/apps/files_sharing/lib/Activity/Providers/Downloads.php @@ -55,12 +55,14 @@ public function parseLongVersion(IEvent $event, ?IEvent $previousEvent = null) { if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED || $event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) { - if (!isset($parsedParameters['remote-address-hash']['type'])) { - $subject = $this->l->t('{file} downloaded via public link'); - $this->setSubjects($event, $subject, $parsedParameters); + if (isset($parsedParameters['actor'])) { + $subject = $this->l->t('{file} downloaded via public link by {actor}'); } else { $subject = $this->l->t('{file} downloaded via public link'); - $this->setSubjects($event, $subject, $parsedParameters); + } + + $this->setSubjects($event, $subject, $parsedParameters); + if (isset($parsedParameters['remote-address-hash']['type'])) { $event = $this->eventMerger->mergeEvents('file', $event, $previousEvent); } } elseif ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED || @@ -92,20 +94,25 @@ protected function getParsedParameters(IEvent $event) { switch ($subject) { case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED: case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED: + $parsedParameters = [ + 'file' => $this->getFile($parameters[0], $event), + ]; + if (isset($parameters[1])) { - return [ - 'file' => $this->getFile($parameters[0], $event), - 'remote-address-hash' => [ - 'type' => 'highlight', - 'id' => $parameters[1], - 'name' => $parameters[1], - 'link' => '', - ], + $parsedParameters['remote-address-hash'] = [ + 'type' => 'highlight', + 'id' => $parameters[1], + 'name' => $parameters[1], + 'link' => '', ]; } - return [ - 'file' => $this->getFile($parameters[0], $event), - ]; + + if (isset($parameters[2])) { + $parsedParameters['actor'] = $this->getUser($parameters[2]); + } + + return $parsedParameters; + case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED: case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED: return [ diff --git a/apps/files_sharing/lib/Listener/BeforeNodeReadListener.php b/apps/files_sharing/lib/Listener/BeforeNodeReadListener.php index d19bc8dfae972..a28271e9507bd 100644 --- a/apps/files_sharing/lib/Listener/BeforeNodeReadListener.php +++ b/apps/files_sharing/lib/Listener/BeforeNodeReadListener.php @@ -23,6 +23,8 @@ use OCP\ICacheFactory; use OCP\IRequest; use OCP\ISession; +use OCP\IUser; +use OCP\IUserSession; use OCP\Share\IShare; /** @@ -30,6 +32,7 @@ */ class BeforeNodeReadListener implements IEventListener { private ICache $cache; + private ?IUser $currentUser = null; public function __construct( private ISession $session, @@ -37,8 +40,10 @@ public function __construct( private \OCP\Activity\IManager $activityManager, private IRequest $request, ICacheFactory $cacheFactory, + IUserSession $userSession, ) { $this->cache = $cacheFactory->createDistributed('files_sharing_activity_events'); + $this->currentUser = $userSession->getUser(); } public function handle(Event $event): void { @@ -156,6 +161,7 @@ protected function singleFileDownloaded(IShare $share, File|Folder $node): void $dateTime = $dateTime->format('Y-m-d H'); $remoteAddressHash = md5($dateTime . '-' . $remoteAddress); $parameters[] = $remoteAddressHash; + $parameters[] = $this->currentUser?->getUID(); } else { return; }